diff options
Diffstat (limited to 'test/CodeGen/PowerPC/bswap-load-store.ll')
-rw-r--r-- | test/CodeGen/PowerPC/bswap-load-store.ll | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/bswap-load-store.ll b/test/CodeGen/PowerPC/bswap-load-store.ll new file mode 100644 index 0000000..0c4a117 --- /dev/null +++ b/test/CodeGen/PowerPC/bswap-load-store.ll @@ -0,0 +1,44 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc32 | \ +; RUN: grep {stwbrx\\|lwbrx\\|sthbrx\\|lhbrx} | wc -l | grep 4 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc32 | not grep rlwinm +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc32 | not grep rlwimi +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc64 | \ +; RUN: grep {stwbrx\\|lwbrx\\|sthbrx\\|lhbrx} | wc -l | grep 4 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc64 | not grep rlwinm +; RUN: llvm-upgrade < %s | llvm-as | llc -march=ppc64 | not grep rlwimi + +void %STWBRX(uint %i, sbyte* %ptr, int %off) { + %tmp1 = getelementptr sbyte* %ptr, int %off + %tmp1 = cast sbyte* %tmp1 to uint* + %tmp13 = tail call uint %llvm.bswap.i32(uint %i) + store uint %tmp13, uint* %tmp1 + ret void +} + +uint %LWBRX(sbyte* %ptr, int %off) { + %tmp1 = getelementptr sbyte* %ptr, int %off + %tmp1 = cast sbyte* %tmp1 to uint* + %tmp = load uint* %tmp1 + %tmp14 = tail call uint %llvm.bswap.i32( uint %tmp ) + ret uint %tmp14 +} + +void %STHBRX(ushort %s, sbyte* %ptr, int %off) { + %tmp1 = getelementptr sbyte* %ptr, int %off + %tmp1 = cast sbyte* %tmp1 to ushort* + %tmp5 = call ushort %llvm.bswap.i16( ushort %s ) + store ushort %tmp5, ushort* %tmp1 + ret void +} + +ushort %LHBRX(sbyte* %ptr, int %off) { + %tmp1 = getelementptr sbyte* %ptr, int %off + %tmp1 = cast sbyte* %tmp1 to ushort* + %tmp = load ushort* %tmp1 + %tmp6 = call ushort %llvm.bswap.i16(ushort %tmp) + ret ushort %tmp6 +} + +declare uint %llvm.bswap.i32(uint) + +declare ushort %llvm.bswap.i16(ushort) |