blob: b7beb8165fdf161e0f06eab70bc2d89967a663d9 [file] [log] [blame]
Ehsan Amiria538b0f2016-08-03 18:17:35 +00001; RUN: llc -verify-machineinstrs < %s | FileCheck %s
Tony Jiang8e8c4442017-01-16 20:12:26 +00002; RUN: llc -verify-machineinstrs -ppc-gen-isel=false < %s | FileCheck --check-prefix=CHECK-NO-ISEL %s
Hal Finkela2cdbce2015-08-30 22:12:50 +00003target datalayout = "E-m:e-i64:64-n32:64"
4target triple = "powerpc64-unknown-linux-gnu"
5
6; FIXME: We should check the operands to the cr* logical operation itself, but
7; unfortunately, FileCheck does not yet understand how to do arithmetic, so we
8; can't do so without introducing a register-allocation dependency.
9
10define signext i32 @testi32slt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
11entry:
12 %cmp1 = icmp eq i32 %c3, %c4
13 %cmp3tmp = icmp eq i32 %c1, %c2
14 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
15 %cond = select i1 %cmp3, i32 %a1, i32 %a2
16 ret i32 %cond
17
18; CHECK-LABEL: @testi32slt
Tony Jiang8e8c4442017-01-16 20:12:26 +000019; CHECK-NO-ISEL-LABEL: @testi32slt
Hal Finkela2cdbce2015-08-30 22:12:50 +000020; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
21; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
22; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
23; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +000024; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
25; CHECK-NO-ISEL: ori 3, 8, 0
26; CHECK-NO-ISEL-NEXT: blr
27; CHECK-NO-ISEL: [[TRUE]]
28; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
29; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +000030; CHECK: blr
31}
32
33define signext i32 @testi32ult(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
34entry:
35 %cmp1 = icmp eq i32 %c3, %c4
36 %cmp3tmp = icmp eq i32 %c1, %c2
37 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
38 %cond = select i1 %cmp3, i32 %a1, i32 %a2
39 ret i32 %cond
40
Tony Jiang8e8c4442017-01-16 20:12:26 +000041; CHECK-NO-ISEL-LABEL: @testi32ult
Hal Finkela2cdbce2015-08-30 22:12:50 +000042; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
43; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
44; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
45; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +000046; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
47; CHECK-NO-ISEL: ori 3, 8, 0
48; CHECK-NO-ISEL-NEXT: blr
49; CHECK-NO-ISEL: [[TRUE]]
50; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
51; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +000052; CHECK: blr
53}
54
55define signext i32 @testi32sle(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
56entry:
57 %cmp1 = icmp eq i32 %c3, %c4
58 %cmp3tmp = icmp eq i32 %c1, %c2
59 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
60 %cond = select i1 %cmp3, i32 %a1, i32 %a2
61 ret i32 %cond
62
63; CHECK-LABEL: @testi32sle
Tony Jiang8e8c4442017-01-16 20:12:26 +000064; CHECK-NO-ISEL-LABEL: @testi32sle
Hal Finkela2cdbce2015-08-30 22:12:50 +000065; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
66; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
67; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
68; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +000069; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
70; CHECK-NO-ISEL: ori 3, 8, 0
71; CHECK-NO-ISEL-NEXT: blr
72; CHECK-NO-ISEL: [[TRUE]]
73; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
74; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +000075; CHECK: blr
76}
77
78define signext i32 @testi32ule(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
79entry:
80 %cmp1 = icmp eq i32 %c3, %c4
81 %cmp3tmp = icmp eq i32 %c1, %c2
82 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
83 %cond = select i1 %cmp3, i32 %a1, i32 %a2
84 ret i32 %cond
85
86; CHECK-LABEL: @testi32ule
Tony Jiang8e8c4442017-01-16 20:12:26 +000087; CHECK-NO-ISEL-LABEL: @testi32ule
Hal Finkela2cdbce2015-08-30 22:12:50 +000088; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
89; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
90; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
91; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +000092; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
93; CHECK-NO-ISEL: ori 3, 8, 0
94; CHECK-NO-ISEL-NEXT: blr
95; CHECK-NO-ISEL: [[TRUE]]
96; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
97; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +000098; CHECK: blr
99}
100
101define signext i32 @testi32eq(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
102entry:
103 %cmp1 = icmp eq i32 %c3, %c4
104 %cmp3tmp = icmp eq i32 %c1, %c2
105 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
106 %cond = select i1 %cmp3, i32 %a1, i32 %a2
107 ret i32 %cond
108
109; CHECK-LABEL: @testi32eq
Tony Jiang8e8c4442017-01-16 20:12:26 +0000110; CHECK-NO-ISEL-LABEL: @testi32eq
Hal Finkela2cdbce2015-08-30 22:12:50 +0000111; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
112; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
113; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
114; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000115; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
116; CHECK-NO-ISEL: ori 3, 8, 0
117; CHECK-NO-ISEL-NEXT: blr
118; CHECK-NO-ISEL: [[TRUE]]
119; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
120; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000121; CHECK: blr
122}
123
124define signext i32 @testi32sge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
125entry:
126 %cmp1 = icmp eq i32 %c3, %c4
127 %cmp3tmp = icmp eq i32 %c1, %c2
128 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
129 %cond = select i1 %cmp3, i32 %a1, i32 %a2
130 ret i32 %cond
131
132; CHECK-LABEL: @testi32sge
Tony Jiang8e8c4442017-01-16 20:12:26 +0000133; CHECK-NO-ISEL-LABEL: @testi32sge
Hal Finkela2cdbce2015-08-30 22:12:50 +0000134; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
135; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
136; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
137; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000138; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
139; CHECK-NO-ISEL: ori 3, 8, 0
140; CHECK-NO-ISEL-NEXT: blr
141; CHECK-NO-ISEL: [[TRUE]]
142; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
143; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000144; CHECK: blr
145}
146
147define signext i32 @testi32uge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
148entry:
149 %cmp1 = icmp eq i32 %c3, %c4
150 %cmp3tmp = icmp eq i32 %c1, %c2
151 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
152 %cond = select i1 %cmp3, i32 %a1, i32 %a2
153 ret i32 %cond
154
155; CHECK-LABEL: @testi32uge
Tony Jiang8e8c4442017-01-16 20:12:26 +0000156; CHECK-NO-ISEL-LABEL: @testi32uge
Hal Finkela2cdbce2015-08-30 22:12:50 +0000157; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
158; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
159; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
160; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000161; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
162; CHECK-NO-ISEL: ori 3, 8, 0
163; CHECK-NO-ISEL-NEXT: blr
164; CHECK-NO-ISEL: [[TRUE]]
165; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
166; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000167; CHECK: blr
168}
169
170define signext i32 @testi32sgt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
171entry:
172 %cmp1 = icmp eq i32 %c3, %c4
173 %cmp3tmp = icmp eq i32 %c1, %c2
174 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
175 %cond = select i1 %cmp3, i32 %a1, i32 %a2
176 ret i32 %cond
177
178; CHECK-LABEL: @testi32sgt
Tony Jiang8e8c4442017-01-16 20:12:26 +0000179; CHECK-NO-ISEL-LABEL: @testi32sgt
Hal Finkela2cdbce2015-08-30 22:12:50 +0000180; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
181; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
182; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
183; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000184; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
185; CHECK-NO-ISEL: ori 3, 8, 0
186; CHECK-NO-ISEL-NEXT: blr
187; CHECK-NO-ISEL: [[TRUE]]
188; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
189; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000190; CHECK: blr
191}
192
193define signext i32 @testi32ugt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
194entry:
195 %cmp1 = icmp eq i32 %c3, %c4
196 %cmp3tmp = icmp eq i32 %c1, %c2
197 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
198 %cond = select i1 %cmp3, i32 %a1, i32 %a2
199 ret i32 %cond
200
201; CHECK-LABEL: @testi32ugt
Tony Jiang8e8c4442017-01-16 20:12:26 +0000202; CHECK-NO-ISEL-LABEL: @testi32ugt
Hal Finkela2cdbce2015-08-30 22:12:50 +0000203; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
204; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
205; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
206; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000207; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
208; CHECK-NO-ISEL: ori 3, 8, 0
209; CHECK-NO-ISEL-NEXT: blr
210; CHECK-NO-ISEL: [[TRUE]]
211; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
212; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000213; CHECK: blr
214}
215
216define signext i32 @testi32ne(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
217entry:
218 %cmp1 = icmp eq i32 %c3, %c4
219 %cmp3tmp = icmp eq i32 %c1, %c2
220 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
221 %cond = select i1 %cmp3, i32 %a1, i32 %a2
222 ret i32 %cond
223
224; CHECK-LABEL: @testi32ne
Tony Jiang8e8c4442017-01-16 20:12:26 +0000225; CHECK-NO-ISEL-LABEL: @testi32ne
Hal Finkela2cdbce2015-08-30 22:12:50 +0000226; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
227; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
228; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
229; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000230; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
231; CHECK-NO-ISEL: ori 3, 8, 0
232; CHECK-NO-ISEL-NEXT: blr
233; CHECK-NO-ISEL: [[TRUE]]
234; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
235; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000236; CHECK: blr
237}
238
239define i64 @testi64slt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
240entry:
241 %cmp1 = icmp eq i64 %c3, %c4
242 %cmp3tmp = icmp eq i64 %c1, %c2
243 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
244 %cond = select i1 %cmp3, i64 %a1, i64 %a2
245 ret i64 %cond
246
247; CHECK-LABEL: @testi64slt
Tony Jiang8e8c4442017-01-16 20:12:26 +0000248; CHECK-NO-ISEL-LABEL: @testi64slt
Hal Finkela2cdbce2015-08-30 22:12:50 +0000249; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
250; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
251; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
252; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000253; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
254; CHECK-NO-ISEL: ori 3, 8, 0
255; CHECK-NO-ISEL-NEXT: blr
256; CHECK-NO-ISEL: [[TRUE]]
257; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
258; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000259; CHECK: blr
260}
261
262define i64 @testi64ult(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
263entry:
264 %cmp1 = icmp eq i64 %c3, %c4
265 %cmp3tmp = icmp eq i64 %c1, %c2
266 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
267 %cond = select i1 %cmp3, i64 %a1, i64 %a2
268 ret i64 %cond
269
270; CHECK-LABEL: @testi64ult
Tony Jiang8e8c4442017-01-16 20:12:26 +0000271; CHECK-NO-ISEL-LABEL: @testi64ult
Hal Finkela2cdbce2015-08-30 22:12:50 +0000272; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
273; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
274; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
275; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000276; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
277; CHECK-NO-ISEL: ori 3, 8, 0
278; CHECK-NO-ISEL-NEXT: blr
279; CHECK-NO-ISEL: [[TRUE]]
280; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
281; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000282; CHECK: blr
283}
284
285define i64 @testi64sle(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
286entry:
287 %cmp1 = icmp eq i64 %c3, %c4
288 %cmp3tmp = icmp eq i64 %c1, %c2
289 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
290 %cond = select i1 %cmp3, i64 %a1, i64 %a2
291 ret i64 %cond
292
293; CHECK-LABEL: @testi64sle
Tony Jiang8e8c4442017-01-16 20:12:26 +0000294; CHECK-NO-ISEL-LABEL: @testi64sle
Hal Finkela2cdbce2015-08-30 22:12:50 +0000295; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
296; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
297; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
298; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000299; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
300; CHECK-NO-ISEL: ori 3, 8, 0
301; CHECK-NO-ISEL-NEXT: blr
302; CHECK-NO-ISEL: [[TRUE]]
303; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
304; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000305; CHECK: blr
306}
307
308define i64 @testi64ule(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
309entry:
310 %cmp1 = icmp eq i64 %c3, %c4
311 %cmp3tmp = icmp eq i64 %c1, %c2
312 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
313 %cond = select i1 %cmp3, i64 %a1, i64 %a2
314 ret i64 %cond
315
316; CHECK-LABEL: @testi64ule
Tony Jiang8e8c4442017-01-16 20:12:26 +0000317; CHECK-NO-ISEL-LABEL: @testi64ule
Hal Finkela2cdbce2015-08-30 22:12:50 +0000318; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
319; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
320; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
321; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000322; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
323; CHECK-NO-ISEL: ori 3, 8, 0
324; CHECK-NO-ISEL-NEXT: blr
325; CHECK-NO-ISEL: [[TRUE]]
326; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
327; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000328; CHECK: blr
329}
330
331define i64 @testi64eq(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
332entry:
333 %cmp1 = icmp eq i64 %c3, %c4
334 %cmp3tmp = icmp eq i64 %c1, %c2
335 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
336 %cond = select i1 %cmp3, i64 %a1, i64 %a2
337 ret i64 %cond
338
339; CHECK-LABEL: @testi64eq
Tony Jiang8e8c4442017-01-16 20:12:26 +0000340; CHECK-NO-ISEL-LABEL: @testi64eq
Hal Finkela2cdbce2015-08-30 22:12:50 +0000341; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
342; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
343; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
344; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000345; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
346; CHECK-NO-ISEL: ori 3, 8, 0
347; CHECK-NO-ISEL-NEXT: blr
348; CHECK-NO-ISEL: [[TRUE]]
349; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
350; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000351; CHECK: blr
352}
353
354define i64 @testi64sge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
355entry:
356 %cmp1 = icmp eq i64 %c3, %c4
357 %cmp3tmp = icmp eq i64 %c1, %c2
358 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
359 %cond = select i1 %cmp3, i64 %a1, i64 %a2
360 ret i64 %cond
361
362; CHECK-LABEL: @testi64sge
Tony Jiang8e8c4442017-01-16 20:12:26 +0000363; CHECK-NO-ISEL-LABEL: @testi64sge
Hal Finkela2cdbce2015-08-30 22:12:50 +0000364; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
365; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
366; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
367; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000368; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
369; CHECK-NO-ISEL: ori 3, 8, 0
370; CHECK-NO-ISEL-NEXT: blr
371; CHECK-NO-ISEL: [[TRUE]]
372; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
373; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000374; CHECK: blr
375}
376
377define i64 @testi64uge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
378entry:
379 %cmp1 = icmp eq i64 %c3, %c4
380 %cmp3tmp = icmp eq i64 %c1, %c2
381 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
382 %cond = select i1 %cmp3, i64 %a1, i64 %a2
383 ret i64 %cond
384
385; CHECK-LABEL: @testi64uge
Tony Jiang8e8c4442017-01-16 20:12:26 +0000386; CHECK-NO-ISEL-LABEL: @testi64uge
Hal Finkela2cdbce2015-08-30 22:12:50 +0000387; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
388; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
389; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
390; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000391; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
392; CHECK-NO-ISEL: ori 3, 8, 0
393; CHECK-NO-ISEL-NEXT: blr
394; CHECK-NO-ISEL: [[TRUE]]
395; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
396; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000397; CHECK: blr
398}
399
400define i64 @testi64sgt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
401entry:
402 %cmp1 = icmp eq i64 %c3, %c4
403 %cmp3tmp = icmp eq i64 %c1, %c2
404 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
405 %cond = select i1 %cmp3, i64 %a1, i64 %a2
406 ret i64 %cond
407
408; CHECK-LABEL: @testi64sgt
Tony Jiang8e8c4442017-01-16 20:12:26 +0000409; CHECK-NO-ISEL-LABEL: @testi64sgt
Hal Finkela2cdbce2015-08-30 22:12:50 +0000410; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
411; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
412; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
413; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000414; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
415; CHECK-NO-ISEL: ori 3, 8, 0
416; CHECK-NO-ISEL-NEXT: blr
417; CHECK-NO-ISEL: [[TRUE]]
418; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
419; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000420; CHECK: blr
421}
422
423define i64 @testi64ugt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
424entry:
425 %cmp1 = icmp eq i64 %c3, %c4
426 %cmp3tmp = icmp eq i64 %c1, %c2
427 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
428 %cond = select i1 %cmp3, i64 %a1, i64 %a2
429 ret i64 %cond
430
431; CHECK-LABEL: @testi64ugt
Tony Jiang8e8c4442017-01-16 20:12:26 +0000432; CHECK-NO-ISEL-LABEL: @testi64ugt
Hal Finkela2cdbce2015-08-30 22:12:50 +0000433; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
434; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
435; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
436; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000437; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
438; CHECK-NO-ISEL: ori 3, 8, 0
439; CHECK-NO-ISEL-NEXT: blr
440; CHECK-NO-ISEL: [[TRUE]]
441; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
442; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000443; CHECK: blr
444}
445
446define i64 @testi64ne(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
447entry:
448 %cmp1 = icmp eq i64 %c3, %c4
449 %cmp3tmp = icmp eq i64 %c1, %c2
450 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
451 %cond = select i1 %cmp3, i64 %a1, i64 %a2
452 ret i64 %cond
453
454; CHECK-LABEL: @testi64ne
Tony Jiang8e8c4442017-01-16 20:12:26 +0000455; CHECK-NO-ISEL-LABEL: @testi64ne
Hal Finkela2cdbce2015-08-30 22:12:50 +0000456; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
457; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
458; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
459; CHECK: isel 3, 7, 8, [[REG1]]
Tony Jiang8e8c4442017-01-16 20:12:26 +0000460; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
461; CHECK-NO-ISEL: ori 3, 8, 0
462; CHECK-NO-ISEL-NEXT: blr
463; CHECK-NO-ISEL: [[TRUE]]
464; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
465; CHECK-NO-ISEL-NEXT: blr
Hal Finkela2cdbce2015-08-30 22:12:50 +0000466; CHECK: blr
467}
468
469define float @testfloatslt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
470entry:
471 %cmp1 = fcmp oeq float %c3, %c4
472 %cmp3tmp = fcmp oeq float %c1, %c2
473 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
474 %cond = select i1 %cmp3, float %a1, float %a2
475 ret float %cond
476
477; CHECK-LABEL: @testfloatslt
478; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
479; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
480; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
481; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
482; CHECK: fmr 5, 6
483; CHECK: .LBB[[BB]]:
484; CHECK: fmr 1, 5
485; CHECK: blr
486}
487
488define float @testfloatult(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
489entry:
490 %cmp1 = fcmp oeq float %c3, %c4
491 %cmp3tmp = fcmp oeq float %c1, %c2
492 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
493 %cond = select i1 %cmp3, float %a1, float %a2
494 ret float %cond
495
496; CHECK-LABEL: @testfloatult
497; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
498; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
499; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
500; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
501; CHECK: fmr 5, 6
502; CHECK: .LBB[[BB]]:
503; CHECK: fmr 1, 5
504; CHECK: blr
505}
506
507define float @testfloatsle(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
508entry:
509 %cmp1 = fcmp oeq float %c3, %c4
510 %cmp3tmp = fcmp oeq float %c1, %c2
511 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
512 %cond = select i1 %cmp3, float %a1, float %a2
513 ret float %cond
514
515; CHECK-LABEL: @testfloatsle
516; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
517; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
518; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
519; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
520; CHECK: fmr 5, 6
521; CHECK: .LBB[[BB]]:
522; CHECK: fmr 1, 5
523; CHECK: blr
524}
525
526define float @testfloatule(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
527entry:
528 %cmp1 = fcmp oeq float %c3, %c4
529 %cmp3tmp = fcmp oeq float %c1, %c2
530 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
531 %cond = select i1 %cmp3, float %a1, float %a2
532 ret float %cond
533
534; CHECK-LABEL: @testfloatule
535; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
536; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
537; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
538; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
539; CHECK: fmr 5, 6
540; CHECK: .LBB[[BB]]:
541; CHECK: fmr 1, 5
542; CHECK: blr
543}
544
545define float @testfloateq(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
546entry:
547 %cmp1 = fcmp oeq float %c3, %c4
548 %cmp3tmp = fcmp oeq float %c1, %c2
549 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
550 %cond = select i1 %cmp3, float %a1, float %a2
551 ret float %cond
552
553; CHECK-LABEL: @testfloateq
554; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
555; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
556; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
557; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
558; CHECK: fmr 5, 6
559; CHECK: .LBB[[BB]]:
560; CHECK: fmr 1, 5
561; CHECK: blr
562}
563
564define float @testfloatsge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
565entry:
566 %cmp1 = fcmp oeq float %c3, %c4
567 %cmp3tmp = fcmp oeq float %c1, %c2
568 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
569 %cond = select i1 %cmp3, float %a1, float %a2
570 ret float %cond
571
572; CHECK-LABEL: @testfloatsge
573; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
574; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
575; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
576; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
577; CHECK: fmr 5, 6
578; CHECK: .LBB[[BB]]:
579; CHECK: fmr 1, 5
580; CHECK: blr
581}
582
583define float @testfloatuge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
584entry:
585 %cmp1 = fcmp oeq float %c3, %c4
586 %cmp3tmp = fcmp oeq float %c1, %c2
587 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
588 %cond = select i1 %cmp3, float %a1, float %a2
589 ret float %cond
590
591; CHECK-LABEL: @testfloatuge
592; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
593; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
594; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
595; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
596; CHECK: fmr 5, 6
597; CHECK: .LBB[[BB]]:
598; CHECK: fmr 1, 5
599; CHECK: blr
600}
601
602define float @testfloatsgt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
603entry:
604 %cmp1 = fcmp oeq float %c3, %c4
605 %cmp3tmp = fcmp oeq float %c1, %c2
606 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
607 %cond = select i1 %cmp3, float %a1, float %a2
608 ret float %cond
609
610; CHECK-LABEL: @testfloatsgt
611; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
612; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
613; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
614; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
615; CHECK: fmr 5, 6
616; CHECK: .LBB[[BB]]:
617; CHECK: fmr 1, 5
618; CHECK: blr
619}
620
621define float @testfloatugt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
622entry:
623 %cmp1 = fcmp oeq float %c3, %c4
624 %cmp3tmp = fcmp oeq float %c1, %c2
625 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
626 %cond = select i1 %cmp3, float %a1, float %a2
627 ret float %cond
628
629; CHECK-LABEL: @testfloatugt
630; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
631; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
632; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
633; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
634; CHECK: fmr 5, 6
635; CHECK: .LBB[[BB]]:
636; CHECK: fmr 1, 5
637; CHECK: blr
638}
639
640define float @testfloatne(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
641entry:
642 %cmp1 = fcmp oeq float %c3, %c4
643 %cmp3tmp = fcmp oeq float %c1, %c2
644 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
645 %cond = select i1 %cmp3, float %a1, float %a2
646 ret float %cond
647
648; CHECK-LABEL: @testfloatne
649; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
650; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
651; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
652; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
653; CHECK: fmr 5, 6
654; CHECK: .LBB[[BB]]:
655; CHECK: fmr 1, 5
656; CHECK: blr
657}
658
659define double @testdoubleslt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
660entry:
661 %cmp1 = fcmp oeq double %c3, %c4
662 %cmp3tmp = fcmp oeq double %c1, %c2
663 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
664 %cond = select i1 %cmp3, double %a1, double %a2
665 ret double %cond
666
667; CHECK-LABEL: @testdoubleslt
668; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
669; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
670; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
671; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
672; CHECK: fmr 5, 6
673; CHECK: .LBB[[BB]]:
674; CHECK: fmr 1, 5
675; CHECK: blr
676}
677
678define double @testdoubleult(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
679entry:
680 %cmp1 = fcmp oeq double %c3, %c4
681 %cmp3tmp = fcmp oeq double %c1, %c2
682 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
683 %cond = select i1 %cmp3, double %a1, double %a2
684 ret double %cond
685
686; CHECK-LABEL: @testdoubleult
687; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
688; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
689; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
690; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
691; CHECK: fmr 5, 6
692; CHECK: .LBB[[BB]]:
693; CHECK: fmr 1, 5
694; CHECK: blr
695}
696
697define double @testdoublesle(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
698entry:
699 %cmp1 = fcmp oeq double %c3, %c4
700 %cmp3tmp = fcmp oeq double %c1, %c2
701 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
702 %cond = select i1 %cmp3, double %a1, double %a2
703 ret double %cond
704
705; CHECK-LABEL: @testdoublesle
706; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
707; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
708; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
709; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
710; CHECK: fmr 5, 6
711; CHECK: .LBB[[BB]]:
712; CHECK: fmr 1, 5
713; CHECK: blr
714}
715
716define double @testdoubleule(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
717entry:
718 %cmp1 = fcmp oeq double %c3, %c4
719 %cmp3tmp = fcmp oeq double %c1, %c2
720 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
721 %cond = select i1 %cmp3, double %a1, double %a2
722 ret double %cond
723
724; CHECK-LABEL: @testdoubleule
725; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
726; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
727; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
728; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
729; CHECK: fmr 5, 6
730; CHECK: .LBB[[BB]]:
731; CHECK: fmr 1, 5
732; CHECK: blr
733}
734
735define double @testdoubleeq(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
736entry:
737 %cmp1 = fcmp oeq double %c3, %c4
738 %cmp3tmp = fcmp oeq double %c1, %c2
739 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
740 %cond = select i1 %cmp3, double %a1, double %a2
741 ret double %cond
742
743; CHECK-LABEL: @testdoubleeq
744; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
745; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
746; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
747; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
748; CHECK: fmr 5, 6
749; CHECK: .LBB[[BB]]:
750; CHECK: fmr 1, 5
751; CHECK: blr
752}
753
754define double @testdoublesge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
755entry:
756 %cmp1 = fcmp oeq double %c3, %c4
757 %cmp3tmp = fcmp oeq double %c1, %c2
758 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
759 %cond = select i1 %cmp3, double %a1, double %a2
760 ret double %cond
761
762; CHECK-LABEL: @testdoublesge
763; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
764; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
765; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
766; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
767; CHECK: fmr 5, 6
768; CHECK: .LBB[[BB]]:
769; CHECK: fmr 1, 5
770; CHECK: blr
771}
772
773define double @testdoubleuge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
774entry:
775 %cmp1 = fcmp oeq double %c3, %c4
776 %cmp3tmp = fcmp oeq double %c1, %c2
777 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
778 %cond = select i1 %cmp3, double %a1, double %a2
779 ret double %cond
780
781; CHECK-LABEL: @testdoubleuge
782; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
783; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
784; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
785; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
786; CHECK: fmr 5, 6
787; CHECK: .LBB[[BB]]:
788; CHECK: fmr 1, 5
789; CHECK: blr
790}
791
792define double @testdoublesgt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
793entry:
794 %cmp1 = fcmp oeq double %c3, %c4
795 %cmp3tmp = fcmp oeq double %c1, %c2
796 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
797 %cond = select i1 %cmp3, double %a1, double %a2
798 ret double %cond
799
800; CHECK-LABEL: @testdoublesgt
801; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
802; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
803; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
804; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
805; CHECK: fmr 5, 6
806; CHECK: .LBB[[BB]]:
807; CHECK: fmr 1, 5
808; CHECK: blr
809}
810
811define double @testdoubleugt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
812entry:
813 %cmp1 = fcmp oeq double %c3, %c4
814 %cmp3tmp = fcmp oeq double %c1, %c2
815 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
816 %cond = select i1 %cmp3, double %a1, double %a2
817 ret double %cond
818
819; CHECK-LABEL: @testdoubleugt
820; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
821; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
822; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
823; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
824; CHECK: fmr 5, 6
825; CHECK: .LBB[[BB]]:
826; CHECK: fmr 1, 5
827; CHECK: blr
828}
829
830define double @testdoublene(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
831entry:
832 %cmp1 = fcmp oeq double %c3, %c4
833 %cmp3tmp = fcmp oeq double %c1, %c2
834 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
835 %cond = select i1 %cmp3, double %a1, double %a2
836 ret double %cond
837
838; CHECK-LABEL: @testdoublene
839; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
840; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
841; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
842; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
843; CHECK: fmr 5, 6
844; CHECK: .LBB[[BB]]:
845; CHECK: fmr 1, 5
846; CHECK: blr
847}
848
849define <4 x float> @testv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
850entry:
851 %cmp1 = fcmp oeq float %c3, %c4
852 %cmp3tmp = fcmp oeq float %c1, %c2
853 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
854 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
855 ret <4 x float> %cond
856
Hal Finkela2cdbce2015-08-30 22:12:50 +0000857; CHECK-LABEL: @testv4floatslt
858; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
859; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000860; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
861; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000862; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000863; CHECK: blr
864}
865
866define <4 x float> @testv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
867entry:
868 %cmp1 = fcmp oeq float %c3, %c4
869 %cmp3tmp = fcmp oeq float %c1, %c2
870 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
871 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
872 ret <4 x float> %cond
873
874; CHECK-LABEL: @testv4floatult
875; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
876; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000877; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
878; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000879; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000880; CHECK: blr
881}
882
883define <4 x float> @testv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
884entry:
885 %cmp1 = fcmp oeq float %c3, %c4
886 %cmp3tmp = fcmp oeq float %c1, %c2
887 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
888 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
889 ret <4 x float> %cond
890
891; CHECK-LABEL: @testv4floatsle
892; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
893; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000894; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
895; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000896; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000897; CHECK: blr
898}
899
900define <4 x float> @testv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
901entry:
902 %cmp1 = fcmp oeq float %c3, %c4
903 %cmp3tmp = fcmp oeq float %c1, %c2
904 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
905 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
906 ret <4 x float> %cond
907
908; CHECK-LABEL: @testv4floatule
909; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
910; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000911; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
912; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000913; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000914; CHECK: blr
915}
916
917define <4 x float> @testv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
918entry:
919 %cmp1 = fcmp oeq float %c3, %c4
920 %cmp3tmp = fcmp oeq float %c1, %c2
921 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
922 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
923 ret <4 x float> %cond
924
925; CHECK-LABEL: @testv4floateq
926; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
927; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000928; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
929; CHECK: bc 12, [[REG1]], .LBB[[BB1:[0-9_]+]]
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000930; CHECK: vmr 3, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000931; CHECK: .LBB[[BB1]]
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000932; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000933; CHECK: blr
934}
935
936define <4 x float> @testv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
937entry:
938 %cmp1 = fcmp oeq float %c3, %c4
939 %cmp3tmp = fcmp oeq float %c1, %c2
940 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
941 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
942 ret <4 x float> %cond
943
944; CHECK-LABEL: @testv4floatsge
945; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
946; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000947; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
948; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000949; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000950; CHECK: blr
951}
952
953define <4 x float> @testv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
954entry:
955 %cmp1 = fcmp oeq float %c3, %c4
956 %cmp3tmp = fcmp oeq float %c1, %c2
957 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
958 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
959 ret <4 x float> %cond
960
961; CHECK-LABEL: @testv4floatuge
962; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
963; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000964; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
965; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000966; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000967; CHECK: blr
968}
969
970define <4 x float> @testv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
971entry:
972 %cmp1 = fcmp oeq float %c3, %c4
973 %cmp3tmp = fcmp oeq float %c1, %c2
974 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
975 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
976 ret <4 x float> %cond
977
978; CHECK-LABEL: @testv4floatsgt
979; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
980; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000981; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
982; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +0000983; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +0000984; CHECK: blr
985}
986
987define <4 x float> @testv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
988entry:
989 %cmp1 = fcmp oeq float %c3, %c4
990 %cmp3tmp = fcmp oeq float %c1, %c2
991 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
992 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
993 ret <4 x float> %cond
994
995; CHECK-LABEL: @testv4floatugt
996; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
997; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +0000998; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
999; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001000; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001001; CHECK: blr
1002}
1003
1004define <4 x float> @testv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
1005entry:
1006 %cmp1 = fcmp oeq float %c3, %c4
1007 %cmp3tmp = fcmp oeq float %c1, %c2
1008 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1009 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1010 ret <4 x float> %cond
1011
1012; CHECK-LABEL: @testv4floatne
1013; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1014; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Nemanja Ivanovic11049f82016-10-04 06:59:23 +00001015; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1016; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001017; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001018; CHECK: blr
1019}
1020
1021define ppc_fp128 @testppc_fp128eq(ppc_fp128 %c1, ppc_fp128 %c2, ppc_fp128 %c3, ppc_fp128 %c4, ppc_fp128 %a1, ppc_fp128 %a2) #0 {
1022entry:
1023 %cmp1 = fcmp oeq ppc_fp128 %c3, %c4
1024 %cmp3tmp = fcmp oeq ppc_fp128 %c1, %c2
1025 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1026 %cond = select i1 %cmp3, ppc_fp128 %a1, ppc_fp128 %a2
1027 ret ppc_fp128 %cond
1028
1029; FIXME: Because of the way that the late SELECT_* pseudo-instruction expansion
1030; works, we end up with two blocks with the same predicate. These could be
1031; combined.
1032
1033; CHECK-LABEL: @testppc_fp128eq
1034; CHECK-DAG: fcmpu {{[0-9]+}}, 6, 8
1035; CHECK-DAG: fcmpu {{[0-9]+}}, 5, 7
1036; CHECK-DAG: fcmpu {{[0-9]+}}, 2, 4
1037; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 3
1038; CHECK: crand [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1039; CHECK: crand [[REG2:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
Ayman Musa0c2da882016-09-13 09:12:45 +00001040; CHECK: crxor [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Hal Finkela2cdbce2015-08-30 22:12:50 +00001041; CHECK: bc 12, [[REG3]], .LBB[[BB1:[0-9_]+]]
Ayman Musa0c2da882016-09-13 09:12:45 +00001042; CHECK: fmr 11, 9
Hal Finkela2cdbce2015-08-30 22:12:50 +00001043; CHECK: .LBB[[BB1]]:
1044; CHECK: bc 12, [[REG3]], .LBB[[BB2:[0-9_]+]]
Ayman Musa0c2da882016-09-13 09:12:45 +00001045; CHECK: fmr 12, 10
Hal Finkela2cdbce2015-08-30 22:12:50 +00001046; CHECK: .LBB[[BB2]]:
Ayman Musa0c2da882016-09-13 09:12:45 +00001047; CHECK-DAG: fmr 1, 11
1048; CHECK-DAG: fmr 2, 12
Hal Finkela2cdbce2015-08-30 22:12:50 +00001049; CHECK: blr
1050}
1051
1052define <2 x double> @testv2doubleslt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1053entry:
1054 %cmp1 = fcmp oeq float %c3, %c4
1055 %cmp3tmp = fcmp oeq float %c1, %c2
1056 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1057 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1058 ret <2 x double> %cond
1059
1060; CHECK-LABEL: @testv2doubleslt
1061; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1062; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1063; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1064; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001065; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001066; CHECK: blr
1067}
1068
1069define <2 x double> @testv2doubleult(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1070entry:
1071 %cmp1 = fcmp oeq float %c3, %c4
1072 %cmp3tmp = fcmp oeq float %c1, %c2
1073 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1074 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1075 ret <2 x double> %cond
1076
1077; CHECK-LABEL: @testv2doubleult
1078; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1079; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1080; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1081; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001082; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001083; CHECK: blr
1084}
1085
1086define <2 x double> @testv2doublesle(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1087entry:
1088 %cmp1 = fcmp oeq float %c3, %c4
1089 %cmp3tmp = fcmp oeq float %c1, %c2
1090 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1091 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1092 ret <2 x double> %cond
1093
1094; CHECK-LABEL: @testv2doublesle
1095; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1096; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1097; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1098; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001099; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001100; CHECK: blr
1101}
1102
1103define <2 x double> @testv2doubleule(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1104entry:
1105 %cmp1 = fcmp oeq float %c3, %c4
1106 %cmp3tmp = fcmp oeq float %c1, %c2
1107 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1108 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1109 ret <2 x double> %cond
1110
1111; CHECK-LABEL: @testv2doubleule
1112; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1113; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1114; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1115; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001116; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001117; CHECK: blr
1118}
1119
1120define <2 x double> @testv2doubleeq(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1121entry:
1122 %cmp1 = fcmp oeq float %c3, %c4
1123 %cmp3tmp = fcmp oeq float %c1, %c2
1124 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1125 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1126 ret <2 x double> %cond
1127
1128; CHECK-LABEL: @testv2doubleeq
1129; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1130; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
Ayman Musa0c2da882016-09-13 09:12:45 +00001131; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1132; CHECK: bc 12, [[REG1]], .LBB[[BB55:[0-9_]+]]
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001133; CHECK: vmr 3, 2
Ayman Musa0c2da882016-09-13 09:12:45 +00001134; CHECK: .LBB[[BB55]]
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001135; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001136; CHECK: blr
1137}
1138
1139define <2 x double> @testv2doublesge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1140entry:
1141 %cmp1 = fcmp oeq float %c3, %c4
1142 %cmp3tmp = fcmp oeq float %c1, %c2
1143 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1144 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1145 ret <2 x double> %cond
1146
1147; CHECK-LABEL: @testv2doublesge
1148; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1149; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1150; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1151; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001152; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001153; CHECK: blr
1154}
1155
1156define <2 x double> @testv2doubleuge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1157entry:
1158 %cmp1 = fcmp oeq float %c3, %c4
1159 %cmp3tmp = fcmp oeq float %c1, %c2
1160 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1161 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1162 ret <2 x double> %cond
1163
1164; CHECK-LABEL: @testv2doubleuge
1165; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1166; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1167; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1168; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001169; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001170; CHECK: blr
1171}
1172
1173define <2 x double> @testv2doublesgt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1174entry:
1175 %cmp1 = fcmp oeq float %c3, %c4
1176 %cmp3tmp = fcmp oeq float %c1, %c2
1177 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1178 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1179 ret <2 x double> %cond
1180
1181; CHECK-LABEL: @testv2doublesgt
1182; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1183; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1184; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1185; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001186; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001187; CHECK: blr
1188}
1189
1190define <2 x double> @testv2doubleugt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1191entry:
1192 %cmp1 = fcmp oeq float %c3, %c4
1193 %cmp3tmp = fcmp oeq float %c1, %c2
1194 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1195 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1196 ret <2 x double> %cond
1197
1198; CHECK-LABEL: @testv2doubleugt
1199; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1200; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1201; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1202; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001203; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001204; CHECK: blr
1205}
1206
1207define <2 x double> @testv2doublene(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
1208entry:
1209 %cmp1 = fcmp oeq float %c3, %c4
1210 %cmp3tmp = fcmp oeq float %c1, %c2
1211 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1212 %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
1213 ret <2 x double> %cond
1214
1215; CHECK-LABEL: @testv2doublene
1216; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1217; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1218; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1219; CHECK: bclr 12, [[REG1]], 0
Nemanja Ivanovic2f2a6ab2017-01-31 13:43:11 +00001220; CHECK: vmr 2, 3
Hal Finkela2cdbce2015-08-30 22:12:50 +00001221; CHECK: blr
1222}
1223
1224define <4 x double> @testqv4doubleslt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1225entry:
1226 %cmp1 = fcmp oeq float %c3, %c4
1227 %cmp3tmp = fcmp oeq float %c1, %c2
1228 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1229 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1230 ret <4 x double> %cond
1231
1232; CHECK-LABEL: @testqv4doubleslt
1233; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1234; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1235; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1236; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1237; CHECK: qvfmr 5, 6
1238; CHECK: .LBB[[BB]]:
1239; CHECK: qvfmr 1, 5
1240; CHECK: blr
1241}
1242
1243define <4 x double> @testqv4doubleult(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1244entry:
1245 %cmp1 = fcmp oeq float %c3, %c4
1246 %cmp3tmp = fcmp oeq float %c1, %c2
1247 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1248 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1249 ret <4 x double> %cond
1250
1251; CHECK-LABEL: @testqv4doubleult
1252; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1253; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1254; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1255; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1256; CHECK: qvfmr 5, 6
1257; CHECK: .LBB[[BB]]:
1258; CHECK: qvfmr 1, 5
1259; CHECK: blr
1260}
1261
1262define <4 x double> @testqv4doublesle(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1263entry:
1264 %cmp1 = fcmp oeq float %c3, %c4
1265 %cmp3tmp = fcmp oeq float %c1, %c2
1266 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1267 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1268 ret <4 x double> %cond
1269
1270; CHECK-LABEL: @testqv4doublesle
1271; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1272; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1273; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1274; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1275; CHECK: qvfmr 5, 6
1276; CHECK: .LBB[[BB]]:
1277; CHECK: qvfmr 1, 5
1278; CHECK: blr
1279}
1280
1281define <4 x double> @testqv4doubleule(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1282entry:
1283 %cmp1 = fcmp oeq float %c3, %c4
1284 %cmp3tmp = fcmp oeq float %c1, %c2
1285 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1286 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1287 ret <4 x double> %cond
1288
1289; CHECK-LABEL: @testqv4doubleule
1290; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1291; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1292; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1293; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1294; CHECK: qvfmr 5, 6
1295; CHECK: .LBB[[BB]]:
1296; CHECK: qvfmr 1, 5
1297; CHECK: blr
1298}
1299
1300define <4 x double> @testqv4doubleeq(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1301entry:
1302 %cmp1 = fcmp oeq float %c3, %c4
1303 %cmp3tmp = fcmp oeq float %c1, %c2
1304 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1305 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1306 ret <4 x double> %cond
1307
1308; CHECK-LABEL: @testqv4doubleeq
1309; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1310; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1311; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1312; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1313; CHECK: qvfmr 5, 6
1314; CHECK: .LBB[[BB]]:
1315; CHECK: qvfmr 1, 5
1316; CHECK: blr
1317}
1318
1319define <4 x double> @testqv4doublesge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1320entry:
1321 %cmp1 = fcmp oeq float %c3, %c4
1322 %cmp3tmp = fcmp oeq float %c1, %c2
1323 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1324 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1325 ret <4 x double> %cond
1326
1327; CHECK-LABEL: @testqv4doublesge
1328; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1329; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1330; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1331; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1332; CHECK: qvfmr 5, 6
1333; CHECK: .LBB[[BB]]:
1334; CHECK: qvfmr 1, 5
1335; CHECK: blr
1336}
1337
1338define <4 x double> @testqv4doubleuge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1339entry:
1340 %cmp1 = fcmp oeq float %c3, %c4
1341 %cmp3tmp = fcmp oeq float %c1, %c2
1342 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1343 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1344 ret <4 x double> %cond
1345
1346; CHECK-LABEL: @testqv4doubleuge
1347; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1348; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1349; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1350; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1351; CHECK: qvfmr 5, 6
1352; CHECK: .LBB[[BB]]:
1353; CHECK: qvfmr 1, 5
1354; CHECK: blr
1355}
1356
1357define <4 x double> @testqv4doublesgt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1358entry:
1359 %cmp1 = fcmp oeq float %c3, %c4
1360 %cmp3tmp = fcmp oeq float %c1, %c2
1361 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1362 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1363 ret <4 x double> %cond
1364
1365; CHECK-LABEL: @testqv4doublesgt
1366; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1367; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1368; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1369; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1370; CHECK: qvfmr 5, 6
1371; CHECK: .LBB[[BB]]:
1372; CHECK: qvfmr 1, 5
1373; CHECK: blr
1374}
1375
1376define <4 x double> @testqv4doubleugt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1377entry:
1378 %cmp1 = fcmp oeq float %c3, %c4
1379 %cmp3tmp = fcmp oeq float %c1, %c2
1380 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1381 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1382 ret <4 x double> %cond
1383
1384; CHECK-LABEL: @testqv4doubleugt
1385; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1386; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1387; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1388; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1389; CHECK: qvfmr 5, 6
1390; CHECK: .LBB[[BB]]:
1391; CHECK: qvfmr 1, 5
1392; CHECK: blr
1393}
1394
1395define <4 x double> @testqv4doublene(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
1396entry:
1397 %cmp1 = fcmp oeq float %c3, %c4
1398 %cmp3tmp = fcmp oeq float %c1, %c2
1399 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1400 %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
1401 ret <4 x double> %cond
1402
1403; CHECK-LABEL: @testqv4doublene
1404; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1405; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1406; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1407; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1408; CHECK: qvfmr 5, 6
1409; CHECK: .LBB[[BB]]:
1410; CHECK: qvfmr 1, 5
1411; CHECK: blr
1412}
1413
1414define <4 x float> @testqv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1415entry:
1416 %cmp1 = fcmp oeq float %c3, %c4
1417 %cmp3tmp = fcmp oeq float %c1, %c2
1418 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1419 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1420 ret <4 x float> %cond
1421
1422; CHECK-LABEL: @testqv4floatslt
1423; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1424; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1425; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1426; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1427; CHECK: qvfmr 5, 6
1428; CHECK: .LBB[[BB]]:
1429; CHECK: qvfmr 1, 5
1430; CHECK: blr
1431}
1432
1433define <4 x float> @testqv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1434entry:
1435 %cmp1 = fcmp oeq float %c3, %c4
1436 %cmp3tmp = fcmp oeq float %c1, %c2
1437 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1438 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1439 ret <4 x float> %cond
1440
1441; CHECK-LABEL: @testqv4floatult
1442; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1443; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1444; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1445; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1446; CHECK: qvfmr 5, 6
1447; CHECK: .LBB[[BB]]:
1448; CHECK: qvfmr 1, 5
1449; CHECK: blr
1450}
1451
1452define <4 x float> @testqv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1453entry:
1454 %cmp1 = fcmp oeq float %c3, %c4
1455 %cmp3tmp = fcmp oeq float %c1, %c2
1456 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1457 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1458 ret <4 x float> %cond
1459
1460; CHECK-LABEL: @testqv4floatsle
1461; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1462; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1463; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1464; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1465; CHECK: qvfmr 5, 6
1466; CHECK: .LBB[[BB]]:
1467; CHECK: qvfmr 1, 5
1468; CHECK: blr
1469}
1470
1471define <4 x float> @testqv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1472entry:
1473 %cmp1 = fcmp oeq float %c3, %c4
1474 %cmp3tmp = fcmp oeq float %c1, %c2
1475 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1476 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1477 ret <4 x float> %cond
1478
1479; CHECK-LABEL: @testqv4floatule
1480; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1481; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1482; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1483; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1484; CHECK: qvfmr 5, 6
1485; CHECK: .LBB[[BB]]:
1486; CHECK: qvfmr 1, 5
1487; CHECK: blr
1488}
1489
1490define <4 x float> @testqv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1491entry:
1492 %cmp1 = fcmp oeq float %c3, %c4
1493 %cmp3tmp = fcmp oeq float %c1, %c2
1494 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1495 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1496 ret <4 x float> %cond
1497
1498; CHECK-LABEL: @testqv4floateq
1499; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1500; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1501; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1502; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1503; CHECK: qvfmr 5, 6
1504; CHECK: .LBB[[BB]]:
1505; CHECK: qvfmr 1, 5
1506; CHECK: blr
1507}
1508
1509define <4 x float> @testqv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1510entry:
1511 %cmp1 = fcmp oeq float %c3, %c4
1512 %cmp3tmp = fcmp oeq float %c1, %c2
1513 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1514 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1515 ret <4 x float> %cond
1516
1517; CHECK-LABEL: @testqv4floatsge
1518; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1519; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1520; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1521; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1522; CHECK: qvfmr 5, 6
1523; CHECK: .LBB[[BB]]:
1524; CHECK: qvfmr 1, 5
1525; CHECK: blr
1526}
1527
1528define <4 x float> @testqv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1529entry:
1530 %cmp1 = fcmp oeq float %c3, %c4
1531 %cmp3tmp = fcmp oeq float %c1, %c2
1532 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1533 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1534 ret <4 x float> %cond
1535
1536; CHECK-LABEL: @testqv4floatuge
1537; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1538; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1539; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1540; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1541; CHECK: qvfmr 5, 6
1542; CHECK: .LBB[[BB]]:
1543; CHECK: qvfmr 1, 5
1544; CHECK: blr
1545}
1546
1547define <4 x float> @testqv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1548entry:
1549 %cmp1 = fcmp oeq float %c3, %c4
1550 %cmp3tmp = fcmp oeq float %c1, %c2
1551 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1552 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1553 ret <4 x float> %cond
1554
1555; CHECK-LABEL: @testqv4floatsgt
1556; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1557; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1558; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1559; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1560; CHECK: qvfmr 5, 6
1561; CHECK: .LBB[[BB]]:
1562; CHECK: qvfmr 1, 5
1563; CHECK: blr
1564}
1565
1566define <4 x float> @testqv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1567entry:
1568 %cmp1 = fcmp oeq float %c3, %c4
1569 %cmp3tmp = fcmp oeq float %c1, %c2
1570 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1571 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1572 ret <4 x float> %cond
1573
1574; CHECK-LABEL: @testqv4floatugt
1575; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1576; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1577; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1578; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1579; CHECK: qvfmr 5, 6
1580; CHECK: .LBB[[BB]]:
1581; CHECK: qvfmr 1, 5
1582; CHECK: blr
1583}
1584
1585define <4 x float> @testqv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
1586entry:
1587 %cmp1 = fcmp oeq float %c3, %c4
1588 %cmp3tmp = fcmp oeq float %c1, %c2
1589 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1590 %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
1591 ret <4 x float> %cond
1592
1593; CHECK-LABEL: @testqv4floatne
1594; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1595; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1596; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1597; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1598; CHECK: qvfmr 5, 6
1599; CHECK: .LBB[[BB]]:
1600; CHECK: qvfmr 1, 5
1601; CHECK: blr
1602}
1603
1604define <4 x i1> @testqv4i1slt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1605entry:
1606 %cmp1 = fcmp oeq float %c3, %c4
1607 %cmp3tmp = fcmp oeq float %c1, %c2
1608 %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
1609 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1610 ret <4 x i1> %cond
1611
1612; CHECK-LABEL: @testqv4i1slt
1613; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1614; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1615; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1616; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1617; CHECK: qvfmr 5, 6
1618; CHECK: .LBB[[BB]]:
1619; CHECK: qvfmr 1, 5
1620; CHECK: blr
1621}
1622
1623define <4 x i1> @testqv4i1ult(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1624entry:
1625 %cmp1 = fcmp oeq float %c3, %c4
1626 %cmp3tmp = fcmp oeq float %c1, %c2
1627 %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
1628 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1629 ret <4 x i1> %cond
1630
1631; CHECK-LABEL: @testqv4i1ult
1632; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1633; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1634; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1635; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1636; CHECK: qvfmr 5, 6
1637; CHECK: .LBB[[BB]]:
1638; CHECK: qvfmr 1, 5
1639; CHECK: blr
1640}
1641
1642define <4 x i1> @testqv4i1sle(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1643entry:
1644 %cmp1 = fcmp oeq float %c3, %c4
1645 %cmp3tmp = fcmp oeq float %c1, %c2
1646 %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
1647 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1648 ret <4 x i1> %cond
1649
1650; CHECK-LABEL: @testqv4i1sle
1651; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1652; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1653; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1654; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1655; CHECK: qvfmr 5, 6
1656; CHECK: .LBB[[BB]]:
1657; CHECK: qvfmr 1, 5
1658; CHECK: blr
1659}
1660
1661define <4 x i1> @testqv4i1ule(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1662entry:
1663 %cmp1 = fcmp oeq float %c3, %c4
1664 %cmp3tmp = fcmp oeq float %c1, %c2
1665 %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
1666 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1667 ret <4 x i1> %cond
1668
1669; CHECK-LABEL: @testqv4i1ule
1670; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1671; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1672; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1673; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1674; CHECK: qvfmr 5, 6
1675; CHECK: .LBB[[BB]]:
1676; CHECK: qvfmr 1, 5
1677; CHECK: blr
1678}
1679
1680define <4 x i1> @testqv4i1eq(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1681entry:
1682 %cmp1 = fcmp oeq float %c3, %c4
1683 %cmp3tmp = fcmp oeq float %c1, %c2
1684 %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
1685 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1686 ret <4 x i1> %cond
1687
1688; CHECK-LABEL: @testqv4i1eq
1689; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1690; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1691; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1692; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1693; CHECK: qvfmr 5, 6
1694; CHECK: .LBB[[BB]]:
1695; CHECK: qvfmr 1, 5
1696; CHECK: blr
1697}
1698
1699define <4 x i1> @testqv4i1sge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1700entry:
1701 %cmp1 = fcmp oeq float %c3, %c4
1702 %cmp3tmp = fcmp oeq float %c1, %c2
1703 %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
1704 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1705 ret <4 x i1> %cond
1706
1707; CHECK-LABEL: @testqv4i1sge
1708; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1709; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1710; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1711; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1712; CHECK: qvfmr 5, 6
1713; CHECK: .LBB[[BB]]:
1714; CHECK: qvfmr 1, 5
1715; CHECK: blr
1716}
1717
1718define <4 x i1> @testqv4i1uge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1719entry:
1720 %cmp1 = fcmp oeq float %c3, %c4
1721 %cmp3tmp = fcmp oeq float %c1, %c2
1722 %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
1723 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1724 ret <4 x i1> %cond
1725
1726; CHECK-LABEL: @testqv4i1uge
1727; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1728; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1729; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1730; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1731; CHECK: qvfmr 5, 6
1732; CHECK: .LBB[[BB]]:
1733; CHECK: qvfmr 1, 5
1734; CHECK: blr
1735}
1736
1737define <4 x i1> @testqv4i1sgt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1738entry:
1739 %cmp1 = fcmp oeq float %c3, %c4
1740 %cmp3tmp = fcmp oeq float %c1, %c2
1741 %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
1742 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1743 ret <4 x i1> %cond
1744
1745; CHECK-LABEL: @testqv4i1sgt
1746; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1747; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1748; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1749; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1750; CHECK: qvfmr 5, 6
1751; CHECK: .LBB[[BB]]:
1752; CHECK: qvfmr 1, 5
1753; CHECK: blr
1754}
1755
1756define <4 x i1> @testqv4i1ugt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1757entry:
1758 %cmp1 = fcmp oeq float %c3, %c4
1759 %cmp3tmp = fcmp oeq float %c1, %c2
1760 %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
1761 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1762 ret <4 x i1> %cond
1763
1764; CHECK-LABEL: @testqv4i1ugt
1765; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1766; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1767; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1768; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1769; CHECK: qvfmr 5, 6
1770; CHECK: .LBB[[BB]]:
1771; CHECK: qvfmr 1, 5
1772; CHECK: blr
1773}
1774
1775define <4 x i1> @testqv4i1ne(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
1776entry:
1777 %cmp1 = fcmp oeq float %c3, %c4
1778 %cmp3tmp = fcmp oeq float %c1, %c2
1779 %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
1780 %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
1781 ret <4 x i1> %cond
1782
1783; CHECK-LABEL: @testqv4i1ne
1784; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
1785; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
1786; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
1787; CHECK: bc 12, [[REG1]], .LBB[[BB:[0-9_]+]]
1788; CHECK: qvfmr 5, 6
1789; CHECK: .LBB[[BB]]:
1790; CHECK: qvfmr 1, 5
1791; CHECK: blr
1792}
1793
1794attributes #0 = { nounwind readnone "target-cpu"="pwr7" }
1795attributes #1 = { nounwind readnone "target-cpu"="a2q" }
1796