[SVE][AArch64] Improve code generation for vector_splice for Imm > 0
authorCaroline Concatto <caroline.concatto@arm.com>
Mon, 19 Jul 2021 10:14:20 +0000 (11:14 +0100)
committerCaroline Concatto <caroline.concatto@arm.com>
Mon, 26 Jul 2021 10:45:46 +0000 (11:45 +0100)
commit0bfc26e3a4bf291f1d64610fe422c82789d752bc
treeb380dd26e19c5149dc92fc7f08e24fe3f087aa79
parentb2a5f0029f278dadb62f9e98dec12b1840020324
[SVE][AArch64] Improve code generation for vector_splice for Imm > 0

This patch implements vector_splice in tablegen for all cases when the
Immediate is positive and lower than the known minimum value of
a scalable vector.
Vector_splice can be implemented using SVE instruction EXT.
For instance :
    @llvm.experimental.vector.splice(Vector_1, Vector_2, Imm)
    @llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, 1) ==> <B, C, D, E>
        EXT  Vector_1, Vector_2, Imm              // Vector_1 = B, C, D + Vector_2 = E

Depends on D105633

Differential Revision: https://reviews.llvm.org/D106273
llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/lib/Target/AArch64/SVEInstrFormats.td
llvm/test/CodeGen/AArch64/named-vector-shuffles-sve.ll