[SVE][CodeGen] Lower scalable masked scatters
authorKerry McLaughlin <kerry.mclaughlin@arm.com>
Wed, 11 Nov 2020 11:15:32 +0000 (11:15 +0000)
committerKerry McLaughlin <kerry.mclaughlin@arm.com>
Wed, 11 Nov 2020 11:50:22 +0000 (11:50 +0000)
commit170947a5def3a316ac0a11c334af7b3d25f929e1
treee485ba9b72061f4742d8c281de916ee3eea23866
parent98aa067109ed482e428bc16e1321dbe756efc57c
[SVE][CodeGen] Lower scalable masked scatters

Lowers the llvm.masked.scatter intrinsics (scalar plus vector addressing mode only)

Changes included in this patch:
 - Custom lowering for MSCATTER, which chooses the appropriate scatter store opcode to use.
    Floating-point scatters are cast to integer, with patterns added to match FP reinterpret_casts.
 - Added the getCanonicalIndexType function to convert redundant addressing
   modes (e.g. scaling is redundant when accessing bytes)
 - Tests with 32 & 64-bit scaled & unscaled offsets

Reviewed By: sdesmalen

Differential Revision: https://reviews.llvm.org/D90941
13 files changed:
llvm/include/llvm/CodeGen/SelectionDAGNodes.h
llvm/include/llvm/CodeGen/TargetLowering.h
llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.h
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/test/CodeGen/AArch64/sve-masked-scatter-32b-scaled.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sve-masked-scatter-32b-unscaled.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sve-masked-scatter-64b-scaled.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sve-masked-scatter-64b-unscaled.ll [new file with mode: 0644]