[CodeGen] Add support for extracting elements of scalable vectors
authorDavid Sherwood <david.sherwood@arm.com>
Wed, 6 May 2020 16:14:15 +0000 (17:14 +0100)
committerDavid Sherwood <david.sherwood@arm.com>
Fri, 29 May 2020 06:49:43 +0000 (07:49 +0100)
commitb147b88c8432cdc14a3238925dbfb8d55be32932
tree22f9ef5fcf56e5907cbc3b2589b9123d287cc575
parent0baf0e8cfc1845ef92d397c1ae43793bf9e6aaad
[CodeGen] Add support for extracting elements of scalable vectors

I have tried to ensure that SelectionDAG and DAGCombiner do
sensible things for scalable vectors, and added support for a
limited number of simple folds. Codegen support for the vector
extract patterns have also been added to the AArch64 backend.

New vector extract tests have been added here:

  CodeGen/AArch64/sve-extract-element.ll

and I have also added new folds using inserts and extracts here:

  CodeGen/AArch64/sve-insert-element.ll

Differential Revision: https://reviews.llvm.org/D80208
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/test/CodeGen/AArch64/sve-extract-element.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sve-insert-element.ll