xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/vsx.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx < %s | FileCheck -check-prefix=CHECK-REG %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx -fast-isel -O0 < %s | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx -fast-isel -O0 < %s | FileCheck -check-prefix=CHECK-FISL %s
5*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu -mattr=+vsx < %s | FileCheck -check-prefix=CHECK-LE %s
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine double @test1(double %a, double %b) {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  %v = fmul double %a, %b
10*9880d681SAndroid Build Coastguard Worker  ret double %v
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
13*9880d681SAndroid Build Coastguard Worker; CHECK: xsmuldp 1, 1, 2
14*9880d681SAndroid Build Coastguard Worker; CHECK: blr
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test1
17*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xsmuldp 1, 1, 2
18*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine double @test2(double %a, double %b) {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %v = fdiv double %a, %b
24*9880d681SAndroid Build Coastguard Worker  ret double %v
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2
27*9880d681SAndroid Build Coastguard Worker; CHECK: xsdivdp 1, 1, 2
28*9880d681SAndroid Build Coastguard Worker; CHECK: blr
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test2
31*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xsdivdp 1, 1, 2
32*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine double @test3(double %a, double %b) {
36*9880d681SAndroid Build Coastguard Workerentry:
37*9880d681SAndroid Build Coastguard Worker  %v = fadd double %a, %b
38*9880d681SAndroid Build Coastguard Worker  ret double %v
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3
41*9880d681SAndroid Build Coastguard Worker; CHECK: xsadddp 1, 1, 2
42*9880d681SAndroid Build Coastguard Worker; CHECK: blr
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test3
45*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xsadddp 1, 1, 2
46*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test4(<2 x double> %a, <2 x double> %b) {
50*9880d681SAndroid Build Coastguard Workerentry:
51*9880d681SAndroid Build Coastguard Worker  %v = fadd <2 x double> %a, %b
52*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4
55*9880d681SAndroid Build Coastguard Worker; CHECK: xvadddp 34, 34, 35
56*9880d681SAndroid Build Coastguard Worker; CHECK: blr
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test4
59*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvadddp 34, 34, 35
60*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test5(<4 x i32> %a, <4 x i32> %b) {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %v = xor <4 x i32> %a, %b
66*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test5
69*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlxor 34, 34, 35
70*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test5
73*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
74*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
75*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor
76*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2
77*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test5
80*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlxor 34, 34, 35
81*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test6(<8 x i16> %a, <8 x i16> %b) {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  %v = xor <8 x i16> %a, %b
87*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %v
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test6
90*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlxor 34, 34, 35
91*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test6
94*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
95*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
96*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor 36, 36, 37
97*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
98*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test6
101*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlxor 34, 34, 35
102*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
106*9880d681SAndroid Build Coastguard Workerentry:
107*9880d681SAndroid Build Coastguard Worker  %v = xor <16 x i8> %a, %b
108*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %v
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test7
111*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlxor 34, 34, 35
112*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test7
115*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
116*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
117*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor 36, 36, 37
118*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
119*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test7
122*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlxor 34, 34, 35
123*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test8(<4 x i32> %a, <4 x i32> %b) {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %v = or <4 x i32> %a, %b
129*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test8
132*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor 34, 34, 35
133*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test8
136*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
137*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
138*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor
139*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2
140*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test8
143*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlor 34, 34, 35
144*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
148*9880d681SAndroid Build Coastguard Workerentry:
149*9880d681SAndroid Build Coastguard Worker  %v = or <8 x i16> %a, %b
150*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %v
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test9
153*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor 34, 34, 35
154*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test9
157*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
158*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
159*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 36, 36, 37
160*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
161*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test9
164*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlor 34, 34, 35
165*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test10(<16 x i8> %a, <16 x i8> %b) {
169*9880d681SAndroid Build Coastguard Workerentry:
170*9880d681SAndroid Build Coastguard Worker  %v = or <16 x i8> %a, %b
171*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %v
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test10
174*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor 34, 34, 35
175*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test10
178*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
179*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
180*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 36, 36, 37
181*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
182*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test10
185*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlor 34, 34, 35
186*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test11(<4 x i32> %a, <4 x i32> %b) {
190*9880d681SAndroid Build Coastguard Workerentry:
191*9880d681SAndroid Build Coastguard Worker  %v = and <4 x i32> %a, %b
192*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test11
195*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxland 34, 34, 35
196*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test11
199*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
200*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor
201*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxland
202*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2
203*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test11
206*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxland 34, 34, 35
207*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
211*9880d681SAndroid Build Coastguard Workerentry:
212*9880d681SAndroid Build Coastguard Worker  %v = and <8 x i16> %a, %b
213*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %v
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test12
216*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxland 34, 34, 35
217*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test12
220*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
221*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
222*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxland 36, 36, 37
223*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
224*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test12
227*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxland 34, 34, 35
228*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test13(<16 x i8> %a, <16 x i8> %b) {
232*9880d681SAndroid Build Coastguard Workerentry:
233*9880d681SAndroid Build Coastguard Worker  %v = and <16 x i8> %a, %b
234*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %v
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test13
237*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxland 34, 34, 35
238*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test13
241*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
242*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
243*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxland 36, 36, 37
244*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
245*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test13
248*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxland 34, 34, 35
249*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test14(<4 x i32> %a, <4 x i32> %b) {
253*9880d681SAndroid Build Coastguard Workerentry:
254*9880d681SAndroid Build Coastguard Worker  %v = or <4 x i32> %a, %b
255*9880d681SAndroid Build Coastguard Worker  %w = xor <4 x i32> %v, <i32 -1, i32 -1, i32 -1, i32 -1>
256*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %w
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test14
259*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlnor 34, 34, 35
260*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test14
263*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 3, 3
264*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 2, 2
265*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 0, 37, 36
266*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlnor 36, 37, 36
267*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
268*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1
269*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65520
270*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxvd2x 0, 1, 0
271*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test14
274*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlnor 34, 34, 35
275*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
279*9880d681SAndroid Build Coastguard Workerentry:
280*9880d681SAndroid Build Coastguard Worker  %v = or <8 x i16> %a, %b
281*9880d681SAndroid Build Coastguard Worker  %w = xor <8 x i16> %v, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
282*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %w
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test15
285*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlnor 34, 34, 35
286*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test15
289*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
290*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
291*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 36, 36, 37
292*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 4, 4
293*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
294*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
295*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlnor 36, 36, 37
296*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
297*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1
298*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65520
299*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stvx 0, 1, 0
300*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
301*9880d681SAndroid Build Coastguard Worker
302*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test15
303*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlnor 34, 34, 35
304*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test16(<16 x i8> %a, <16 x i8> %b) {
308*9880d681SAndroid Build Coastguard Workerentry:
309*9880d681SAndroid Build Coastguard Worker  %v = or <16 x i8> %a, %b
310*9880d681SAndroid Build Coastguard Worker  %w = xor <16 x i8> %v, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
311*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %w
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test16
314*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlnor 34, 34, 35
315*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test16
318*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
319*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
320*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 36, 36, 37
321*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 4, 4
322*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 2, 2
323*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
324*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlnor 36, 36, 37
325*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
326*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1
327*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65520
328*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stvx 0, 1, 0
329*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test16
332*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlnor 34, 34, 35
333*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
337*9880d681SAndroid Build Coastguard Workerentry:
338*9880d681SAndroid Build Coastguard Worker  %w = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
339*9880d681SAndroid Build Coastguard Worker  %v = and <4 x i32> %a, %w
340*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test17
343*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlandc 34, 34, 35
344*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test17
347*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 3, 3
348*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 2, 2
349*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vspltisb 2, -1
350*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 2, 2
351*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor 36, 36, 32
352*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxland 36, 37, 36
353*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
354*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test17
357*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlandc 34, 34, 35
358*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
359*9880d681SAndroid Build Coastguard Worker}
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test18(<8 x i16> %a, <8 x i16> %b) {
362*9880d681SAndroid Build Coastguard Workerentry:
363*9880d681SAndroid Build Coastguard Worker  %w = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
364*9880d681SAndroid Build Coastguard Worker  %v = and <8 x i16> %a, %w
365*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %v
366*9880d681SAndroid Build Coastguard Worker
367*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test18
368*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlandc 34, 34, 35
369*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test18
372*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vspltisb 4, -1
373*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
374*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 4, 4
375*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor 37, 37, 32
376*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 5, 5
377*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 2, 2
378*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 3, 3
379*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlandc 37, 37, 32
380*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 5, 5
381*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1
382*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65520
383*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stvx 4, 1, 0
384*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test18
387*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlandc 34, 34, 35
388*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
389*9880d681SAndroid Build Coastguard Worker}
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test19(<16 x i8> %a, <16 x i8> %b) {
392*9880d681SAndroid Build Coastguard Workerentry:
393*9880d681SAndroid Build Coastguard Worker  %w = xor <16 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
394*9880d681SAndroid Build Coastguard Worker  %v = and <16 x i8> %a, %w
395*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %v
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test19
398*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlandc 34, 34, 35
399*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test19
402*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vspltisb 4, -1
403*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 3, 3
404*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 4, 4
405*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlxor 37, 37, 32
406*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 5, 5
407*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 2, 2
408*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 3, 3
409*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlandc 37, 37, 32
410*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 5, 5
411*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1
412*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65520
413*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stvx 4, 1, 0
414*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test19
417*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlandc 34, 34, 35
418*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {
422*9880d681SAndroid Build Coastguard Workerentry:
423*9880d681SAndroid Build Coastguard Worker  %m = icmp eq <4 x i32> %c, %d
424*9880d681SAndroid Build Coastguard Worker  %v = select <4 x i1> %m, <4 x i32> %a, <4 x i32> %b
425*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
426*9880d681SAndroid Build Coastguard Worker
427*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test20
428*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vcmpequw {{[0-9]+}}, 4, 5
429*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxsel 34, 35, 34, {{[0-9]+}}
430*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Worker; FIXME: The fast-isel code is pretty miserable for this one.
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test20
435*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 5, 5
436*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 1, 4, 4
437*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 6, 3, 3
438*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 7, 2, 2
439*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 1, 1
440*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 3, 0, 0
441*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vcmpequw 2, 2, 3
442*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 2, 2
443*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxsel 32, 38, 39, 32
444*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 0, 0
445*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test20
448*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpequw {{[0-9]+}}, 4, 5
449*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, {{[0-9]+}}
450*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
451*9880d681SAndroid Build Coastguard Worker}
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test21(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d) {
454*9880d681SAndroid Build Coastguard Workerentry:
455*9880d681SAndroid Build Coastguard Worker  %m = fcmp oeq <4 x float> %c, %d
456*9880d681SAndroid Build Coastguard Worker  %v = select <4 x i1> %m, <4 x float> %a, <4 x float> %b
457*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %v
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test21
460*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xvcmpeqsp [[V1:[0-9]+]], 36, 37
461*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxsel 34, 35, 34, [[V1]]
462*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
463*9880d681SAndroid Build Coastguard Worker
464*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test21
465*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 5, 5
466*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 1, 4, 4
467*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 6, 3, 3
468*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 7, 2, 2
469*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xvcmpeqsp 32, 33, 32
470*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxsel 32, 38, 39, 32
471*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 0, 0
472*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
473*9880d681SAndroid Build Coastguard Worker
474*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test21
475*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcmpeqsp [[V1:[0-9]+]], 36, 37
476*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, [[V1]]
477*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
478*9880d681SAndroid Build Coastguard Worker}
479*9880d681SAndroid Build Coastguard Worker
480*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test22(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d) {
481*9880d681SAndroid Build Coastguard Workerentry:
482*9880d681SAndroid Build Coastguard Worker  %m = fcmp ueq <4 x float> %c, %d
483*9880d681SAndroid Build Coastguard Worker  %v = select <4 x i1> %m, <4 x float> %a, <4 x float> %b
484*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %v
485*9880d681SAndroid Build Coastguard Worker
486*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test22
487*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xvcmpeqsp {{[0-9]+}}, 37, 37
488*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xvcmpeqsp {{[0-9]+}}, 36, 36
489*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xvcmpeqsp {{[0-9]+}}, 36, 37
490*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xxlnor
491*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xxlnor
492*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xxlor
493*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: xxlor
494*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxsel 34, 35, 34, {{[0-9]+}}
495*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test22
498*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xvcmpeqsp {{[0-9]+}}, 33, 32
499*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xvcmpeqsp {{[0-9]+}}, 32, 32
500*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xvcmpeqsp {{[0-9]+}}, 33, 33
501*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xxlnor
502*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xxlnor
503*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xxlor
504*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xxlor
505*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxsel 0, 38, 39, {{[0-9]+}}
506*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test22
509*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xvcmpeqsp {{[0-9]+}}, 37, 37
510*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xvcmpeqsp {{[0-9]+}}, 36, 36
511*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xvcmpeqsp {{[0-9]+}}, 36, 37
512*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxlnor
513*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxlnor
514*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxlor
515*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxlor
516*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, {{[0-9]+}}
517*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
518*9880d681SAndroid Build Coastguard Worker}
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test23(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i16> %d) {
521*9880d681SAndroid Build Coastguard Workerentry:
522*9880d681SAndroid Build Coastguard Worker  %m = icmp eq <8 x i16> %c, %d
523*9880d681SAndroid Build Coastguard Worker  %v = select <8 x i1> %m, <8 x i16> %a, <8 x i16> %b
524*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %v
525*9880d681SAndroid Build Coastguard Worker
526*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test23
527*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vcmpequh {{[0-9]+}}, 4, 5
528*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxsel 34, 35, 34, {{[0-9]+}}
529*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test23
532*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vcmpequh 4, 4, 5
533*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 3, 3
534*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 1, 2, 2
535*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 6, 4, 4
536*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxsel 32, 32, 33, 38
537*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 0,
538*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test23
541*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpequh {{[0-9]+}}, 4, 5
542*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, {{[0-9]+}}
543*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
544*9880d681SAndroid Build Coastguard Worker}
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test24(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {
547*9880d681SAndroid Build Coastguard Workerentry:
548*9880d681SAndroid Build Coastguard Worker  %m = icmp eq <16 x i8> %c, %d
549*9880d681SAndroid Build Coastguard Worker  %v = select <16 x i1> %m, <16 x i8> %a, <16 x i8> %b
550*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %v
551*9880d681SAndroid Build Coastguard Worker
552*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test24
553*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vcmpequb {{[0-9]+}}, 4, 5
554*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxsel 34, 35, 34, {{[0-9]+}}
555*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test24
558*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vcmpequb 4, 4, 5
559*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 0, 3, 3
560*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 1, 2, 2
561*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 6, 4, 4
562*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxsel 32, 32, 33, 38
563*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 0, 0
564*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test24
567*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpequb {{[0-9]+}}, 4, 5
568*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, {{[0-9]+}}
569*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
570*9880d681SAndroid Build Coastguard Worker}
571*9880d681SAndroid Build Coastguard Worker
572*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test25(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
573*9880d681SAndroid Build Coastguard Workerentry:
574*9880d681SAndroid Build Coastguard Worker  %m = fcmp oeq <2 x double> %c, %d
575*9880d681SAndroid Build Coastguard Worker  %v = select <2 x i1> %m, <2 x double> %a, <2 x double> %b
576*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test25
579*9880d681SAndroid Build Coastguard Worker; CHECK: xvcmpeqdp [[V1:[0-9]+]], 36, 37
580*9880d681SAndroid Build Coastguard Worker; CHECK: xxsel 34, 35, 34, [[V1]]
581*9880d681SAndroid Build Coastguard Worker; CHECK: blr
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test25
584*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcmpeqdp [[V1:[0-9]+]], 36, 37
585*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxsel 34, 35, 34, [[V1]]
586*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
587*9880d681SAndroid Build Coastguard Worker}
588*9880d681SAndroid Build Coastguard Worker
589*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test26(<2 x i64> %a, <2 x i64> %b) {
590*9880d681SAndroid Build Coastguard Worker  %v = add <2 x i64> %a, %b
591*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test26
594*9880d681SAndroid Build Coastguard Worker
595*9880d681SAndroid Build Coastguard Worker; Make sure we use only two stores (one for each operand).
596*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 35,
597*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 34,
598*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: stxvd2x
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Worker; FIXME: The code quality here is not good; just make sure we do something for now.
601*9880d681SAndroid Build Coastguard Worker; CHECK: add
602*9880d681SAndroid Build Coastguard Worker; CHECK: add
603*9880d681SAndroid Build Coastguard Worker; CHECK: blr
604*9880d681SAndroid Build Coastguard Worker
605*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vaddudm 2, 2, 3
606*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
607*9880d681SAndroid Build Coastguard Worker}
608*9880d681SAndroid Build Coastguard Worker
609*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test27(<2 x i64> %a, <2 x i64> %b) {
610*9880d681SAndroid Build Coastguard Worker  %v = and <2 x i64> %a, %b
611*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test27
614*9880d681SAndroid Build Coastguard Worker; CHECK: xxland 34, 34, 35
615*9880d681SAndroid Build Coastguard Worker; CHECK: blr
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test27
618*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxland 34, 34, 35
619*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
620*9880d681SAndroid Build Coastguard Worker}
621*9880d681SAndroid Build Coastguard Worker
622*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test28(<2 x double>* %a) {
623*9880d681SAndroid Build Coastguard Worker  %v = load <2 x double>, <2 x double>* %a, align 16
624*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
625*9880d681SAndroid Build Coastguard Worker
626*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test28
627*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x 34, 0, 3
628*9880d681SAndroid Build Coastguard Worker; CHECK: blr
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test28
631*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
632*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
633*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
634*9880d681SAndroid Build Coastguard Worker}
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Workerdefine void @test29(<2 x double>* %a, <2 x double> %b) {
637*9880d681SAndroid Build Coastguard Worker  store <2 x double> %b, <2 x double>* %a, align 16
638*9880d681SAndroid Build Coastguard Worker  ret void
639*9880d681SAndroid Build Coastguard Worker
640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test29
641*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 34, 0, 3
642*9880d681SAndroid Build Coastguard Worker; CHECK: blr
643*9880d681SAndroid Build Coastguard Worker
644*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test29
645*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
646*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
647*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
648*9880d681SAndroid Build Coastguard Worker}
649*9880d681SAndroid Build Coastguard Worker
650*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test28u(<2 x double>* %a) {
651*9880d681SAndroid Build Coastguard Worker  %v = load <2 x double>, <2 x double>* %a, align 8
652*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
653*9880d681SAndroid Build Coastguard Worker
654*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test28u
655*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x 34, 0, 3
656*9880d681SAndroid Build Coastguard Worker; CHECK: blr
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test28u
659*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
660*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
661*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
662*9880d681SAndroid Build Coastguard Worker}
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Workerdefine void @test29u(<2 x double>* %a, <2 x double> %b) {
665*9880d681SAndroid Build Coastguard Worker  store <2 x double> %b, <2 x double>* %a, align 8
666*9880d681SAndroid Build Coastguard Worker  ret void
667*9880d681SAndroid Build Coastguard Worker
668*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test29u
669*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 34, 0, 3
670*9880d681SAndroid Build Coastguard Worker; CHECK: blr
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test29u
673*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
674*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
675*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test30(<2 x i64>* %a) {
679*9880d681SAndroid Build Coastguard Worker  %v = load <2 x i64>, <2 x i64>* %a, align 16
680*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
681*9880d681SAndroid Build Coastguard Worker
682*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test30
683*9880d681SAndroid Build Coastguard Worker; CHECK-REG: lxvd2x 34, 0, 3
684*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
685*9880d681SAndroid Build Coastguard Worker
686*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test30
687*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lxvd2x 0, 0, 3
688*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 34, 0, 0
689*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 3, 2, 2
690*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 3, 3
691*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
692*9880d681SAndroid Build Coastguard Worker
693*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test30
694*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
695*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
696*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
697*9880d681SAndroid Build Coastguard Worker}
698*9880d681SAndroid Build Coastguard Worker
699*9880d681SAndroid Build Coastguard Workerdefine void @test31(<2 x i64>* %a, <2 x i64> %b) {
700*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %b, <2 x i64>* %a, align 16
701*9880d681SAndroid Build Coastguard Worker  ret void
702*9880d681SAndroid Build Coastguard Worker
703*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test31
704*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 34, 0, 3
705*9880d681SAndroid Build Coastguard Worker; CHECK: blr
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test31
708*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
709*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
710*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
711*9880d681SAndroid Build Coastguard Worker}
712*9880d681SAndroid Build Coastguard Worker
713*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test32(<4 x float>* %a) {
714*9880d681SAndroid Build Coastguard Worker  %v = load <4 x float>, <4 x float>* %a, align 16
715*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %v
716*9880d681SAndroid Build Coastguard Worker
717*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test32
718*9880d681SAndroid Build Coastguard Worker; CHECK-REG: lxvw4x 34, 0, 3
719*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
720*9880d681SAndroid Build Coastguard Worker
721*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test32
722*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lxvw4x 0, 0, 3
723*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 34, 0, 0
724*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
725*9880d681SAndroid Build Coastguard Worker
726*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test32
727*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
728*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
729*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
730*9880d681SAndroid Build Coastguard Worker}
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Workerdefine void @test33(<4 x float>* %a, <4 x float> %b) {
733*9880d681SAndroid Build Coastguard Worker  store <4 x float> %b, <4 x float>* %a, align 16
734*9880d681SAndroid Build Coastguard Worker  ret void
735*9880d681SAndroid Build Coastguard Worker
736*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test33
737*9880d681SAndroid Build Coastguard Worker; CHECK-REG: stxvw4x 34, 0, 3
738*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
739*9880d681SAndroid Build Coastguard Worker
740*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test33
741*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 3, 2, 2
742*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxvw4x 35, 0, 3
743*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
744*9880d681SAndroid Build Coastguard Worker
745*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test33
746*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
747*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
748*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
749*9880d681SAndroid Build Coastguard Worker}
750*9880d681SAndroid Build Coastguard Worker
751*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test32u(<4 x float>* %a) {
752*9880d681SAndroid Build Coastguard Worker  %v = load <4 x float>, <4 x float>* %a, align 8
753*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %v
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test32u
756*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lvsl
757*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lvx
758*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lvx
759*9880d681SAndroid Build Coastguard Worker; CHECK: vperm 2,
760*9880d681SAndroid Build Coastguard Worker; CHECK: blr
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test32u
763*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
764*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
765*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
766*9880d681SAndroid Build Coastguard Worker}
767*9880d681SAndroid Build Coastguard Worker
768*9880d681SAndroid Build Coastguard Workerdefine void @test33u(<4 x float>* %a, <4 x float> %b) {
769*9880d681SAndroid Build Coastguard Worker  store <4 x float> %b, <4 x float>* %a, align 8
770*9880d681SAndroid Build Coastguard Worker  ret void
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test33u
773*9880d681SAndroid Build Coastguard Worker; CHECK-REG: stxvw4x 34, 0, 3
774*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
775*9880d681SAndroid Build Coastguard Worker
776*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test33u
777*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 3, 2, 2
778*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxvw4x 35, 0, 3
779*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
780*9880d681SAndroid Build Coastguard Worker
781*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test33u
782*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
783*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
784*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
785*9880d681SAndroid Build Coastguard Worker}
786*9880d681SAndroid Build Coastguard Worker
787*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test34(<4 x i32>* %a) {
788*9880d681SAndroid Build Coastguard Worker  %v = load <4 x i32>, <4 x i32>* %a, align 16
789*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %v
790*9880d681SAndroid Build Coastguard Worker
791*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test34
792*9880d681SAndroid Build Coastguard Worker; CHECK-REG: lxvw4x 34, 0, 3
793*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
794*9880d681SAndroid Build Coastguard Worker
795*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test34
796*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lxvw4x 0, 0, 3
797*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 34, 0, 0
798*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
799*9880d681SAndroid Build Coastguard Worker
800*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test34
801*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[V1:[0-9]+]], 0, 3
802*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[V1]]
803*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
804*9880d681SAndroid Build Coastguard Worker}
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Workerdefine void @test35(<4 x i32>* %a, <4 x i32> %b) {
807*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %b, <4 x i32>* %a, align 16
808*9880d681SAndroid Build Coastguard Worker  ret void
809*9880d681SAndroid Build Coastguard Worker
810*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test35
811*9880d681SAndroid Build Coastguard Worker; CHECK-REG: stxvw4x 34, 0, 3
812*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
813*9880d681SAndroid Build Coastguard Worker
814*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test35
815*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 3, 2, 2
816*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxvw4x 35, 0, 3
817*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test35
820*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd [[V1:[0-9]+]], 34
821*9880d681SAndroid Build Coastguard Worker; CHECK-LE: stxvd2x [[V1]], 0, 3
822*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
823*9880d681SAndroid Build Coastguard Worker}
824*9880d681SAndroid Build Coastguard Worker
825*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test40(<2 x i64> %a) {
826*9880d681SAndroid Build Coastguard Worker  %v = uitofp <2 x i64> %a to <2 x double>
827*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
828*9880d681SAndroid Build Coastguard Worker
829*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test40
830*9880d681SAndroid Build Coastguard Worker; CHECK: xvcvuxddp 34, 34
831*9880d681SAndroid Build Coastguard Worker; CHECK: blr
832*9880d681SAndroid Build Coastguard Worker
833*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test40
834*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcvuxddp 34, 34
835*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
836*9880d681SAndroid Build Coastguard Worker}
837*9880d681SAndroid Build Coastguard Worker
838*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test41(<2 x i64> %a) {
839*9880d681SAndroid Build Coastguard Worker  %v = sitofp <2 x i64> %a to <2 x double>
840*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
841*9880d681SAndroid Build Coastguard Worker
842*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test41
843*9880d681SAndroid Build Coastguard Worker; CHECK: xvcvsxddp 34, 34
844*9880d681SAndroid Build Coastguard Worker; CHECK: blr
845*9880d681SAndroid Build Coastguard Worker
846*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test41
847*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcvsxddp 34, 34
848*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
849*9880d681SAndroid Build Coastguard Worker}
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test42(<2 x double> %a) {
852*9880d681SAndroid Build Coastguard Worker  %v = fptoui <2 x double> %a to <2 x i64>
853*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
854*9880d681SAndroid Build Coastguard Worker
855*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test42
856*9880d681SAndroid Build Coastguard Worker; CHECK: xvcvdpuxds 34, 34
857*9880d681SAndroid Build Coastguard Worker; CHECK: blr
858*9880d681SAndroid Build Coastguard Worker
859*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test42
860*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcvdpuxds 34, 34
861*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
862*9880d681SAndroid Build Coastguard Worker}
863*9880d681SAndroid Build Coastguard Worker
864*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test43(<2 x double> %a) {
865*9880d681SAndroid Build Coastguard Worker  %v = fptosi <2 x double> %a to <2 x i64>
866*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
867*9880d681SAndroid Build Coastguard Worker
868*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test43
869*9880d681SAndroid Build Coastguard Worker; CHECK: xvcvdpsxds 34, 34
870*9880d681SAndroid Build Coastguard Worker; CHECK: blr
871*9880d681SAndroid Build Coastguard Worker
872*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test43
873*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcvdpsxds 34, 34
874*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
875*9880d681SAndroid Build Coastguard Worker}
876*9880d681SAndroid Build Coastguard Worker
877*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test44(<2 x i64> %a) {
878*9880d681SAndroid Build Coastguard Worker  %v = uitofp <2 x i64> %a to <2 x float>
879*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %v
880*9880d681SAndroid Build Coastguard Worker
881*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test44
882*9880d681SAndroid Build Coastguard Worker; FIXME: The code quality here looks pretty bad.
883*9880d681SAndroid Build Coastguard Worker; CHECK: blr
884*9880d681SAndroid Build Coastguard Worker}
885*9880d681SAndroid Build Coastguard Worker
886*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test45(<2 x i64> %a) {
887*9880d681SAndroid Build Coastguard Worker  %v = sitofp <2 x i64> %a to <2 x float>
888*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %v
889*9880d681SAndroid Build Coastguard Worker
890*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test45
891*9880d681SAndroid Build Coastguard Worker; FIXME: The code quality here looks pretty bad.
892*9880d681SAndroid Build Coastguard Worker; CHECK: blr
893*9880d681SAndroid Build Coastguard Worker}
894*9880d681SAndroid Build Coastguard Worker
895*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test46(<2 x float> %a) {
896*9880d681SAndroid Build Coastguard Worker  %v = fptoui <2 x float> %a to <2 x i64>
897*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
898*9880d681SAndroid Build Coastguard Worker
899*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test46
900*9880d681SAndroid Build Coastguard Worker; FIXME: The code quality here looks pretty bad.
901*9880d681SAndroid Build Coastguard Worker; CHECK: blr
902*9880d681SAndroid Build Coastguard Worker}
903*9880d681SAndroid Build Coastguard Worker
904*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test47(<2 x float> %a) {
905*9880d681SAndroid Build Coastguard Worker  %v = fptosi <2 x float> %a to <2 x i64>
906*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
907*9880d681SAndroid Build Coastguard Worker
908*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test47
909*9880d681SAndroid Build Coastguard Worker; FIXME: The code quality here looks pretty bad.
910*9880d681SAndroid Build Coastguard Worker; CHECK: blr
911*9880d681SAndroid Build Coastguard Worker}
912*9880d681SAndroid Build Coastguard Worker
913*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test50(double* %a) {
914*9880d681SAndroid Build Coastguard Worker  %v = load double, double* %a, align 8
915*9880d681SAndroid Build Coastguard Worker  %w = insertelement <2 x double> undef, double %v, i32 0
916*9880d681SAndroid Build Coastguard Worker  %x = insertelement <2 x double> %w, double %v, i32 1
917*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %x
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test50
920*9880d681SAndroid Build Coastguard Worker; CHECK: lxvdsx 34, 0, 3
921*9880d681SAndroid Build Coastguard Worker; CHECK: blr
922*9880d681SAndroid Build Coastguard Worker
923*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test50
924*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvdsx 34, 0, 3
925*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
926*9880d681SAndroid Build Coastguard Worker}
927*9880d681SAndroid Build Coastguard Worker
928*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test51(<2 x double> %a, <2 x double> %b) {
929*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 0>
930*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
931*9880d681SAndroid Build Coastguard Worker
932*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test51
933*9880d681SAndroid Build Coastguard Worker; CHECK: xxspltd 34, 34, 0
934*9880d681SAndroid Build Coastguard Worker; CHECK: blr
935*9880d681SAndroid Build Coastguard Worker
936*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test51
937*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxspltd 34, 34, 1
938*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
939*9880d681SAndroid Build Coastguard Worker}
940*9880d681SAndroid Build Coastguard Worker
941*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test52(<2 x double> %a, <2 x double> %b) {
942*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
943*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
944*9880d681SAndroid Build Coastguard Worker
945*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test52
946*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrghd 34, 34, 35
947*9880d681SAndroid Build Coastguard Worker; CHECK: blr
948*9880d681SAndroid Build Coastguard Worker
949*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test52
950*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrgld 34, 35, 34
951*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
952*9880d681SAndroid Build Coastguard Worker}
953*9880d681SAndroid Build Coastguard Worker
954*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test53(<2 x double> %a, <2 x double> %b) {
955*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 2, i32 0>
956*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
957*9880d681SAndroid Build Coastguard Worker
958*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test53
959*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrghd 34, 35, 34
960*9880d681SAndroid Build Coastguard Worker; CHECK: blr
961*9880d681SAndroid Build Coastguard Worker
962*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test53
963*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrgld 34, 34, 35
964*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
965*9880d681SAndroid Build Coastguard Worker}
966*9880d681SAndroid Build Coastguard Worker
967*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test54(<2 x double> %a, <2 x double> %b) {
968*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 2>
969*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
970*9880d681SAndroid Build Coastguard Worker
971*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test54
972*9880d681SAndroid Build Coastguard Worker; CHECK: xxpermdi 34, 34, 35, 2
973*9880d681SAndroid Build Coastguard Worker; CHECK: blr
974*9880d681SAndroid Build Coastguard Worker
975*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test54
976*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxpermdi 34, 35, 34, 2
977*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
978*9880d681SAndroid Build Coastguard Worker}
979*9880d681SAndroid Build Coastguard Worker
980*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test55(<2 x double> %a, <2 x double> %b) {
981*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
982*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %v
983*9880d681SAndroid Build Coastguard Worker
984*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test55
985*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrgld 34, 34, 35
986*9880d681SAndroid Build Coastguard Worker; CHECK: blr
987*9880d681SAndroid Build Coastguard Worker
988*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test55
989*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrghd 34, 35, 34
990*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
991*9880d681SAndroid Build Coastguard Worker}
992*9880d681SAndroid Build Coastguard Worker
993*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test56(<2 x i64> %a, <2 x i64> %b) {
994*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
995*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
996*9880d681SAndroid Build Coastguard Worker
997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test56
998*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrgld 34, 34, 35
999*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1000*9880d681SAndroid Build Coastguard Worker
1001*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test56
1002*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrghd 34, 35, 34
1003*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1004*9880d681SAndroid Build Coastguard Worker}
1005*9880d681SAndroid Build Coastguard Worker
1006*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test60(<2 x i64> %a, <2 x i64> %b) {
1007*9880d681SAndroid Build Coastguard Worker  %v = shl <2 x i64> %a, %b
1008*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
1009*9880d681SAndroid Build Coastguard Worker
1010*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test60
1011*9880d681SAndroid Build Coastguard Worker; This should scalarize, and the current code quality is not good.
1012*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1013*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1014*9880d681SAndroid Build Coastguard Worker; CHECK: sld
1015*9880d681SAndroid Build Coastguard Worker; CHECK: sld
1016*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x
1017*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1018*9880d681SAndroid Build Coastguard Worker}
1019*9880d681SAndroid Build Coastguard Worker
1020*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test61(<2 x i64> %a, <2 x i64> %b) {
1021*9880d681SAndroid Build Coastguard Worker  %v = lshr <2 x i64> %a, %b
1022*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
1023*9880d681SAndroid Build Coastguard Worker
1024*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test61
1025*9880d681SAndroid Build Coastguard Worker; This should scalarize, and the current code quality is not good.
1026*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1027*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1028*9880d681SAndroid Build Coastguard Worker; CHECK: srd
1029*9880d681SAndroid Build Coastguard Worker; CHECK: srd
1030*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x
1031*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1032*9880d681SAndroid Build Coastguard Worker}
1033*9880d681SAndroid Build Coastguard Worker
1034*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test62(<2 x i64> %a, <2 x i64> %b) {
1035*9880d681SAndroid Build Coastguard Worker  %v = ashr <2 x i64> %a, %b
1036*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %v
1037*9880d681SAndroid Build Coastguard Worker
1038*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test62
1039*9880d681SAndroid Build Coastguard Worker; This should scalarize, and the current code quality is not good.
1040*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1041*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1042*9880d681SAndroid Build Coastguard Worker; CHECK: srad
1043*9880d681SAndroid Build Coastguard Worker; CHECK: srad
1044*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x
1045*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1046*9880d681SAndroid Build Coastguard Worker}
1047*9880d681SAndroid Build Coastguard Worker
1048*9880d681SAndroid Build Coastguard Workerdefine double @test63(<2 x double> %a) {
1049*9880d681SAndroid Build Coastguard Worker  %v = extractelement <2 x double> %a, i32 0
1050*9880d681SAndroid Build Coastguard Worker  ret double %v
1051*9880d681SAndroid Build Coastguard Worker
1052*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test63
1053*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor 1, 34, 34
1054*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
1055*9880d681SAndroid Build Coastguard Worker
1056*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test63
1057*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 0, 34, 34
1058*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: fmr 1, 0
1059*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
1060*9880d681SAndroid Build Coastguard Worker
1061*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test63
1062*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 1, 34
1063*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1064*9880d681SAndroid Build Coastguard Worker}
1065*9880d681SAndroid Build Coastguard Worker
1066*9880d681SAndroid Build Coastguard Workerdefine double @test64(<2 x double> %a) {
1067*9880d681SAndroid Build Coastguard Worker  %v = extractelement <2 x double> %a, i32 1
1068*9880d681SAndroid Build Coastguard Worker  ret double %v
1069*9880d681SAndroid Build Coastguard Worker
1070*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test64
1071*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxswapd 1, 34
1072*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
1073*9880d681SAndroid Build Coastguard Worker
1074*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test64
1075*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxswapd  34, 34
1076*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlor 0, 34, 34
1077*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: fmr 1, 0
1078*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
1079*9880d681SAndroid Build Coastguard Worker
1080*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test64
1081*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlor 1, 34, 34
1082*9880d681SAndroid Build Coastguard Worker}
1083*9880d681SAndroid Build Coastguard Worker
1084*9880d681SAndroid Build Coastguard Workerdefine <2 x i1> @test65(<2 x i64> %a, <2 x i64> %b) {
1085*9880d681SAndroid Build Coastguard Worker  %w = icmp eq <2 x i64> %a, %b
1086*9880d681SAndroid Build Coastguard Worker  ret <2 x i1> %w
1087*9880d681SAndroid Build Coastguard Worker
1088*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test65
1089*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vcmpequw 2, 2, 3
1090*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
1091*9880d681SAndroid Build Coastguard Worker
1092*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test65
1093*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 4, 3, 3
1094*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 5, 2, 2
1095*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vcmpequw 4, 5, 4
1096*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vor 2, 4, 4
1097*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
1098*9880d681SAndroid Build Coastguard Worker
1099*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test65
1100*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpequd 2, 2, 3
1101*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1102*9880d681SAndroid Build Coastguard Worker}
1103*9880d681SAndroid Build Coastguard Worker
1104*9880d681SAndroid Build Coastguard Workerdefine <2 x i1> @test66(<2 x i64> %a, <2 x i64> %b) {
1105*9880d681SAndroid Build Coastguard Worker  %w = icmp ne <2 x i64> %a, %b
1106*9880d681SAndroid Build Coastguard Worker  ret <2 x i1> %w
1107*9880d681SAndroid Build Coastguard Worker
1108*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test66
1109*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vcmpequw {{[0-9]+}}, 2, 3
1110*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlnor 34, {{[0-9]+}}, {{[0-9]+}}
1111*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
1112*9880d681SAndroid Build Coastguard Worker
1113*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test66
1114*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vcmpequw {{[0-9]+}}, 5, 4
1115*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xxlnor 34, {{[0-9]+}}, {{[0-9]+}}
1116*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
1117*9880d681SAndroid Build Coastguard Worker
1118*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test66
1119*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpequd {{[0-9]+}}, 2, 3
1120*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxlnor 34, {{[0-9]+}}, {{[0-9]+}}
1121*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1122*9880d681SAndroid Build Coastguard Worker}
1123*9880d681SAndroid Build Coastguard Worker
1124*9880d681SAndroid Build Coastguard Workerdefine <2 x i1> @test67(<2 x i64> %a, <2 x i64> %b) {
1125*9880d681SAndroid Build Coastguard Worker  %w = icmp ult <2 x i64> %a, %b
1126*9880d681SAndroid Build Coastguard Worker  ret <2 x i1> %w
1127*9880d681SAndroid Build Coastguard Worker
1128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test67
1129*9880d681SAndroid Build Coastguard Worker; This should scalarize, and the current code quality is not good.
1130*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1131*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x
1132*9880d681SAndroid Build Coastguard Worker; CHECK: cmpld
1133*9880d681SAndroid Build Coastguard Worker; CHECK: cmpld
1134*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x
1135*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1136*9880d681SAndroid Build Coastguard Worker
1137*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test67
1138*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vcmpgtud 2, 3, 2
1139*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1140*9880d681SAndroid Build Coastguard Worker}
1141*9880d681SAndroid Build Coastguard Worker
1142*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test68(<2 x i32> %a) {
1143*9880d681SAndroid Build Coastguard Worker  %w = sitofp <2 x i32> %a to <2 x double>
1144*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %w
1145*9880d681SAndroid Build Coastguard Worker
1146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test68
1147*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrghw [[V1:[0-9]+]]
1148*9880d681SAndroid Build Coastguard Worker; CHECK: xvcvsxwdp 34, [[V1]]
1149*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1150*9880d681SAndroid Build Coastguard Worker
1151*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test68
1152*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrglw [[V1:[0-9]+]], 34, 34
1153*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xvcvsxwdp 34, [[V1]]
1154*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1155*9880d681SAndroid Build Coastguard Worker}
1156*9880d681SAndroid Build Coastguard Worker
1157*9880d681SAndroid Build Coastguard Worker; This gets scalarized so the code isn't great
1158*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test69(<2 x i16> %a) {
1159*9880d681SAndroid Build Coastguard Worker  %w = sitofp <2 x i16> %a to <2 x double>
1160*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %w
1161*9880d681SAndroid Build Coastguard Worker
1162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test69
1163*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lfiwax
1164*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lfiwax
1165*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xscvsxddp
1166*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xscvsxddp
1167*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrghd
1168*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1169*9880d681SAndroid Build Coastguard Worker
1170*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test69
1171*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mfvsrd
1172*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mtvsrwa
1173*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mtvsrwa
1174*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xscvsxddp
1175*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xscvsxddp
1176*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxspltd
1177*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxspltd
1178*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrgld
1179*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1180*9880d681SAndroid Build Coastguard Worker}
1181*9880d681SAndroid Build Coastguard Worker
1182*9880d681SAndroid Build Coastguard Worker; This gets scalarized so the code isn't great
1183*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test70(<2 x i8> %a) {
1184*9880d681SAndroid Build Coastguard Worker  %w = sitofp <2 x i8> %a to <2 x double>
1185*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %w
1186*9880d681SAndroid Build Coastguard Worker
1187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test70
1188*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lfiwax
1189*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lfiwax
1190*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xscvsxddp
1191*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: xscvsxddp
1192*9880d681SAndroid Build Coastguard Worker; CHECK: xxmrghd
1193*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1194*9880d681SAndroid Build Coastguard Worker
1195*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test70
1196*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mfvsrd
1197*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mtvsrwa
1198*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mtvsrwa
1199*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xscvsxddp
1200*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xscvsxddp
1201*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxspltd
1202*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxspltd
1203*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxmrgld
1204*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1205*9880d681SAndroid Build Coastguard Worker}
1206*9880d681SAndroid Build Coastguard Worker
1207*9880d681SAndroid Build Coastguard Worker; This gets scalarized so the code isn't great
1208*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test80(i32 %v) {
1209*9880d681SAndroid Build Coastguard Worker  %b1 = insertelement <2 x i32> undef, i32 %v, i32 0
1210*9880d681SAndroid Build Coastguard Worker  %b2 = shufflevector <2 x i32> %b1, <2 x i32> undef, <2 x i32> zeroinitializer
1211*9880d681SAndroid Build Coastguard Worker  %i = add <2 x i32> %b2, <i32 2, i32 3>
1212*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %i
1213*9880d681SAndroid Build Coastguard Worker
1214*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test80
1215*9880d681SAndroid Build Coastguard Worker; CHECK-REG: stw 3, -16(1)
1216*9880d681SAndroid Build Coastguard Worker; CHECK-REG: addi [[R1:[0-9]+]], 1, -16
1217*9880d681SAndroid Build Coastguard Worker; CHECK-REG: addis [[R2:[0-9]+]]
1218*9880d681SAndroid Build Coastguard Worker; CHECK-REG: addi [[R2]], [[R2]]
1219*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: lxvw4x [[VS1:[0-9]+]], 0, [[R1]]
1220*9880d681SAndroid Build Coastguard Worker; CHECK-REG-DAG: lxvw4x 35, 0, [[R2]]
1221*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxspltw 34, [[VS1]], 0
1222*9880d681SAndroid Build Coastguard Worker; CHECK-REG: vadduwm 2, 2, 3
1223*9880d681SAndroid Build Coastguard Worker; CHECK-REG-NOT: stxvw4x
1224*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr
1225*9880d681SAndroid Build Coastguard Worker
1226*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test80
1227*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: mr 4, 3
1228*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stw 4, -16(1)
1229*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: addi [[R1:[0-9]+]], 1, -16
1230*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: lxvw4x [[VS1:[0-9]+]], 0, [[R1]]
1231*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: xxspltw {{[0-9]+}}, [[VS1]], 0
1232*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: addis [[R2:[0-9]+]]
1233*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: addi [[R2]], [[R2]]
1234*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-DAG: lxvw4x {{[0-9]+}}, 0, [[R2]]
1235*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: vadduwm
1236*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-NOT: stxvw4x
1237*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr
1238*9880d681SAndroid Build Coastguard Worker
1239*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test80
1240*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: mtvsrd [[R1:[0-9]+]], 3
1241*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxswapd  [[V1:[0-9]+]], [[R1]]
1242*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: addi [[R2:[0-9]+]], {{[0-9]+}}, .LCPI
1243*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: lxvd2x [[V2:[0-9]+]], 0, [[R2]]
1244*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxspltw 34, [[V1]]
1245*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxswapd 35, [[V2]]
1246*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vadduwm 2, 2, 3
1247*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1248*9880d681SAndroid Build Coastguard Worker}
1249*9880d681SAndroid Build Coastguard Worker
1250*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test81(<4 x float> %b) {
1251*9880d681SAndroid Build Coastguard Worker  %w = bitcast <4 x float> %b to <2 x double>
1252*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %w
1253*9880d681SAndroid Build Coastguard Worker
1254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test81
1255*9880d681SAndroid Build Coastguard Worker; CHECK: blr
1256*9880d681SAndroid Build Coastguard Worker
1257*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test81
1258*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
1259*9880d681SAndroid Build Coastguard Worker}
1260*9880d681SAndroid Build Coastguard Worker
1261*9880d681SAndroid Build Coastguard Workerdefine double @test82(double %a, double %b, double %c, double %d) {
1262*9880d681SAndroid Build Coastguard Workerentry:
1263*9880d681SAndroid Build Coastguard Worker  %m = fcmp oeq double %c, %d
1264*9880d681SAndroid Build Coastguard Worker  %v = select i1 %m, double %a, double %b
1265*9880d681SAndroid Build Coastguard Worker  ret double %v
1266*9880d681SAndroid Build Coastguard Worker
1267*9880d681SAndroid Build Coastguard Worker; CHECK-REG-LABEL: @test82
1268*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xscmpudp [[REG:[0-9]+]], 3, 4
1269*9880d681SAndroid Build Coastguard Worker; CHECK-REG: beqlr [[REG]]
1270*9880d681SAndroid Build Coastguard Worker
1271*9880d681SAndroid Build Coastguard Worker; CHECK-FISL-LABEL: @test82
1272*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xscmpudp [[REG:[0-9]+]], 3, 4
1273*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: beq [[REG]], {{.*}}
1274*9880d681SAndroid Build Coastguard Worker
1275*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @test82
1276*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xscmpudp [[REG:[0-9]+]], 3, 4
1277*9880d681SAndroid Build Coastguard Worker; CHECK-LE: beqlr [[REG]]
1278*9880d681SAndroid Build Coastguard Worker}
1279