[PATCH] AArch64: big endian constant vector pools

Christian Pirker cpirker at a-bix.com
Fri Apr 11 09:37:03 PDT 2014


  Hi Tim,

  your proposed patch is interesting, however does not fully address the issue.
  Please consider the following code (derived from the c-sample above):

    define void @foo( <4 x i64>* %loadaddr, <4 x i32>* %storeaddr ) {
      %1 = load <4 x i64>* %loadaddr
      %2 = add <4 x i64> %1, <i64 1, i64 2, i64 3, i64 4>
      %3 = trunc <4 x i64> %2 to <4 x i32>
      store <4 x i32> %3, <4 x i32>* %storeaddr
      ret void
    }

  compile with:
    llc -march aarch64_be -mattr neon

  Note that the const value is loaded with ldr q and used by vector instruction, thus swapping of the two upper and the two lower  vector elements. (I would like to note that D3345 does not help either, causing all vector elements swapped, but that's a different issue). I'm looking forward to your ideas.

  Thanks,
  Christian

http://reviews.llvm.org/D3305






More information about the llvm-commits mailing list