[ARM] MVE vector shuffles
authorDavid Green <david.green@arm.com>
Fri, 28 Jun 2019 07:08:42 +0000 (07:08 +0000)
committerDavid Green <david.green@arm.com>
Fri, 28 Jun 2019 07:08:42 +0000 (07:08 +0000)
commit8be372b19015b3b1d8bfaadd4f9f82528dc571ee
tree688fd23fdc6731b1de3ab7986fcc1656bac0a61c
parentcbb88a5169934acf995f739bcb8a04e33f3a4594
[ARM] MVE vector shuffles

This patch adds necessary shuffle vector and buildvector support for ARM MVE.
It essentially adds support for VDUP, VREVs and some VMOVs, which are often
required by other code (like upcoming patches).

This mostly uses the same code from Neon that already generated
NEONvdup/NEONvduplane/NEONvrev's. These have been renamed to ARMvdup/etc and
moved to ARMInstrInfo as they are common to both architectures. Most of the
selection code seems to be applicable to both, but NEON does have some more
instructions making some parts specific.

Most code originally by David Sherwood.

Differential Revision: https://reviews.llvm.org/D63567

llvm-svn: 364626
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/lib/Target/ARM/ARMISelLowering.h
llvm/lib/Target/ARM/ARMInstrInfo.td
llvm/lib/Target/ARM/ARMInstrMVE.td
llvm/lib/Target/ARM/ARMInstrNEON.td
llvm/test/CodeGen/Thumb2/mve-bitcasts.ll
llvm/test/CodeGen/Thumb2/mve-shuffle.ll [new file with mode: 0644]
llvm/test/CodeGen/Thumb2/mve-vdup.ll [new file with mode: 0644]