This is an archive of the discontinued LLVM Phabricator instance.

[ARM] MVE big endian bitcasts
ClosedPublic

Authored by dmgreen on Aug 1 2019, 8:22 AM.

Details

Summary

This adds big endian MVE patterns for bitcasts. They are defined 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 a VREV's 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 VREVd 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.

Diff Detail

Repository
rL LLVM

Event Timeline

dmgreen created this revision.Aug 1 2019, 8:22 AM
This revision is now accepted and ready to land.Aug 2 2019, 3:47 AM
This revision was automatically updated to reflect the committed changes.