[PowerPC] Implement BE VSX load/store builtins - llvm portion.
authorTony Jiang <jtony@ca.ibm.com>
Tue, 15 Nov 2016 14:25:56 +0000 (14:25 +0000)
committerTony Jiang <jtony@ca.ibm.com>
Tue, 15 Nov 2016 14:25:56 +0000 (14:25 +0000)
commit5f850cd1b10f4dffc86285c2f71ab34cba9e929d
tree8bf2ea3b1da693627ba11aa9c7b97ab612fe3e59
parent3776e7620153d3530b0ceaca628382ecb80c9a20
[PowerPC] Implement BE VSX load/store builtins - llvm portion.

This patch implements all the overloads for vec_xl_be and vec_xst_be. On BE,
they behaves exactly the same with vec_xl and vec_xst, therefore they are
simply implemented by defining a matching macro. On LE, they are implemented
by defining new builtins and intrinsics. For int/float/long long/double, it
is just a load (lxvw4x/lxvd2x) or store(stxvw4x/stxvd2x). For char/char/short,
we also need some extra shuffling before or after call the builtins to get the
desired BE order. For int128, simply call vec_xl or vec_xst.

llvm-svn: 286967
llvm/include/llvm/IR/IntrinsicsPowerPC.td
llvm/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/lib/Target/PowerPC/PPCInstrVSX.td
llvm/test/CodeGen/PowerPC/vsx.ll