[LLVM][Alignment] Make functions using log of alignment explicit
[llvm-complete.git] / test / CodeGen / PowerPC / select-i1-vs-i1.ll
blobb6251c2bc4621835a658f518485578103cbfd6da
1 ; RUN: llc -ppc-reduce-cr-logicals -verify-machineinstrs -tail-dup-placement=false < %s | FileCheck %s
2 ; RUN: llc -ppc-reduce-cr-logicals -verify-machineinstrs \
3 ; RUN:   -ppc-gen-isel=false < %s | FileCheck --check-prefix=CHECK-NO-ISEL %s
4 target datalayout = "E-m:e-i64:64-n32:64"
5 target triple = "powerpc64-unknown-linux-gnu"
7 ; FIXME: We should check the operands to the cr* logical operation itself, but
8 ; unfortunately, FileCheck does not yet understand how to do arithmetic, so we
9 ; can't do so without introducing a register-allocation dependency.
11 define signext i32 @testi32slt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
12 entry:
13   %cmp1 = icmp eq i32 %c3, %c4
14   %cmp3tmp = icmp eq i32 %c1, %c2
15   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
16   %cond = select i1 %cmp3, i32 %a1, i32 %a2
17   ret i32 %cond
19 ; CHECK-LABEL: @testi32slt
20 ; CHECK-NO-ISEL-LABEL: @testi32slt
21 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
22 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
23 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
24 ; CHECK: isel 3, 7, 8, [[REG1]]
25 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
26 ; CHECK-NO-ISEL: ori 3, 8, 0
27 ; CHECK-NO-ISEL-NEXT: blr
28 ; CHECK-NO-ISEL: [[TRUE]]
29 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
30 ; CHECK-NO-ISEL-NEXT: blr
31 ; CHECK: blr
34 define signext i32 @testi32ult(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
35 entry:
36   %cmp1 = icmp eq i32 %c3, %c4
37   %cmp3tmp = icmp eq i32 %c1, %c2
38   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
39   %cond = select i1 %cmp3, i32 %a1, i32 %a2
40   ret i32 %cond
42 ; CHECK-NO-ISEL-LABEL: @testi32ult
43 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
44 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
45 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
46 ; CHECK: isel 3, 7, 8, [[REG1]]
47 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
48 ; CHECK-NO-ISEL: ori 3, 8, 0
49 ; CHECK-NO-ISEL-NEXT: blr
50 ; CHECK-NO-ISEL: [[TRUE]]
51 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
52 ; CHECK-NO-ISEL-NEXT: blr
53 ; CHECK: blr
56 define signext i32 @testi32sle(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
57 entry:
58   %cmp1 = icmp eq i32 %c3, %c4
59   %cmp3tmp = icmp eq i32 %c1, %c2
60   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
61   %cond = select i1 %cmp3, i32 %a1, i32 %a2
62   ret i32 %cond
64 ; CHECK-LABEL: @testi32sle
65 ; CHECK-NO-ISEL-LABEL: @testi32sle
66 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
67 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
68 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
69 ; CHECK: isel 3, 7, 8, [[REG1]]
70 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
71 ; CHECK-NO-ISEL: ori 3, 8, 0
72 ; CHECK-NO-ISEL-NEXT: blr
73 ; CHECK-NO-ISEL: [[TRUE]]
74 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
75 ; CHECK-NO-ISEL-NEXT: blr
76 ; CHECK: blr
79 define signext i32 @testi32ule(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
80 entry:
81   %cmp1 = icmp eq i32 %c3, %c4
82   %cmp3tmp = icmp eq i32 %c1, %c2
83   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
84   %cond = select i1 %cmp3, i32 %a1, i32 %a2
85   ret i32 %cond
87 ; CHECK-LABEL: @testi32ule
88 ; CHECK-NO-ISEL-LABEL: @testi32ule
89 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
90 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
91 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
92 ; CHECK: isel 3, 7, 8, [[REG1]]
93 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
94 ; CHECK-NO-ISEL: ori 3, 8, 0
95 ; CHECK-NO-ISEL-NEXT: blr
96 ; CHECK-NO-ISEL: [[TRUE]]
97 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
98 ; CHECK-NO-ISEL-NEXT: blr
99 ; CHECK: blr
102 define signext i32 @testi32eq(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
103 entry:
104   %cmp1 = icmp eq i32 %c3, %c4
105   %cmp3tmp = icmp eq i32 %c1, %c2
106   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
107   %cond = select i1 %cmp3, i32 %a1, i32 %a2
108   ret i32 %cond
110 ; CHECK-LABEL: @testi32eq
111 ; CHECK-NO-ISEL-LABEL: @testi32eq
112 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
113 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
114 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
115 ; CHECK: isel 3, 7, 8, [[REG1]]
116 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
117 ; CHECK-NO-ISEL: ori 3, 8, 0
118 ; CHECK-NO-ISEL-NEXT: blr
119 ; CHECK-NO-ISEL: [[TRUE]]
120 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
121 ; CHECK-NO-ISEL-NEXT: blr
122 ; CHECK: blr
125 define signext i32 @testi32sge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
126 entry:
127   %cmp1 = icmp eq i32 %c3, %c4
128   %cmp3tmp = icmp eq i32 %c1, %c2
129   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
130   %cond = select i1 %cmp3, i32 %a1, i32 %a2
131   ret i32 %cond
133 ; CHECK-LABEL: @testi32sge
134 ; CHECK-NO-ISEL-LABEL: @testi32sge
135 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
136 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
137 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
138 ; CHECK: isel 3, 7, 8, [[REG1]]
139 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
140 ; CHECK-NO-ISEL: ori 3, 8, 0
141 ; CHECK-NO-ISEL-NEXT: blr
142 ; CHECK-NO-ISEL: [[TRUE]]
143 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
144 ; CHECK-NO-ISEL-NEXT: blr
145 ; CHECK: blr
148 define signext i32 @testi32uge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
149 entry:
150   %cmp1 = icmp eq i32 %c3, %c4
151   %cmp3tmp = icmp eq i32 %c1, %c2
152   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
153   %cond = select i1 %cmp3, i32 %a1, i32 %a2
154   ret i32 %cond
156 ; CHECK-LABEL: @testi32uge
157 ; CHECK-NO-ISEL-LABEL: @testi32uge
158 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
159 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
160 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
161 ; CHECK: isel 3, 7, 8, [[REG1]]
162 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
163 ; CHECK-NO-ISEL: ori 3, 8, 0
164 ; CHECK-NO-ISEL-NEXT: blr
165 ; CHECK-NO-ISEL: [[TRUE]]
166 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
167 ; CHECK-NO-ISEL-NEXT: blr
168 ; CHECK: blr
171 define signext i32 @testi32sgt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
172 entry:
173   %cmp1 = icmp eq i32 %c3, %c4
174   %cmp3tmp = icmp eq i32 %c1, %c2
175   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
176   %cond = select i1 %cmp3, i32 %a1, i32 %a2
177   ret i32 %cond
179 ; CHECK-LABEL: @testi32sgt
180 ; CHECK-NO-ISEL-LABEL: @testi32sgt
181 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
182 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
183 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
184 ; CHECK: isel 3, 7, 8, [[REG1]]
185 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
186 ; CHECK-NO-ISEL: ori 3, 8, 0
187 ; CHECK-NO-ISEL-NEXT: blr
188 ; CHECK-NO-ISEL: [[TRUE]]
189 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
190 ; CHECK-NO-ISEL-NEXT: blr
191 ; CHECK: blr
194 define signext i32 @testi32ugt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
195 entry:
196   %cmp1 = icmp eq i32 %c3, %c4
197   %cmp3tmp = icmp eq i32 %c1, %c2
198   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
199   %cond = select i1 %cmp3, i32 %a1, i32 %a2
200   ret i32 %cond
202 ; CHECK-LABEL: @testi32ugt
203 ; CHECK-NO-ISEL-LABEL: @testi32ugt
204 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
205 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
206 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
207 ; CHECK: isel 3, 7, 8, [[REG1]]
208 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
209 ; CHECK-NO-ISEL: ori 3, 8, 0
210 ; CHECK-NO-ISEL-NEXT: blr
211 ; CHECK-NO-ISEL: [[TRUE]]
212 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
213 ; CHECK-NO-ISEL-NEXT: blr
214 ; CHECK: blr
217 define signext i32 @testi32ne(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
218 entry:
219   %cmp1 = icmp eq i32 %c3, %c4
220   %cmp3tmp = icmp eq i32 %c1, %c2
221   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
222   %cond = select i1 %cmp3, i32 %a1, i32 %a2
223   ret i32 %cond
225 ; CHECK-LABEL: @testi32ne
226 ; CHECK-NO-ISEL-LABEL: @testi32ne
227 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
228 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
229 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
230 ; CHECK: isel 3, 7, 8, [[REG1]]
231 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
232 ; CHECK-NO-ISEL: ori 3, 8, 0
233 ; CHECK-NO-ISEL-NEXT: blr
234 ; CHECK-NO-ISEL: [[TRUE]]
235 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
236 ; CHECK-NO-ISEL-NEXT: blr
237 ; CHECK: blr
240 define i64 @testi64slt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
241 entry:
242   %cmp1 = icmp eq i64 %c3, %c4
243   %cmp3tmp = icmp eq i64 %c1, %c2
244   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
245   %cond = select i1 %cmp3, i64 %a1, i64 %a2
246   ret i64 %cond
248 ; CHECK-LABEL: @testi64slt
249 ; CHECK-NO-ISEL-LABEL: @testi64slt
250 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
251 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
252 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
253 ; CHECK: isel 3, 7, 8, [[REG1]]
254 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
255 ; CHECK-NO-ISEL: ori 3, 8, 0
256 ; CHECK-NO-ISEL-NEXT: blr
257 ; CHECK-NO-ISEL: [[TRUE]]
258 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
259 ; CHECK-NO-ISEL-NEXT: blr
260 ; CHECK: blr
263 define i64 @testi64ult(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
264 entry:
265   %cmp1 = icmp eq i64 %c3, %c4
266   %cmp3tmp = icmp eq i64 %c1, %c2
267   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
268   %cond = select i1 %cmp3, i64 %a1, i64 %a2
269   ret i64 %cond
271 ; CHECK-LABEL: @testi64ult
272 ; CHECK-NO-ISEL-LABEL: @testi64ult
273 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
274 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
275 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
276 ; CHECK: isel 3, 7, 8, [[REG1]]
277 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
278 ; CHECK-NO-ISEL: ori 3, 8, 0
279 ; CHECK-NO-ISEL-NEXT: blr
280 ; CHECK-NO-ISEL: [[TRUE]]
281 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
282 ; CHECK-NO-ISEL-NEXT: blr
283 ; CHECK: blr
286 define i64 @testi64sle(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
287 entry:
288   %cmp1 = icmp eq i64 %c3, %c4
289   %cmp3tmp = icmp eq i64 %c1, %c2
290   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
291   %cond = select i1 %cmp3, i64 %a1, i64 %a2
292   ret i64 %cond
294 ; CHECK-LABEL: @testi64sle
295 ; CHECK-NO-ISEL-LABEL: @testi64sle
296 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
297 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
298 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
299 ; CHECK: isel 3, 7, 8, [[REG1]]
300 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
301 ; CHECK-NO-ISEL: ori 3, 8, 0
302 ; CHECK-NO-ISEL-NEXT: blr
303 ; CHECK-NO-ISEL: [[TRUE]]
304 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
305 ; CHECK-NO-ISEL-NEXT: blr
306 ; CHECK: blr
309 define i64 @testi64ule(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
310 entry:
311   %cmp1 = icmp eq i64 %c3, %c4
312   %cmp3tmp = icmp eq i64 %c1, %c2
313   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
314   %cond = select i1 %cmp3, i64 %a1, i64 %a2
315   ret i64 %cond
317 ; CHECK-LABEL: @testi64ule
318 ; CHECK-NO-ISEL-LABEL: @testi64ule
319 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
320 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
321 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
322 ; CHECK: isel 3, 7, 8, [[REG1]]
323 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
324 ; CHECK-NO-ISEL: ori 3, 8, 0
325 ; CHECK-NO-ISEL-NEXT: blr
326 ; CHECK-NO-ISEL: [[TRUE]]
327 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
328 ; CHECK-NO-ISEL-NEXT: blr
329 ; CHECK: blr
332 define i64 @testi64eq(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
333 entry:
334   %cmp1 = icmp eq i64 %c3, %c4
335   %cmp3tmp = icmp eq i64 %c1, %c2
336   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
337   %cond = select i1 %cmp3, i64 %a1, i64 %a2
338   ret i64 %cond
340 ; CHECK-LABEL: @testi64eq
341 ; CHECK-NO-ISEL-LABEL: @testi64eq
342 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
343 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
344 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
345 ; CHECK: isel 3, 7, 8, [[REG1]]
346 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
347 ; CHECK-NO-ISEL: ori 3, 8, 0
348 ; CHECK-NO-ISEL-NEXT: blr
349 ; CHECK-NO-ISEL: [[TRUE]]
350 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
351 ; CHECK-NO-ISEL-NEXT: blr
352 ; CHECK: blr
355 define i64 @testi64sge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
356 entry:
357   %cmp1 = icmp eq i64 %c3, %c4
358   %cmp3tmp = icmp eq i64 %c1, %c2
359   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
360   %cond = select i1 %cmp3, i64 %a1, i64 %a2
361   ret i64 %cond
363 ; CHECK-LABEL: @testi64sge
364 ; CHECK-NO-ISEL-LABEL: @testi64sge
365 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
366 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
367 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
368 ; CHECK: isel 3, 7, 8, [[REG1]]
369 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
370 ; CHECK-NO-ISEL: ori 3, 8, 0
371 ; CHECK-NO-ISEL-NEXT: blr
372 ; CHECK-NO-ISEL: [[TRUE]]
373 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
374 ; CHECK-NO-ISEL-NEXT: blr
375 ; CHECK: blr
378 define i64 @testi64uge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
379 entry:
380   %cmp1 = icmp eq i64 %c3, %c4
381   %cmp3tmp = icmp eq i64 %c1, %c2
382   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
383   %cond = select i1 %cmp3, i64 %a1, i64 %a2
384   ret i64 %cond
386 ; CHECK-LABEL: @testi64uge
387 ; CHECK-NO-ISEL-LABEL: @testi64uge
388 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
389 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
390 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
391 ; CHECK: isel 3, 7, 8, [[REG1]]
392 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
393 ; CHECK-NO-ISEL: ori 3, 8, 0
394 ; CHECK-NO-ISEL-NEXT: blr
395 ; CHECK-NO-ISEL: [[TRUE]]
396 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
397 ; CHECK-NO-ISEL-NEXT: blr
398 ; CHECK: blr
401 define i64 @testi64sgt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
402 entry:
403   %cmp1 = icmp eq i64 %c3, %c4
404   %cmp3tmp = icmp eq i64 %c1, %c2
405   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
406   %cond = select i1 %cmp3, i64 %a1, i64 %a2
407   ret i64 %cond
409 ; CHECK-LABEL: @testi64sgt
410 ; CHECK-NO-ISEL-LABEL: @testi64sgt
411 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
412 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
413 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
414 ; CHECK: isel 3, 7, 8, [[REG1]]
415 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
416 ; CHECK-NO-ISEL: ori 3, 8, 0
417 ; CHECK-NO-ISEL-NEXT: blr
418 ; CHECK-NO-ISEL: [[TRUE]]
419 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
420 ; CHECK-NO-ISEL-NEXT: blr
421 ; CHECK: blr
424 define i64 @testi64ugt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
425 entry:
426   %cmp1 = icmp eq i64 %c3, %c4
427   %cmp3tmp = icmp eq i64 %c1, %c2
428   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
429   %cond = select i1 %cmp3, i64 %a1, i64 %a2
430   ret i64 %cond
432 ; CHECK-LABEL: @testi64ugt
433 ; CHECK-NO-ISEL-LABEL: @testi64ugt
434 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
435 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
436 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
437 ; CHECK: isel 3, 7, 8, [[REG1]]
438 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
439 ; CHECK-NO-ISEL: ori 3, 8, 0
440 ; CHECK-NO-ISEL-NEXT: blr
441 ; CHECK-NO-ISEL: [[TRUE]]
442 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
443 ; CHECK-NO-ISEL-NEXT: blr
444 ; CHECK: blr
447 define i64 @testi64ne(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
448 entry:
449   %cmp1 = icmp eq i64 %c3, %c4
450   %cmp3tmp = icmp eq i64 %c1, %c2
451   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
452   %cond = select i1 %cmp3, i64 %a1, i64 %a2
453   ret i64 %cond
455 ; CHECK-LABEL: @testi64ne
456 ; CHECK-NO-ISEL-LABEL: @testi64ne
457 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
458 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
459 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
460 ; CHECK: isel 3, 7, 8, [[REG1]]
461 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
462 ; CHECK-NO-ISEL: ori 3, 8, 0
463 ; CHECK-NO-ISEL-NEXT: blr
464 ; CHECK-NO-ISEL: [[TRUE]]
465 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
466 ; CHECK-NO-ISEL-NEXT: blr
467 ; CHECK: blr
470 define float @testfloatslt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
471 entry:
472   %cmp1 = fcmp oeq float %c3, %c4
473   %cmp3tmp = fcmp oeq float %c1, %c2
474   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
475   %cond = select i1 %cmp3, float %a1, float %a2
476   ret float %cond
478 ; CHECK-LABEL: @testfloatslt
479 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
480 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
481 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
482 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
483 ; CHECK: .LBB[[BB1]]:
484 ; CHECK: fmr 5, 6
485 ; CHECK: .LBB[[BB2]]:
486 ; CHECK: fmr 1, 5
487 ; CHECK: blr
490 define float @testfloatult(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
491 entry:
492   %cmp1 = fcmp oeq float %c3, %c4
493   %cmp3tmp = fcmp oeq float %c1, %c2
494   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
495   %cond = select i1 %cmp3, float %a1, float %a2
496   ret float %cond
498 ; CHECK-LABEL: @testfloatult
499 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
500 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
501 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
502 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
503 ; CHECK: .LBB[[BB1]]:
504 ; CHECK: fmr 5, 6
505 ; CHECK: .LBB[[BB2]]:
506 ; CHECK: fmr 1, 5
507 ; CHECK: blr
510 define float @testfloatsle(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
511 entry:
512   %cmp1 = fcmp oeq float %c3, %c4
513   %cmp3tmp = fcmp oeq float %c1, %c2
514   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
515   %cond = select i1 %cmp3, float %a1, float %a2
516   ret float %cond
518 ; CHECK-LABEL: @testfloatsle
519 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
520 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
521 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
522 ; CHECK: bc 12, 2, .LBB[[BB]]
523 ; CHECK: fmr 5, 6
524 ; CHECK: .LBB[[BB]]:
525 ; CHECK: fmr 1, 5
526 ; CHECK: blr
529 define float @testfloatule(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
530 entry:
531   %cmp1 = fcmp oeq float %c3, %c4
532   %cmp3tmp = fcmp oeq float %c1, %c2
533   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
534   %cond = select i1 %cmp3, float %a1, float %a2
535   ret float %cond
537 ; CHECK-LABEL: @testfloatule
538 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
539 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
540 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
541 ; CHECK: bc 4, 2, .LBB[[BB]]
542 ; CHECK: fmr 5, 6
543 ; CHECK: .LBB[[BB]]:
544 ; CHECK: fmr 1, 5
545 ; CHECK: blr
548 define float @testfloateq(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
549 entry:
550   %cmp1 = fcmp oeq float %c3, %c4
551   %cmp3tmp = fcmp oeq float %c1, %c2
552   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
553   %cond = select i1 %cmp3, float %a1, float %a2
554   ret float %cond
556 ; CHECK-LABEL: @testfloateq
557 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
558 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
559 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
560 ; CHECK: bclr 12, [[REG1]], 0
561 ; CHECK: fmr 1, 6
562 ; CHECK: blr
565 define float @testfloatsge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
566 entry:
567   %cmp1 = fcmp oeq float %c3, %c4
568   %cmp3tmp = fcmp oeq float %c1, %c2
569   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
570   %cond = select i1 %cmp3, float %a1, float %a2
571   ret float %cond
573 ; CHECK-LABEL: @testfloatsge
574 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
575 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
576 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
577 ; CHECK: bc 4, 2, .LBB[[BB]]
578 ; CHECK: fmr 5, 6
579 ; CHECK: .LBB[[BB]]:
580 ; CHECK: fmr 1, 5
581 ; CHECK: blr
584 define float @testfloatuge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
585 entry:
586   %cmp1 = fcmp oeq float %c3, %c4
587   %cmp3tmp = fcmp oeq float %c1, %c2
588   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
589   %cond = select i1 %cmp3, float %a1, float %a2
590   ret float %cond
592 ; CHECK-LABEL: @testfloatuge
593 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
594 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
595 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
596 ; CHECK: bc 12, 2, .LBB[[BB]]
597 ; CHECK: fmr 5, 6
598 ; CHECK: .LBB[[BB]]:
599 ; CHECK: fmr 1, 5
600 ; CHECK: blr
603 define float @testfloatsgt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
604 entry:
605   %cmp1 = fcmp oeq float %c3, %c4
606   %cmp3tmp = fcmp oeq float %c1, %c2
607   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
608   %cond = select i1 %cmp3, float %a1, float %a2
609   ret float %cond
611 ; CHECK-LABEL: @testfloatsgt
612 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
613 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
614 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
615 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
616 ; CHECK: .LBB[[BB1]]:
617 ; CHECK: fmr 5, 6
618 ; CHECK: .LBB[[BB2]]:
619 ; CHECK: fmr 1, 5
620 ; CHECK: blr
623 define float @testfloatugt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
624 entry:
625   %cmp1 = fcmp oeq float %c3, %c4
626   %cmp3tmp = fcmp oeq float %c1, %c2
627   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
628   %cond = select i1 %cmp3, float %a1, float %a2
629   ret float %cond
631 ; CHECK-LABEL: @testfloatugt
632 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
633 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
634 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
635 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
636 ; CHECK: .LBB[[BB1]]:
637 ; CHECK: fmr 5, 6
638 ; CHECK: .LBB[[BB2]]:
639 ; CHECK: fmr 1, 5
640 ; CHECK: blr
643 define float @testfloatne(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
644 entry:
645   %cmp1 = fcmp oeq float %c3, %c4
646   %cmp3tmp = fcmp oeq float %c1, %c2
647   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
648   %cond = select i1 %cmp3, float %a1, float %a2
649   ret float %cond
651 ; CHECK-LABEL: @testfloatne
652 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
653 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
654 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
655 ; CHECK: bclr 12, [[REG1]], 0
656 ; CHECK: fmr 1, 6
657 ; CHECK: blr
660 define double @testdoubleslt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
661 entry:
662   %cmp1 = fcmp oeq double %c3, %c4
663   %cmp3tmp = fcmp oeq double %c1, %c2
664   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
665   %cond = select i1 %cmp3, double %a1, double %a2
666   ret double %cond
668 ; CHECK-LABEL: @testdoubleslt
669 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
670 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
671 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
672 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
673 ; CHECK: .LBB[[BB1]]:
674 ; CHECK: fmr 5, 6
675 ; CHECK: .LBB[[BB2]]:
676 ; CHECK: fmr 1, 5
677 ; CHECK: blr
680 define double @testdoubleult(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
681 entry:
682   %cmp1 = fcmp oeq double %c3, %c4
683   %cmp3tmp = fcmp oeq double %c1, %c2
684   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
685   %cond = select i1 %cmp3, double %a1, double %a2
686   ret double %cond
688 ; CHECK-LABEL: @testdoubleult
689 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
690 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
691 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
692 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
693 ; CHECK: .LBB[[BB1]]:
694 ; CHECK: fmr 5, 6
695 ; CHECK: .LBB[[BB2]]:
696 ; CHECK: fmr 1, 5
697 ; CHECK: blr
700 define double @testdoublesle(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
701 entry:
702   %cmp1 = fcmp oeq double %c3, %c4
703   %cmp3tmp = fcmp oeq double %c1, %c2
704   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
705   %cond = select i1 %cmp3, double %a1, double %a2
706   ret double %cond
708 ; CHECK-LABEL: @testdoublesle
709 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
710 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
711 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
712 ; CHECK: bc 12, 2, .LBB[[BB]]
713 ; CHECK: fmr 5, 6
714 ; CHECK: .LBB[[BB]]:
715 ; CHECK: fmr 1, 5
716 ; CHECK: blr
719 define double @testdoubleule(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
720 entry:
721   %cmp1 = fcmp oeq double %c3, %c4
722   %cmp3tmp = fcmp oeq double %c1, %c2
723   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
724   %cond = select i1 %cmp3, double %a1, double %a2
725   ret double %cond
727 ; CHECK-LABEL: @testdoubleule
728 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
729 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
730 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
731 ; CHECK: bc 4, 2, .LBB[[BB]]
732 ; CHECK: fmr 5, 6
733 ; CHECK: .LBB[[BB]]:
734 ; CHECK: fmr 1, 5
735 ; CHECK: blr
738 define double @testdoubleeq(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
739 entry:
740   %cmp1 = fcmp oeq double %c3, %c4
741   %cmp3tmp = fcmp oeq double %c1, %c2
742   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
743   %cond = select i1 %cmp3, double %a1, double %a2
744   ret double %cond
746 ; CHECK-LABEL: @testdoubleeq
747 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
748 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
749 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
750 ; CHECK: bclr 12, [[REG1]], 0
751 ; CHECK: fmr 1, 6
752 ; CHECK: blr
755 define double @testdoublesge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
756 entry:
757   %cmp1 = fcmp oeq double %c3, %c4
758   %cmp3tmp = fcmp oeq double %c1, %c2
759   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
760   %cond = select i1 %cmp3, double %a1, double %a2
761   ret double %cond
763 ; CHECK-LABEL: @testdoublesge
764 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
765 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
766 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
767 ; CHECK: bc 4, 2, .LBB[[BB]]
768 ; CHECK: fmr 5, 6
769 ; CHECK: .LBB[[BB]]:
770 ; CHECK: fmr 1, 5
771 ; CHECK: blr
774 define double @testdoubleuge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
775 entry:
776   %cmp1 = fcmp oeq double %c3, %c4
777   %cmp3tmp = fcmp oeq double %c1, %c2
778   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
779   %cond = select i1 %cmp3, double %a1, double %a2
780   ret double %cond
782 ; CHECK-LABEL: @testdoubleuge
783 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
784 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
785 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
786 ; CHECK: bc 12, 2, .LBB[[BB]]
787 ; CHECK: fmr 5, 6
788 ; CHECK: .LBB[[BB]]:
789 ; CHECK: fmr 1, 5
790 ; CHECK: blr
793 define double @testdoublesgt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
794 entry:
795   %cmp1 = fcmp oeq double %c3, %c4
796   %cmp3tmp = fcmp oeq double %c1, %c2
797   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
798   %cond = select i1 %cmp3, double %a1, double %a2
799   ret double %cond
801 ; CHECK-LABEL: @testdoublesgt
802 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
803 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
804 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
805 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
806 ; CHECK: .LBB[[BB1]]:
807 ; CHECK: fmr 5, 6
808 ; CHECK: .LBB[[BB2]]:
809 ; CHECK: fmr 1, 5
810 ; CHECK: blr
813 define double @testdoubleugt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
814 entry:
815   %cmp1 = fcmp oeq double %c3, %c4
816   %cmp3tmp = fcmp oeq double %c1, %c2
817   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
818   %cond = select i1 %cmp3, double %a1, double %a2
819   ret double %cond
821 ; CHECK-LABEL: @testdoubleugt
822 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
823 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
824 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
825 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
826 ; CHECK: .LBB[[BB1]]:
827 ; CHECK: fmr 5, 6
828 ; CHECK: .LBB[[BB2]]:
829 ; CHECK: fmr 1, 5
830 ; CHECK: blr
833 define double @testdoublene(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
834 entry:
835   %cmp1 = fcmp oeq double %c3, %c4
836   %cmp3tmp = fcmp oeq double %c1, %c2
837   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
838   %cond = select i1 %cmp3, double %a1, double %a2
839   ret double %cond
841 ; CHECK-LABEL: @testdoublene
842 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
843 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
844 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
845 ; CHECK: bclr 12, [[REG1]], 0
846 ; CHECK: fmr 1, 6
847 ; CHECK: blr
850 define <4 x float> @testv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
851 entry:
852   %cmp1 = fcmp oeq float %c3, %c4
853   %cmp3tmp = fcmp oeq float %c1, %c2
854   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
855   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
856   ret <4 x float> %cond
858 ; CHECK-LABEL: @testv4floatslt
859 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
860 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
861 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
862 ; CHECK: bclr 12, 2, 0
863 ; CHECK: .LBB[[BB]]:
864 ; CHECK: vmr 2, 3
865 ; CHECK: blr
868 define <4 x float> @testv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
869 entry:
870   %cmp1 = fcmp oeq float %c3, %c4
871   %cmp3tmp = fcmp oeq float %c1, %c2
872   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
873   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
874   ret <4 x float> %cond
876 ; CHECK-LABEL: @testv4floatult
877 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
878 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
879 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
880 ; CHECK: bclr 4, 2, 0
881 ; CHECK: .LBB[[BB]]:
882 ; CHECK: vmr 2, 3
883 ; CHECK: blr
886 define <4 x float> @testv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
887 entry:
888   %cmp1 = fcmp oeq float %c3, %c4
889   %cmp3tmp = fcmp oeq float %c1, %c2
890   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
891   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
892   ret <4 x float> %cond
894 ; CHECK-LABEL: @testv4floatsle
895 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
896 ; CHECK: bclr 4, 2, 0
897 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
898 ; CHECK: bclr 12, 2, 0
899 ; CHECK: vmr 2, 3
900 ; CHECK: blr
903 define <4 x float> @testv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
904 entry:
905   %cmp1 = fcmp oeq float %c3, %c4
906   %cmp3tmp = fcmp oeq float %c1, %c2
907   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
908   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
909   ret <4 x float> %cond
911 ; CHECK-LABEL: @testv4floatule
912 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
913 ; CHECK: bclr 12, 2, 0
914 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
915 ; CHECK: bclr 4, 2, 0
916 ; CHECK: vmr 2, 3
917 ; CHECK: blr
920 define <4 x float> @testv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
921 entry:
922   %cmp1 = fcmp oeq float %c3, %c4
923   %cmp3tmp = fcmp oeq float %c1, %c2
924   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
925   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
926   ret <4 x float> %cond
928 ; CHECK-LABEL: @testv4floateq
929 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
930 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
931 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
932 ; CHECK: bclr 12, [[REG1]], 0
933 ; CHECK: vmr 2, 3
934 ; CHECK: blr
937 define <4 x float> @testv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
938 entry:
939   %cmp1 = fcmp oeq float %c3, %c4
940   %cmp3tmp = fcmp oeq float %c1, %c2
941   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
942   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
943   ret <4 x float> %cond
945 ; CHECK-LABEL: @testv4floatsge
946 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
947 ; CHECK: bclr 12, 2, 0
948 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
949 ; CHECK: bclr 4, 2, 0
950 ; CHECK: vmr 2, 3
951 ; CHECK: blr
954 define <4 x float> @testv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
955 entry:
956   %cmp1 = fcmp oeq float %c3, %c4
957   %cmp3tmp = fcmp oeq float %c1, %c2
958   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
959   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
960   ret <4 x float> %cond
962 ; CHECK-LABEL: @testv4floatuge
963 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
964 ; CHECK: bclr 4, 2, 0
965 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
966 ; CHECK: bclr 12, 2, 0
967 ; CHECK: vmr 2, 3
968 ; CHECK: blr
971 define <4 x float> @testv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
972 entry:
973   %cmp1 = fcmp oeq float %c3, %c4
974   %cmp3tmp = fcmp oeq float %c1, %c2
975   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
976   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
977   ret <4 x float> %cond
979 ; CHECK-LABEL: @testv4floatsgt
980 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
981 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
982 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
983 ; CHECK: bclr 4, 2, 0
984 ; CHECK: vmr 2, 3
985 ; CHECK: blr
988 define <4 x float> @testv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
989 entry:
990   %cmp1 = fcmp oeq float %c3, %c4
991   %cmp3tmp = fcmp oeq float %c1, %c2
992   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
993   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
994   ret <4 x float> %cond
996 ; CHECK-LABEL: @testv4floatugt
997 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
998 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
999 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
1000 ; CHECK: bclr 12, 2, 0
1001 ; CHECK: .LBB[[BB]]
1002 ; CHECK: vmr 2, 3
1003 ; CHECK: blr
1006 define <4 x float> @testv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
1007 entry:
1008   %cmp1 = fcmp oeq float %c3, %c4
1009   %cmp3tmp = fcmp oeq float %c1, %c2
1010   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1011   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1012   ret <4 x float> %cond
1014 ; CHECK-LABEL: @testv4floatne
1015 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1016 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1017 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1018 ; CHECK: bclr 12, [[REG1]], 0
1019 ; CHECK: vmr 2, 3
1020 ; CHECK: blr
1023 define ppc_fp128 @testppc_fp128eq(ppc_fp128 %c1, ppc_fp128 %c2, ppc_fp128 %c3, ppc_fp128 %c4, ppc_fp128 %a1, ppc_fp128 %a2) #0 {
1024 entry:
1025   %cmp1 = fcmp oeq ppc_fp128 %c3, %c4
1026   %cmp3tmp = fcmp oeq ppc_fp128 %c1, %c2
1027   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1028   %cond = select i1 %cmp3, ppc_fp128 %a1, ppc_fp128 %a2
1029   ret ppc_fp128 %cond
1031 ; FIXME: Because of the way that the late SELECT_* pseudo-instruction expansion
1032 ; works, we end up with two blocks with the same predicate. These could be
1033 ; combined.
1035 ; CHECK-LABEL: @testppc_fp128eq
1036 ; CHECK-DAG: fcmpu {{[0-9]+}}, 6, 8
1037 ; CHECK-DAG: fcmpu {{[0-9]+}}, 5, 7
1038 ; CHECK-DAG: fcmpu {{[0-9]+}}, 2, 4
1039 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 3
1040 ; CHECK: crand [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1041 ; CHECK: crand [[REG2:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1042 ; CHECK: crxor [[REG3:[0-9]+]], [[REG2]], [[REG1]]
1043 ; CHECK: bc 12, [[REG3]], .LBB[[BB1:[0-9_]+]]
1044 ; CHECK: fmr 11, 9
1045 ; CHECK: .LBB[[BB1]]:
1046 ; CHECK: bc 12, [[REG3]], .LBB[[BB2:[0-9_]+]]
1047 ; CHECK: fmr 12, 10
1048 ; CHECK: .LBB[[BB2]]:
1049 ; CHECK-DAG: fmr 1, 11
1050 ; CHECK-DAG: fmr 2, 12
1051 ; CHECK: blr
1054 define <2 x double> @testv2doubleslt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1055 entry:
1056   %cmp1 = fcmp oeq float %c3, %c4
1057   %cmp3tmp = fcmp oeq float %c1, %c2
1058   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1059   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1060   ret <2 x double> %cond
1062 ; CHECK-LABEL: @testv2doubleslt
1063 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1064 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1065 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1066 ; CHECK: bclr 12, 2, 0
1067 ; CHECK: .LBB[[BB]]:
1068 ; CHECK: vmr 2, 3
1069 ; CHECK: blr
1072 define <2 x double> @testv2doubleult(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1073 entry:
1074   %cmp1 = fcmp oeq float %c3, %c4
1075   %cmp3tmp = fcmp oeq float %c1, %c2
1076   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1077   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1078   ret <2 x double> %cond
1080 ; CHECK-LABEL: @testv2doubleult
1081 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1082 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1083 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1084 ; CHECK: bclr 4, 2, 0
1085 ; CHECK: .LBB[[BB]]:
1086 ; CHECK: vmr 2, 3
1087 ; CHECK: blr
1090 define <2 x double> @testv2doublesle(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1091 entry:
1092   %cmp1 = fcmp oeq float %c3, %c4
1093   %cmp3tmp = fcmp oeq float %c1, %c2
1094   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1095   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1096   ret <2 x double> %cond
1098 ; CHECK-LABEL: @testv2doublesle
1099 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1100 ; CHECK: bclr 4, 2, 0
1101 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1102 ; CHECK: bclr 12, 2, 0
1103 ; CHECK: vmr 2, 3
1104 ; CHECK: blr
1107 define <2 x double> @testv2doubleule(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1108 entry:
1109   %cmp1 = fcmp oeq float %c3, %c4
1110   %cmp3tmp = fcmp oeq float %c1, %c2
1111   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1112   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1113   ret <2 x double> %cond
1115 ; CHECK-LABEL: @testv2doubleule
1116 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1117 ; CHECK: bclr 12, 2, 0
1118 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1119 ; CHECK: bclr 4, 2, 0
1120 ; CHECK: vmr 2, 3
1121 ; CHECK: blr
1124 define <2 x double> @testv2doubleeq(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1125 entry:
1126   %cmp1 = fcmp oeq float %c3, %c4
1127   %cmp3tmp = fcmp oeq float %c1, %c2
1128   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1129   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1130   ret <2 x double> %cond
1132 ; CHECK-LABEL: @testv2doubleeq
1133 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1134 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1135 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1136 ; CHECK: bclr 12, [[REG1]], 0
1137 ; CHECK: vmr 2, 3
1138 ; CHECK: blr
1141 define <2 x double> @testv2doublesge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1142 entry:
1143   %cmp1 = fcmp oeq float %c3, %c4
1144   %cmp3tmp = fcmp oeq float %c1, %c2
1145   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1146   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1147   ret <2 x double> %cond
1149 ; CHECK-LABEL: @testv2doublesge
1150 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1151 ; CHECK: bclr 12, 2, 0
1152 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1153 ; CHECK: bclr 4, 2, 0
1154 ; CHECK: vmr 2, 3
1155 ; CHECK: blr
1158 define <2 x double> @testv2doubleuge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1159 entry:
1160   %cmp1 = fcmp oeq float %c3, %c4
1161   %cmp3tmp = fcmp oeq float %c1, %c2
1162   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1163   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1164   ret <2 x double> %cond
1166 ; CHECK-LABEL: @testv2doubleuge
1167 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1168 ; CHECK: bclr 4, 2, 0
1169 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1170 ; CHECK: bclr 12, 2, 0
1171 ; CHECK: vmr 2, 3
1172 ; CHECK: blr
1175 define <2 x double> @testv2doublesgt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1176 entry:
1177   %cmp1 = fcmp oeq float %c3, %c4
1178   %cmp3tmp = fcmp oeq float %c1, %c2
1179   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1180   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1181   ret <2 x double> %cond
1183 ; CHECK-LABEL: @testv2doublesgt
1184 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1185 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1186 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1187 ; CHECK: bclr 4, 2, 0
1188 ; CHECK: .LBB[[BB]]
1189 ; CHECK: vmr 2, 3
1190 ; CHECK: blr
1193 define <2 x double> @testv2doubleugt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1194 entry:
1195   %cmp1 = fcmp oeq float %c3, %c4
1196   %cmp3tmp = fcmp oeq float %c1, %c2
1197   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1198   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1199   ret <2 x double> %cond
1201 ; CHECK-LABEL: @testv2doubleugt
1202 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1203 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1204 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1205 ; CHECK: bclr 12, 2, 0
1206 ; CHECK: .LBB[[BB]]
1207 ; CHECK: vmr 2, 3
1208 ; CHECK: blr
1211 define <2 x double> @testv2doublene(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1212 entry:
1213   %cmp1 = fcmp oeq float %c3, %c4
1214   %cmp3tmp = fcmp oeq float %c1, %c2
1215   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1216   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1217   ret <2 x double> %cond
1219 ; CHECK-LABEL: @testv2doublene
1220 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1221 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1222 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1223 ; CHECK: bclr 12, [[REG1]], 0
1224 ; CHECK: vmr 2, 3
1225 ; CHECK: blr
1228 define <4 x double> @testqv4doubleslt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1229 entry:
1230   %cmp1 = fcmp oeq float %c3, %c4
1231   %cmp3tmp = fcmp oeq float %c1, %c2
1232   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1233   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1234   ret <4 x double> %cond
1236 ; CHECK-LABEL: @testqv4doubleslt
1237 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1238 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1239 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1240 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1241 ; CHECK: .LBB[[BB1]]:
1242 ; CHECK: qvfmr 5, 6
1243 ; CHECK: .LBB[[BB2]]:
1244 ; CHECK: qvfmr 1, 5
1245 ; CHECK: blr
1248 define <4 x double> @testqv4doubleult(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1249 entry:
1250   %cmp1 = fcmp oeq float %c3, %c4
1251   %cmp3tmp = fcmp oeq float %c1, %c2
1252   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1253   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1254   ret <4 x double> %cond
1256 ; CHECK-LABEL: @testqv4doubleult
1257 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1258 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1259 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1260 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1261 ; CHECK: .LBB[[BB1]]:
1262 ; CHECK: qvfmr 5, 6
1263 ; CHECK: .LBB[[BB2]]:
1264 ; CHECK: qvfmr 1, 5
1265 ; CHECK: blr
1268 define <4 x double> @testqv4doublesle(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1269 entry:
1270   %cmp1 = fcmp oeq float %c3, %c4
1271   %cmp3tmp = fcmp oeq float %c1, %c2
1272   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1273   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1274   ret <4 x double> %cond
1276 ; CHECK-LABEL: @testqv4doublesle
1277 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1278 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1279 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1280 ; CHECK: bc 12, 2, .LBB[[BB]]
1281 ; CHECK: qvfmr 5, 6
1282 ; CHECK: .LBB[[BB]]:
1283 ; CHECK: qvfmr 1, 5
1284 ; CHECK: blr
1287 define <4 x double> @testqv4doubleule(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1288 entry:
1289   %cmp1 = fcmp oeq float %c3, %c4
1290   %cmp3tmp = fcmp oeq float %c1, %c2
1291   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1292   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1293   ret <4 x double> %cond
1295 ; CHECK-LABEL: @testqv4doubleule
1296 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1297 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1298 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1299 ; CHECK: bc 4, 2, .LBB[[BB]]
1300 ; CHECK: qvfmr 5, 6
1301 ; CHECK: .LBB[[BB]]:
1302 ; CHECK: qvfmr 1, 5
1303 ; CHECK: blr
1306 define <4 x double> @testqv4doubleeq(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1307 entry:
1308   %cmp1 = fcmp oeq float %c3, %c4
1309   %cmp3tmp = fcmp oeq float %c1, %c2
1310   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1311   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1312   ret <4 x double> %cond
1314 ; CHECK-LABEL: @testqv4doubleeq
1315 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1316 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1317 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1318 ; CHECK: bclr 12, [[REG1]], 0
1319 ; CHECK: qvfmr 1, 6
1320 ; CHECK: blr
1323 define <4 x double> @testqv4doublesge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1324 entry:
1325   %cmp1 = fcmp oeq float %c3, %c4
1326   %cmp3tmp = fcmp oeq float %c1, %c2
1327   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1328   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1329   ret <4 x double> %cond
1331 ; CHECK-LABEL: @testqv4doublesge
1332 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1333 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1334 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1335 ; CHECK: bc 4, 2, .LBB[[BB]]
1336 ; CHECK: qvfmr 5, 6
1337 ; CHECK: .LBB[[BB]]:
1338 ; CHECK: qvfmr 1, 5
1339 ; CHECK: blr
1342 define <4 x double> @testqv4doubleuge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1343 entry:
1344   %cmp1 = fcmp oeq float %c3, %c4
1345   %cmp3tmp = fcmp oeq float %c1, %c2
1346   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1347   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1348   ret <4 x double> %cond
1350 ; CHECK-LABEL: @testqv4doubleuge
1351 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1352 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1353 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1354 ; CHECK: bc 12, 2, .LBB[[BB]]
1355 ; CHECK: qvfmr 5, 6
1356 ; CHECK: .LBB[[BB]]:
1357 ; CHECK: qvfmr 1, 5
1358 ; CHECK: blr
1361 define <4 x double> @testqv4doublesgt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1362 entry:
1363   %cmp1 = fcmp oeq float %c3, %c4
1364   %cmp3tmp = fcmp oeq float %c1, %c2
1365   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1366   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1367   ret <4 x double> %cond
1369 ; CHECK-LABEL: @testqv4doublesgt
1370 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1371 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1372 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1373 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1374 ; CHECK: .LBB[[BB1]]:
1375 ; CHECK: qvfmr 5, 6
1376 ; CHECK: .LBB[[BB2]]:
1377 ; CHECK: qvfmr 1, 5
1378 ; CHECK: blr
1381 define <4 x double> @testqv4doubleugt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1382 entry:
1383   %cmp1 = fcmp oeq float %c3, %c4
1384   %cmp3tmp = fcmp oeq float %c1, %c2
1385   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1386   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1387   ret <4 x double> %cond
1389 ; CHECK-LABEL: @testqv4doubleugt
1390 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1391 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1392 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1393 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1394 ; CHECK: .LBB[[BB1]]:
1395 ; CHECK: qvfmr 5, 6
1396 ; CHECK: .LBB[[BB2]]:
1397 ; CHECK: qvfmr 1, 5
1398 ; CHECK: blr
1401 define <4 x double> @testqv4doublene(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1402 entry:
1403   %cmp1 = fcmp oeq float %c3, %c4
1404   %cmp3tmp = fcmp oeq float %c1, %c2
1405   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1406   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1407   ret <4 x double> %cond
1409 ; CHECK-LABEL: @testqv4doublene
1410 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1411 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1412 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1413 ; CHECK: bclr 12, [[REG1]], 0
1414 ; CHECK: qvfmr 1, 6
1415 ; CHECK: blr
1418 define <4 x float> @testqv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1419 entry:
1420   %cmp1 = fcmp oeq float %c3, %c4
1421   %cmp3tmp = fcmp oeq float %c1, %c2
1422   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1423   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1424   ret <4 x float> %cond
1426 ; CHECK-LABEL: @testqv4floatslt
1427 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1428 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1429 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1430 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1431 ; CHECK: .LBB[[BB1]]:
1432 ; CHECK: qvfmr 5, 6
1433 ; CHECK: .LBB[[BB2]]:
1434 ; CHECK: qvfmr 1, 5
1435 ; CHECK: blr
1438 define <4 x float> @testqv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1439 entry:
1440   %cmp1 = fcmp oeq float %c3, %c4
1441   %cmp3tmp = fcmp oeq float %c1, %c2
1442   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1443   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1444   ret <4 x float> %cond
1446 ; CHECK-LABEL: @testqv4floatult
1447 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1448 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1449 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1450 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1451 ; CHECK: .LBB[[BB1]]:
1452 ; CHECK: qvfmr 5, 6
1453 ; CHECK: .LBB[[BB2]]:
1454 ; CHECK: qvfmr 1, 5
1455 ; CHECK: blr
1458 define <4 x float> @testqv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1459 entry:
1460   %cmp1 = fcmp oeq float %c3, %c4
1461   %cmp3tmp = fcmp oeq float %c1, %c2
1462   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1463   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1464   ret <4 x float> %cond
1466 ; CHECK-LABEL: @testqv4floatsle
1467 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1468 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1469 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1470 ; CHECK: bc 12, 2, .LBB[[BB]]
1471 ; CHECK: qvfmr 5, 6
1472 ; CHECK: .LBB[[BB]]:
1473 ; CHECK: qvfmr 1, 5
1474 ; CHECK: blr
1477 define <4 x float> @testqv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1478 entry:
1479   %cmp1 = fcmp oeq float %c3, %c4
1480   %cmp3tmp = fcmp oeq float %c1, %c2
1481   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1482   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1483   ret <4 x float> %cond
1485 ; CHECK-LABEL: @testqv4floatule
1486 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1487 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1488 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1489 ; CHECK: bc 4, 2, .LBB[[BB]]
1490 ; CHECK: qvfmr 5, 6
1491 ; CHECK: .LBB[[BB]]:
1492 ; CHECK: qvfmr 1, 5
1493 ; CHECK: blr
1496 define <4 x float> @testqv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1497 entry:
1498   %cmp1 = fcmp oeq float %c3, %c4
1499   %cmp3tmp = fcmp oeq float %c1, %c2
1500   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1501   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1502   ret <4 x float> %cond
1504 ; CHECK-LABEL: @testqv4floateq
1505 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1506 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1507 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1508 ; CHECK: bclr 12, [[REG1]], 0
1509 ; CHECK: qvfmr 1, 6
1510 ; CHECK: blr
1513 define <4 x float> @testqv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1514 entry:
1515   %cmp1 = fcmp oeq float %c3, %c4
1516   %cmp3tmp = fcmp oeq float %c1, %c2
1517   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1518   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1519   ret <4 x float> %cond
1521 ; CHECK-LABEL: @testqv4floatsge
1522 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1523 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1524 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1525 ; CHECK: bc 4, 2, .LBB[[BB]]
1526 ; CHECK: qvfmr 5, 6
1527 ; CHECK: .LBB[[BB]]:
1528 ; CHECK: qvfmr 1, 5
1529 ; CHECK: blr
1532 define <4 x float> @testqv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1533 entry:
1534   %cmp1 = fcmp oeq float %c3, %c4
1535   %cmp3tmp = fcmp oeq float %c1, %c2
1536   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1537   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1538   ret <4 x float> %cond
1540 ; CHECK-LABEL: @testqv4floatuge
1541 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1542 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1543 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1544 ; CHECK: bc 12, 2, .LBB[[BB]]
1545 ; CHECK: qvfmr 5, 6
1546 ; CHECK: .LBB[[BB]]:
1547 ; CHECK: qvfmr 1, 5
1548 ; CHECK: blr
1551 define <4 x float> @testqv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1552 entry:
1553   %cmp1 = fcmp oeq float %c3, %c4
1554   %cmp3tmp = fcmp oeq float %c1, %c2
1555   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1556   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1557   ret <4 x float> %cond
1559 ; CHECK-LABEL: @testqv4floatsgt
1560 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1561 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1562 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1563 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1564 ; CHECK: .LBB[[BB1]]:
1565 ; CHECK: qvfmr 5, 6
1566 ; CHECK: .LBB[[BB2]]:
1567 ; CHECK: qvfmr 1, 5
1568 ; CHECK: blr
1571 define <4 x float> @testqv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1572 entry:
1573   %cmp1 = fcmp oeq float %c3, %c4
1574   %cmp3tmp = fcmp oeq float %c1, %c2
1575   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1576   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1577   ret <4 x float> %cond
1579 ; CHECK-LABEL: @testqv4floatugt
1580 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1581 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1582 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1583 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1584 ; CHECK: .LBB[[BB1]]:
1585 ; CHECK: qvfmr 5, 6
1586 ; CHECK: .LBB[[BB2]]:
1587 ; CHECK: qvfmr 1, 5
1588 ; CHECK: blr
1591 define <4 x float> @testqv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1592 entry:
1593   %cmp1 = fcmp oeq float %c3, %c4
1594   %cmp3tmp = fcmp oeq float %c1, %c2
1595   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1596   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1597   ret <4 x float> %cond
1599 ; CHECK-LABEL: @testqv4floatne
1600 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1601 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1602 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1603 ; CHECK: bclr 12, [[REG1]], 0
1604 ; CHECK: qvfmr 1, 6
1605 ; CHECK: blr
1608 define <4 x i1> @testqv4i1slt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1609 entry:
1610   %cmp1 = fcmp oeq float %c3, %c4
1611   %cmp3tmp = fcmp oeq float %c1, %c2
1612   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1613   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1614   ret <4 x i1> %cond
1616 ; CHECK-LABEL: @testqv4i1slt
1617 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1618 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1619 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1620 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1621 ; CHECK: .LBB[[BB1]]:
1622 ; CHECK: qvfmr 5, 6
1623 ; CHECK: .LBB[[BB2]]:
1624 ; CHECK: qvfmr 1, 5
1625 ; CHECK: blr
1628 define <4 x i1> @testqv4i1ult(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1629 entry:
1630   %cmp1 = fcmp oeq float %c3, %c4
1631   %cmp3tmp = fcmp oeq float %c1, %c2
1632   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1633   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1634   ret <4 x i1> %cond
1636 ; CHECK-LABEL: @testqv4i1ult
1637 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1638 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1639 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1640 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1641 ; CHECK: .LBB[[BB1]]:
1642 ; CHECK: qvfmr 5, 6
1643 ; CHECK: .LBB[[BB2]]:
1644 ; CHECK: qvfmr 1, 5
1645 ; CHECK: blr
1648 define <4 x i1> @testqv4i1sle(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1649 entry:
1650   %cmp1 = fcmp oeq float %c3, %c4
1651   %cmp3tmp = fcmp oeq float %c1, %c2
1652   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1653   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1654   ret <4 x i1> %cond
1656 ; CHECK-LABEL: @testqv4i1sle
1657 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1658 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1659 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1660 ; CHECK: bc 12, 2, .LBB[[BB]]
1661 ; CHECK: qvfmr 5, 6
1662 ; CHECK: .LBB[[BB]]:
1663 ; CHECK: qvfmr 1, 5
1664 ; CHECK: blr
1667 define <4 x i1> @testqv4i1ule(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1668 entry:
1669   %cmp1 = fcmp oeq float %c3, %c4
1670   %cmp3tmp = fcmp oeq float %c1, %c2
1671   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1672   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1673   ret <4 x i1> %cond
1675 ; CHECK-LABEL: @testqv4i1ule
1676 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1677 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1678 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1679 ; CHECK: bc 4, 2, .LBB[[BB]]
1680 ; CHECK: qvfmr 5, 6
1681 ; CHECK: .LBB[[BB]]:
1682 ; CHECK: qvfmr 1, 5
1683 ; CHECK: blr
1686 define <4 x i1> @testqv4i1eq(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1687 entry:
1688   %cmp1 = fcmp oeq float %c3, %c4
1689   %cmp3tmp = fcmp oeq float %c1, %c2
1690   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1691   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1692   ret <4 x i1> %cond
1694 ; CHECK-LABEL: @testqv4i1eq
1695 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1696 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1697 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1698 ; CHECK: bclr 12, [[REG1]], 0
1699 ; CHECK: qvfmr 1, 6
1700 ; CHECK: blr
1703 define <4 x i1> @testqv4i1sge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1704 entry:
1705   %cmp1 = fcmp oeq float %c3, %c4
1706   %cmp3tmp = fcmp oeq float %c1, %c2
1707   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1708   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1709   ret <4 x i1> %cond
1711 ; CHECK-LABEL: @testqv4i1sge
1712 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1713 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
1714 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1715 ; CHECK: bc 4, 2, .LBB[[BB]]
1716 ; CHECK: qvfmr 5, 6
1717 ; CHECK: .LBB[[BB]]:
1718 ; CHECK: qvfmr 1, 5
1719 ; CHECK: blr
1722 define <4 x i1> @testqv4i1uge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1723 entry:
1724   %cmp1 = fcmp oeq float %c3, %c4
1725   %cmp3tmp = fcmp oeq float %c1, %c2
1726   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1727   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1728   ret <4 x i1> %cond
1730 ; CHECK-LABEL: @testqv4i1uge
1731 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1732 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
1733 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1734 ; CHECK: bc 12, 2, .LBB[[BB]]
1735 ; CHECK: qvfmr 5, 6
1736 ; CHECK: .LBB[[BB]]:
1737 ; CHECK: qvfmr 1, 5
1738 ; CHECK: blr
1741 define <4 x i1> @testqv4i1sgt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1742 entry:
1743   %cmp1 = fcmp oeq float %c3, %c4
1744   %cmp3tmp = fcmp oeq float %c1, %c2
1745   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1746   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1747   ret <4 x i1> %cond
1749 ; CHECK-LABEL: @testqv4i1sgt
1750 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1751 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
1752 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1753 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
1754 ; CHECK: .LBB[[BB1]]:
1755 ; CHECK: qvfmr 5, 6
1756 ; CHECK: .LBB[[BB2]]:
1757 ; CHECK: qvfmr 1, 5
1758 ; CHECK: blr
1761 define <4 x i1> @testqv4i1ugt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1762 entry:
1763   %cmp1 = fcmp oeq float %c3, %c4
1764   %cmp3tmp = fcmp oeq float %c1, %c2
1765   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1766   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1767   ret <4 x i1> %cond
1769 ; CHECK-LABEL: @testqv4i1ugt
1770 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1771 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
1772 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1773 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
1774 ; CHECK: .LBB[[BB1]]:
1775 ; CHECK: qvfmr 5, 6
1776 ; CHECK: .LBB[[BB2]]:
1777 ; CHECK: qvfmr 1, 5
1778 ; CHECK: blr
1781 define <4 x i1> @testqv4i1ne(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1782 entry:
1783   %cmp1 = fcmp oeq float %c3, %c4
1784   %cmp3tmp = fcmp oeq float %c1, %c2
1785   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1786   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1787   ret <4 x i1> %cond
1789 ; CHECK-LABEL: @testqv4i1ne
1790 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1791 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1792 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1793 ; CHECK: bclr 12, [[REG1]], 0
1794 ; CHECK: qvfmr 1, 6
1795 ; CHECK: blr
1798 attributes #0 = { nounwind readnone "target-cpu"="pwr7" }
1799 attributes #1 = { nounwind readnone "target-cpu"="a2q" }