xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/builtins-ppc-elf2-abi.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@vda = common global <2 x double> zeroinitializer, align 16
5*9880d681SAndroid Build Coastguard Worker@vdb = common global <2 x double> zeroinitializer, align 16
6*9880d681SAndroid Build Coastguard Worker@vdr = common global <2 x double> zeroinitializer, align 16
7*9880d681SAndroid Build Coastguard Worker@vfa = common global <4 x float> zeroinitializer, align 16
8*9880d681SAndroid Build Coastguard Worker@vfb = common global <4 x float> zeroinitializer, align 16
9*9880d681SAndroid Build Coastguard Worker@vfr = common global <4 x float> zeroinitializer, align 16
10*9880d681SAndroid Build Coastguard Worker@vbllr = common global <2 x i64> zeroinitializer, align 16
11*9880d681SAndroid Build Coastguard Worker@vbir = common global <4 x i32> zeroinitializer, align 16
12*9880d681SAndroid Build Coastguard Worker@vblla = common global <2 x i64> zeroinitializer, align 16
13*9880d681SAndroid Build Coastguard Worker@vbllb = common global <2 x i64> zeroinitializer, align 16
14*9880d681SAndroid Build Coastguard Worker@vbia = common global <4 x i32> zeroinitializer, align 16
15*9880d681SAndroid Build Coastguard Worker@vbib = common global <4 x i32> zeroinitializer, align 16
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
18*9880d681SAndroid Build Coastguard Workerdefine void @test1() {
19*9880d681SAndroid Build Coastguard Workerentry:
20*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @vda, align 16
21*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* @vdb, align 16
22*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x double> @llvm.ppc.vsx.xvdivdp(<2 x double> %0, <2 x double> %1)
23*9880d681SAndroid Build Coastguard Worker  store <2 x double> %2, <2 x double>* @vdr, align 16
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
26*9880d681SAndroid Build Coastguard Worker; CHECK: xvdivdp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
30*9880d681SAndroid Build Coastguard Workerdefine void @test2() {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @vfa, align 16
33*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* @vfb, align 16
34*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x float> @llvm.ppc.vsx.xvdivsp(<4 x float> %0, <4 x float> %1)
35*9880d681SAndroid Build Coastguard Worker  store <4 x float> %2, <4 x float>* @vfr, align 16
36*9880d681SAndroid Build Coastguard Worker  ret void
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2
38*9880d681SAndroid Build Coastguard Worker; CHECK: xvdivsp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
42*9880d681SAndroid Build Coastguard Workerdefine void @test3() {
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @vda, align 16
45*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* @vda, align 16
46*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x double> @llvm.ceil.v2f64(<2 x double> %1)
47*9880d681SAndroid Build Coastguard Worker  store <2 x double> %2, <2 x double>* @vdr, align 16
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3
50*9880d681SAndroid Build Coastguard Worker; CHECK: xvrdpip {{[0-9]+}}, {{[0-9]+}}
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
54*9880d681SAndroid Build Coastguard Workerdefine void @test4() {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @vfa, align 16
57*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* @vfa, align 16
58*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x float> @llvm.ceil.v4f32(<4 x float> %1)
59*9880d681SAndroid Build Coastguard Worker  store <4 x float> %2, <4 x float>* @vfr, align 16
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4
62*9880d681SAndroid Build Coastguard Worker; CHECK: xvrspip {{[0-9]+}}, {{[0-9]+}}
63*9880d681SAndroid Build Coastguard Worker}
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
66*9880d681SAndroid Build Coastguard Workerdefine void @test5() {
67*9880d681SAndroid Build Coastguard Workerentry:
68*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @vda, align 16
69*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* @vdb, align 16
70*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.ppc.vsx.xvcmpeqdp(<2 x double> %0, <2 x double> %1)
71*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* @vbllr, align 16
72*9880d681SAndroid Build Coastguard Worker  ret void
73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5
74*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpeqdp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
78*9880d681SAndroid Build Coastguard Workerdefine void @test6() {
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @vfa, align 16
81*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* @vfb, align 16
82*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.ppc.vsx.xvcmpeqsp(<4 x float> %0, <4 x float> %1)
83*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* @vbir, align 16
84*9880d681SAndroid Build Coastguard Worker  ret void
85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6
86*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpeqsp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
90*9880d681SAndroid Build Coastguard Workerdefine void @test7() {
91*9880d681SAndroid Build Coastguard Workerentry:
92*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @vda, align 16
93*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* @vdb, align 16
94*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %0, <2 x double> %1)
95*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* @vbllr, align 16
96*9880d681SAndroid Build Coastguard Worker  ret void
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7
98*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpgedp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
102*9880d681SAndroid Build Coastguard Workerdefine void @test8() {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @vfa, align 16
105*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* @vfb, align 16
106*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %0, <4 x float> %1)
107*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* @vbir, align 16
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8
110*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpgesp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
114*9880d681SAndroid Build Coastguard Workerdefine void @test9() {
115*9880d681SAndroid Build Coastguard Workerentry:
116*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @vda, align 16
117*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* @vdb, align 16
118*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %0, <2 x double> %1)
119*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* @vbllr, align 16
120*9880d681SAndroid Build Coastguard Worker  ret void
121*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9
122*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpgtdp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
126*9880d681SAndroid Build Coastguard Workerdefine void @test10() {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @vfa, align 16
129*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* @vfb, align 16
130*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %0, <4 x float> %1)
131*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* @vbir, align 16
132*9880d681SAndroid Build Coastguard Worker  ret void
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10
134*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpgtsp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
138*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @emit_xvresp(<4 x float> %a) {
139*9880d681SAndroid Build Coastguard Workerentry:
140*9880d681SAndroid Build Coastguard Worker  %a.addr = alloca <4 x float>, align 16
141*9880d681SAndroid Build Coastguard Worker  store <4 x float> %a, <4 x float>* %a.addr, align 16
142*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* %a.addr, align 16
143*9880d681SAndroid Build Coastguard Worker  %1 = call <4 x float> @llvm.ppc.vsx.xvresp(<4 x float> %0)
144*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @emit_xvresp
146*9880d681SAndroid Build Coastguard Worker; CHECK: xvresp {{[0-9]+}}, {{[0-9]+}}
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
150*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @emit_xvredp(<2 x double> %a) {
151*9880d681SAndroid Build Coastguard Workerentry:
152*9880d681SAndroid Build Coastguard Worker  %a.addr = alloca <2 x double>, align 16
153*9880d681SAndroid Build Coastguard Worker  store <2 x double> %a, <2 x double>* %a.addr, align 16
154*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* %a.addr, align 16
155*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x double> @llvm.ppc.vsx.xvredp(<2 x double> %0)
156*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %1
157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @emit_xvredp
158*9880d681SAndroid Build Coastguard Worker; CHECK: xvredp {{[0-9]+}}, {{[0-9]+}}
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
162*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.ppc.vsx.xvresp(<4 x float>)
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
165*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ppc.vsx.xvredp(<2 x double>)
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
168*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ceil.v2f64(<2 x double>)
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
171*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.ceil.v4f32(<4 x float>)
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
174*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ppc.vsx.xvdivdp(<2 x double>, <2 x double>)
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
177*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.ppc.vsx.xvdivsp(<4 x float>, <4 x float>)
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
180*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ppc.vsx.xvcmpeqdp(<2 x double>, <2 x double>)
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
183*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ppc.vsx.xvcmpeqsp(<4 x float>, <4 x float>)
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
186*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double>, <2 x double>)
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
189*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float>, <4 x float>)
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
192*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double>, <2 x double>)
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
195*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float>, <4 x float>)
196