[ARM64-BE] Implement the lane-twiddling logic at AAPCS boundaries for big endian.
authorJames Molloy <james.molloy@arm.com>
Wed, 7 May 2014 12:33:41 +0000 (12:33 +0000)
committerJames Molloy <james.molloy@arm.com>
Wed, 7 May 2014 12:33:41 +0000 (12:33 +0000)
commitfca7f5c5856e112f12c63e9c9ebf0fae5aca525f
tree67ddf7d23107fabd339b926f64defd5e4ccaca63
parent1caec99d5d3e68b0f11419d5552a00c5d6d569f5
[ARM64-BE] Implement the lane-twiddling logic at AAPCS boundaries for big endian.

The AAPCS states that values passed in registers must have a value as though
they had been loaded with "LDR". LDR is equivalent to "LD1.64 vX.1D" - that is,
loading scalars to vector registers and loading 1-element vectors is equivalent.

The logic implemented here is to ensure that at all call boundaries and during
formal argument lowering all vectors are treated as their bitwidth-based floating
point scalar counterpart, which is always one of f64 or f128 (v2i32 -> f64,
v4i32 -> f128 etc). A BITCAST is inserted so that the appropriate REV will be
generated during code generation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208198 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM64/ARM64CallingConvention.td
test/CodeGen/ARM64/big-endian-vector-callee.ll [new file with mode: 0644]
test/CodeGen/ARM64/big-endian-vector-caller.ll [new file with mode: 0644]