summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/vsx.ll
diff options
context:
space:
mode:
authorTony Jiang <jtony@ca.ibm.com>2016-11-15 14:25:56 +0000
committerTony Jiang <jtony@ca.ibm.com>2016-11-15 14:25:56 +0000
commit5f850cd1b10f4dffc86285c2f71ab34cba9e929d (patch)
tree8bf2ea3b1da693627ba11aa9c7b97ab612fe3e59 /llvm/test/CodeGen/PowerPC/vsx.ll
parent3776e7620153d3530b0ceaca628382ecb80c9a20 (diff)
downloadbcm5719-llvm-5f850cd1b10f4dffc86285c2f71ab34cba9e929d.tar.gz
bcm5719-llvm-5f850cd1b10f4dffc86285c2f71ab34cba9e929d.zip
[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
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/vsx.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/vsx.ll48
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/vsx.ll b/llvm/test/CodeGen/PowerPC/vsx.ll
index 2be57d2ae18..92b0eaff9fb 100644
--- a/llvm/test/CodeGen/PowerPC/vsx.ll
+++ b/llvm/test/CodeGen/PowerPC/vsx.ll
@@ -1190,3 +1190,51 @@ entry:
; CHECK-LE: xscmpudp [[REG:[0-9]+]], 3, 4
; CHECK-LE: beqlr [[REG]]
}
+
+; Function Attrs: nounwind readnone
+define <4 x i32> @test83(i8* %a) {
+ entry:
+ %0 = tail call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %a)
+ ret <4 x i32> %0
+ ; CHECK-LABEL: test83
+ ; CHECK: lxvw4x 34, 0, 3
+ ; CHECK: blr
+}
+; Function Attrs: nounwind readnone
+declare <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8*)
+
+; Function Attrs: nounwind readnone
+define <2 x double> @test84(i8* %a) {
+ entry:
+ %0 = tail call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %a)
+ ret <2 x double> %0
+ ; CHECK-LABEL: test84
+ ; CHECK: lxvd2x 34, 0, 3
+ ; CHECK: blr
+}
+; Function Attrs: nounwind readnone
+declare <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8*)
+
+; Function Attrs: nounwind readnone
+define void @test85(<4 x i32> %a, i8* %b) {
+ entry:
+ tail call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %a, i8* %b)
+ ret void
+ ; CHECK-LABEL: test85
+ ; CHECK: stxvw4x 34, 0, 5
+ ; CHECK: blr
+}
+; Function Attrs: nounwind readnone
+declare void @llvm.ppc.vsx.stxvw4x.be(<4 x i32>, i8*)
+
+; Function Attrs: nounwind readnone
+define void @test86(<2 x double> %a, i8* %b) {
+ entry:
+ tail call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %a, i8* %b)
+ ret void
+ ; CHECK-LABEL: test86
+ ; CHECK: stxvd2x 34, 0, 5
+ ; CHECK: blr
+}
+; Function Attrs: nounwind readnone
+declare void @llvm.ppc.vsx.stxvd2x.be(<2 x double>, i8*)
OpenPOWER on IntegriCloud