diff options
author | tyb0807 <sontuan.vu@arm.com> | 2022-01-18 22:34:48 +0000 |
---|---|---|
committer | tyb0807 <sontuan.vu@arm.com> | 2022-01-31 20:54:41 +0000 |
commit | 78fd413cf736953ac623cabf3d5f84c8219e31f8 (patch) | |
tree | fcc02b4cd8468355d9a9cb1c11ad19548dc018e3 /flang/lib/Frontend/CompilerInvocation.cpp | |
parent | 6ec9fd20bd77b145f5e3e1cc45fa76ce5b24b2a4 (diff) | |
download | llvm-78fd413cf736953ac623cabf3d5f84c8219e31f8.zip llvm-78fd413cf736953ac623cabf3d5f84c8219e31f8.tar.gz llvm-78fd413cf736953ac623cabf3d5f84c8219e31f8.tar.bz2 |
[AArch64][GlobalISel] CodeGen for Armv8.8/9.3 MOPS
This implements codegen for Armv8.8/9.3 Memory Operations extension (MOPS).
Any memcpy/memset/memmov intrinsics will always be emitted as a series
of three consecutive instructions P, M and E which perform the
operation. The SelectionDAG implementation is split into a separate
patch.
AArch64LegalizerInfo will now consider the following generic opcodes
if +mops is available, instead of legalising by expanding them to
libcalls: G_BZERO, G_MEMCPY_INLINE, G_MEMCPY, G_MEMMOVE, G_MEMSET
The s8 value of memset is legalised to s64 to match the pseudos.
AArch64O0PreLegalizerCombinerInfo will still be able to combine
G_MEMCPY_INLINE even if +mops is present, as it is unclear whether it is
better to generate fixed length copies or MOPS instructions for the
inline code of small or zero-sized memory operations, so we choose to be
conservative for now.
AArch64InstructionSelector will select the above as new pseudo
instructions: AArch64::MOPSMemory{Copy/Move/Set/SetTagging} These are
each expanded to a series of three instructions (e.g. SETP/SETM/SETE)
which must be emitted together during code emission to avoid scheduler
reordering.
This is part 3/4 of a series of patches split from
https://reviews.llvm.org/D117405 to facilitate reviewing.
Patch by Tomas Matheson and Son Tuan Vu
Differential Revision: https://reviews.llvm.org/D117763
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions