[AArch64][SME] Add load and store instructions
authorCullen Rhodes <cullen.rhodes@arm.com>
Fri, 16 Jul 2021 09:14:08 +0000 (09:14 +0000)
committerCullen Rhodes <cullen.rhodes@arm.com>
Fri, 16 Jul 2021 10:11:10 +0000 (10:11 +0000)
commit99eb96f03186bf94476498979d5a6cd6a9cbf066
tree79e0e3aa3a550644aac0b97d64fd86f18a88f7f3
parentd046fb62b7e7cd273b104fee0162725003411c00
[AArch64][SME] Add load and store instructions

This patch adds support for following contiguous load and store
instructions:

  * LD1B, LD1H, LD1W, LD1D, LD1Q
  * ST1B, ST1H, ST1W, ST1D, ST1Q

A new register class and operand is added for the 32-bit vector select
register W12-W15. The differences in the following tests which have been
re-generated are caused by the introduction of this register class:

  * llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll
  * llvm/test/CodeGen/AArch64/GlobalISel/regbank-inlineasm.mir
  * llvm/test/CodeGen/AArch64/stp-opt-with-renaming-reserved-regs.mir
  * llvm/test/CodeGen/AArch64/stp-opt-with-renaming.mir

D88663 attempts to resolve the issue with the store pair test
differences in the AArch64 load/store optimizer.

The GlobalISel differences are caused by changes in the enum values of
register classes, tests have been updated with the new values.

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06

Reviewed By: CarolineConcatto

Differential Revision: https://reviews.llvm.org/D105572
35 files changed:
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
llvm/lib/Target/AArch64/AArch64RegisterInfo.td
llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp
llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp
llvm/lib/Target/AArch64/SMEInstrFormats.td
llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll
llvm/test/CodeGen/AArch64/GlobalISel/regbank-inlineasm.mir
llvm/test/CodeGen/AArch64/stp-opt-with-renaming-reserved-regs.mir
llvm/test/CodeGen/AArch64/stp-opt-with-renaming.mir
llvm/test/MC/AArch64/SME/addha-diagnostics.s
llvm/test/MC/AArch64/SME/ld1b-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1b.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1d-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1d.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1h-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1h.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1q-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1q.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1w-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/ld1w.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1b-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1b.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1d-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1d.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1h-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1h.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1q-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1q.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1w-diagnostics.s [new file with mode: 0644]
llvm/test/MC/AArch64/SME/st1w.s [new file with mode: 0644]
llvm/test/MC/AArch64/neon-diagnostics.s