[ARM] MVE big endian bitcasts
commitd2f7b2b338d5e3865b6951241792ced82296826f
authorDavid Green <david.green@arm.com>
Sun, 4 Aug 2019 10:18:15 +0000 (4 10:18 +0000)
committerDavid Green <david.green@arm.com>
Sun, 4 Aug 2019 10:18:15 +0000 (4 10:18 +0000)
treeb94f53c018c2331b9616aed3205c71fbc1a83e8d
parentd6eae7ff653c9e4f4013f16210256adbec1ff699
[ARM] MVE big endian bitcasts

This adds big endian MVE patterns for bitcasts. They are defined in llvm as
being the same as a store of the existing type and the load into the new. This
means that they have to become a VREV between the two types, working in the
same way that NEON works in big-endian. This also adds some example tests for
bigendian, showing where code is and isn't different.

The main difference, especially from a testing perspective is that vectors are
passed as v2f64, and so are VREV into and out of call arguments, and the
parameters are passed in a v2f64 format. Same happens for inline assembly where
the register class is used, so it is VREV to a v16i8.

So some of this is probably not correct yet, but it is (mostly) self-consistent
and seems to be consistent with how llvm treats vectors. The rest we can
hopefully fix later. More details about big endian neon can be found in
https://llvm.org/docs/BigEndianNEON.html.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367780 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMInstrMVE.td
test/CodeGen/Thumb2/mve-be.ll [new file with mode: 0644]