1; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s
3
4define signext i32 @testi32slt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
5; CHECK-LABEL: testi32slt
6; CHECK: crorc [[REG:[0-9]+]], 2, 6
7; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
8entry:
9  %cmp1 = icmp eq i32 %c3, %c4
10  %cmp3tmp = icmp eq i32 %c1, %c2
11  %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
12  br i1 %cmp3, label %iftrue, label %iffalse
13iftrue:
14  ret i32 %a1
15iffalse:
16  ret i32 %a2
17}
18
19define signext i32 @testi32ult(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
20; CHECK-LABEL: testi32ult
21; CHECK: crorc [[REG:[0-9]+]], 6, 2
22; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
23entry:
24  %cmp1 = icmp eq i32 %c3, %c4
25  %cmp3tmp = icmp eq i32 %c1, %c2
26  %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
27  br i1 %cmp3, label %iftrue, label %iffalse
28iftrue:
29  ret i32 %a1
30iffalse:
31  ret i32 %a2
32}
33
34define signext i32 @testi32sle(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
35; CHECK-LABEL: testi32sle
36; CHECK: crandc [[REG:[0-9]+]], 2, 6
37; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
38entry:
39  %cmp1 = icmp eq i32 %c3, %c4
40  %cmp3tmp = icmp eq i32 %c1, %c2
41  %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
42  br i1 %cmp3, label %iftrue, label %iffalse
43iftrue:
44  ret i32 %a1
45iffalse:
46  ret i32 %a2
47}
48
49define signext i32 @testi32ule(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
50; CHECK-LABEL: testi32ule
51; CHECK: crandc [[REG:[0-9]+]], 6, 2
52; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
53entry:
54  %cmp1 = icmp eq i32 %c3, %c4
55  %cmp3tmp = icmp eq i32 %c1, %c2
56  %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
57  br i1 %cmp3, label %iftrue, label %iffalse
58iftrue:
59  ret i32 %a1
60iffalse:
61  ret i32 %a2
62}
63
64define signext i32 @testi32eq(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
65; CHECK-LABEL: testi32eq:
66; CHECK: crxor [[REG:[0-9]+]], 6, 2
67; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
68entry:
69  %cmp1 = icmp eq i32 %c3, %c4
70  %cmp3tmp = icmp eq i32 %c1, %c2
71  %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
72  br i1 %cmp3, label %iftrue, label %iffalse
73iftrue:
74  ret i32 %a1
75iffalse:
76  ret i32 %a2
77}
78
79define signext i32 @testi32sge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
80; CHECK-LABEL: testi32sge:
81; CHECK: crandc [[REG:[0-9]+]], 6, 2
82; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
83entry:
84  %cmp1 = icmp eq i32 %c3, %c4
85  %cmp3tmp = icmp eq i32 %c1, %c2
86  %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
87  br i1 %cmp3, label %iftrue, label %iffalse
88iftrue:
89  ret i32 %a1
90iffalse:
91  ret i32 %a2
92}
93
94define signext i32 @testi32uge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
95; CHECK-LABEL: testi32uge:
96; CHECK: crandc [[REG:[0-9]+]], 2, 6
97; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
98entry:
99  %cmp1 = icmp eq i32 %c3, %c4
100  %cmp3tmp = icmp eq i32 %c1, %c2
101  %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
102  br i1 %cmp3, label %iftrue, label %iffalse
103iftrue:
104  ret i32 %a1
105iffalse:
106  ret i32 %a2
107}
108
109define signext i32 @testi32sgt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
110; CHECK-LABEL: testi32sgt:
111; CHECK: crorc [[REG:[0-9]+]], 6, 2
112; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
113entry:
114  %cmp1 = icmp eq i32 %c3, %c4
115  %cmp3tmp = icmp eq i32 %c1, %c2
116  %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
117  br i1 %cmp3, label %iftrue, label %iffalse
118iftrue:
119  ret i32 %a1
120iffalse:
121  ret i32 %a2
122}
123
124define signext i32 @testi32ugt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
125; CHECK-LABEL: testi32ugt:
126; CHECK: crorc [[REG:[0-9]+]], 2, 6
127; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
128entry:
129  %cmp1 = icmp eq i32 %c3, %c4
130  %cmp3tmp = icmp eq i32 %c1, %c2
131  %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
132  br i1 %cmp3, label %iftrue, label %iffalse
133iftrue:
134  ret i32 %a1
135iffalse:
136  ret i32 %a2
137}
138
139define signext i32 @testi32ne(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
140; CHECK-LABEL: testi32ne:
141; CHECK: creqv [[REG:[0-9]+]], 6, 2
142; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
143entry:
144  %cmp1 = icmp eq i32 %c3, %c4
145  %cmp3tmp = icmp eq i32 %c1, %c2
146  %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
147  br i1 %cmp3, label %iftrue, label %iffalse
148iftrue:
149  ret i32 %a1
150iffalse:
151  ret i32 %a2
152}
153
154define i64 @testi64slt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
155; CHECK-LABEL: testi64slt
156; CHECK: crorc [[REG:[0-9]+]], 2, 6
157; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
158entry:
159  %cmp1 = icmp eq i64 %c3, %c4
160  %cmp3tmp = icmp eq i64 %c1, %c2
161  %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
162  br i1 %cmp3, label %iftrue, label %iffalse
163iftrue:
164  ret i64 %a1
165iffalse:
166  ret i64 %a2
167}
168
169define i64 @testi64ult(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
170; CHECK-LABEL: testi64ult
171; CHECK: crorc [[REG:[0-9]+]], 6, 2
172; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
173entry:
174  %cmp1 = icmp eq i64 %c3, %c4
175  %cmp3tmp = icmp eq i64 %c1, %c2
176  %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
177  br i1 %cmp3, label %iftrue, label %iffalse
178iftrue:
179  ret i64 %a1
180iffalse:
181  ret i64 %a2
182}
183
184define i64 @testi64sle(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
185; CHECK-LABEL: testi64sle
186; CHECK: crandc [[REG:[0-9]+]], 2, 6
187; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
188entry:
189  %cmp1 = icmp eq i64 %c3, %c4
190  %cmp3tmp = icmp eq i64 %c1, %c2
191  %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
192  br i1 %cmp3, label %iftrue, label %iffalse
193iftrue:
194  ret i64 %a1
195iffalse:
196  ret i64 %a2
197}
198
199define i64 @testi64ule(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
200; CHECK-LABEL: testi64ule
201; CHECK: crandc [[REG:[0-9]+]], 6, 2
202; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
203entry:
204  %cmp1 = icmp eq i64 %c3, %c4
205  %cmp3tmp = icmp eq i64 %c1, %c2
206  %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
207  br i1 %cmp3, label %iftrue, label %iffalse
208iftrue:
209  ret i64 %a1
210iffalse:
211  ret i64 %a2
212}
213
214define i64 @testi64eq(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
215; CHECK-LABEL: testi64eq
216; CHECK: crxor [[REG:[0-9]+]], 6, 2
217; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
218entry:
219  %cmp1 = icmp eq i64 %c3, %c4
220  %cmp3tmp = icmp eq i64 %c1, %c2
221  %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
222  br i1 %cmp3, label %iftrue, label %iffalse
223iftrue:
224  ret i64 %a1
225iffalse:
226  ret i64 %a2
227}
228
229define i64 @testi64sge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
230; CHECK-LABEL: testi64sge
231; CHECK: crandc [[REG:[0-9]+]], 6, 2
232; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
233entry:
234  %cmp1 = icmp eq i64 %c3, %c4
235  %cmp3tmp = icmp eq i64 %c1, %c2
236  %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
237  br i1 %cmp3, label %iftrue, label %iffalse
238iftrue:
239  ret i64 %a1
240iffalse:
241  ret i64 %a2
242}
243
244define i64 @testi64uge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
245; CHECK-LABEL: testi64uge
246; CHECK: crandc [[REG:[0-9]+]], 2, 6
247; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
248entry:
249  %cmp1 = icmp eq i64 %c3, %c4
250  %cmp3tmp = icmp eq i64 %c1, %c2
251  %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
252  br i1 %cmp3, label %iftrue, label %iffalse
253iftrue:
254  ret i64 %a1
255iffalse:
256  ret i64 %a2
257}
258
259define i64 @testi64sgt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
260; CHECK-LABEL: testi64sgt
261; CHECK: crorc [[REG:[0-9]+]], 6, 2
262; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
263entry:
264  %cmp1 = icmp eq i64 %c3, %c4
265  %cmp3tmp = icmp eq i64 %c1, %c2
266  %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
267  br i1 %cmp3, label %iftrue, label %iffalse
268iftrue:
269  ret i64 %a1
270iffalse:
271  ret i64 %a2
272}
273
274define i64 @testi64ugt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
275; CHECK-LABEL: testi64ugt
276; CHECK: crorc [[REG:[0-9]+]], 2, 6
277; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
278entry:
279  %cmp1 = icmp eq i64 %c3, %c4
280  %cmp3tmp = icmp eq i64 %c1, %c2
281  %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
282  br i1 %cmp3, label %iftrue, label %iffalse
283iftrue:
284  ret i64 %a1
285iffalse:
286  ret i64 %a2
287}
288
289define i64 @testi64ne(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
290; CHECK-LABEL: testi64ne
291; CHECK: creqv [[REG:[0-9]+]], 6, 2
292; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
293entry:
294  %cmp1 = icmp eq i64 %c3, %c4
295  %cmp3tmp = icmp eq i64 %c1, %c2
296  %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
297  br i1 %cmp3, label %iftrue, label %iffalse
298iftrue:
299  ret i64 %a1
300iffalse:
301  ret i64 %a2
302}
303
304define float @testfloatslt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
305; CHECK-LABEL: testfloatslt
306; CHECK: crorc [[REG:[0-9]+]], 2, 6
307; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
308entry:
309  %cmp1 = fcmp oeq float %c3, %c4
310  %cmp3tmp = fcmp oeq float %c1, %c2
311  %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
312  br i1 %cmp3, label %iftrue, label %iffalse
313iftrue:
314  ret float %a1
315iffalse:
316  ret float %a2
317}
318
319define float @testfloatult(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
320; CHECK-LABEL: testfloatult
321; CHECK: crorc [[REG:[0-9]+]], 6, 2
322; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
323entry:
324  %cmp1 = fcmp oeq float %c3, %c4
325  %cmp3tmp = fcmp oeq float %c1, %c2
326  %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
327  br i1 %cmp3, label %iftrue, label %iffalse
328iftrue:
329  ret float %a1
330iffalse:
331  ret float %a2
332}
333
334define float @testfloatsle(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
335; CHECK-LABEL: testfloatsle
336; CHECK: crandc [[REG:[0-9]+]], 2, 6
337; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
338entry:
339  %cmp1 = fcmp oeq float %c3, %c4
340  %cmp3tmp = fcmp oeq float %c1, %c2
341  %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
342  br i1 %cmp3, label %iftrue, label %iffalse
343iftrue:
344  ret float %a1
345iffalse:
346  ret float %a2
347}
348
349define float @testfloatule(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
350; CHECK-LABEL: testfloatule
351; CHECK: crandc [[REG:[0-9]+]], 6, 2
352; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
353entry:
354  %cmp1 = fcmp oeq float %c3, %c4
355  %cmp3tmp = fcmp oeq float %c1, %c2
356  %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
357  br i1 %cmp3, label %iftrue, label %iffalse
358iftrue:
359  ret float %a1
360iffalse:
361  ret float %a2
362}
363
364define float @testfloateq(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
365; CHECK-LABEL: testfloateq
366; CHECK: crxor [[REG:[0-9]+]], 6, 2
367; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
368entry:
369  %cmp1 = fcmp oeq float %c3, %c4
370  %cmp3tmp = fcmp oeq float %c1, %c2
371  %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
372  br i1 %cmp3, label %iftrue, label %iffalse
373iftrue:
374  ret float %a1
375iffalse:
376  ret float %a2
377}
378
379define float @testfloatsge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
380; CHECK-LABEL: testfloatsge
381; CHECK: crandc [[REG:[0-9]+]], 6, 2
382; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
383entry:
384  %cmp1 = fcmp oeq float %c3, %c4
385  %cmp3tmp = fcmp oeq float %c1, %c2
386  %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
387  br i1 %cmp3, label %iftrue, label %iffalse
388iftrue:
389  ret float %a1
390iffalse:
391  ret float %a2
392}
393
394define float @testfloatuge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
395; CHECK-LABEL: testfloatuge
396; CHECK: crandc [[REG:[0-9]+]], 2, 6
397; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
398entry:
399  %cmp1 = fcmp oeq float %c3, %c4
400  %cmp3tmp = fcmp oeq float %c1, %c2
401  %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
402  br i1 %cmp3, label %iftrue, label %iffalse
403iftrue:
404  ret float %a1
405iffalse:
406  ret float %a2
407}
408
409define float @testfloatsgt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
410; CHECK-LABEL: testfloatsgt
411; CHECK: crorc [[REG:[0-9]+]], 6, 2
412; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
413entry:
414  %cmp1 = fcmp oeq float %c3, %c4
415  %cmp3tmp = fcmp oeq float %c1, %c2
416  %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
417  br i1 %cmp3, label %iftrue, label %iffalse
418iftrue:
419  ret float %a1
420iffalse:
421  ret float %a2
422}
423
424define float @testfloatugt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
425; CHECK-LABEL: testfloatugt
426; CHECK: crorc [[REG:[0-9]+]], 2, 6
427; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
428entry:
429  %cmp1 = fcmp oeq float %c3, %c4
430  %cmp3tmp = fcmp oeq float %c1, %c2
431  %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
432  br i1 %cmp3, label %iftrue, label %iffalse
433iftrue:
434  ret float %a1
435iffalse:
436  ret float %a2
437}
438
439define float @testfloatne(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
440; CHECK-LABEL: testfloatne
441; CHECK: creqv [[REG:[0-9]+]], 6, 2
442; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
443entry:
444  %cmp1 = fcmp oeq float %c3, %c4
445  %cmp3tmp = fcmp oeq float %c1, %c2
446  %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
447  br i1 %cmp3, label %iftrue, label %iffalse
448iftrue:
449  ret float %a1
450iffalse:
451  ret float %a2
452}
453
454define double @testdoubleslt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
455; CHECK-LABEL: testdoubleslt
456; CHECK: crorc [[REG:[0-9]+]], 2, 6
457; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
458entry:
459  %cmp1 = fcmp oeq double %c3, %c4
460  %cmp3tmp = fcmp oeq double %c1, %c2
461  %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
462  br i1 %cmp3, label %iftrue, label %iffalse
463iftrue:
464  ret double %a1
465iffalse:
466  ret double %a2
467}
468
469define double @testdoubleult(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
470; CHECK-LABEL: testdoubleult:
471; CHECK: crorc [[REG:[0-9]+]], 6, 2
472; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
473entry:
474  %cmp1 = fcmp oeq double %c3, %c4
475  %cmp3tmp = fcmp oeq double %c1, %c2
476  %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
477  br i1 %cmp3, label %iftrue, label %iffalse
478iftrue:
479  ret double %a1
480iffalse:
481  ret double %a2
482}
483
484define double @testdoublesle(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
485; CHECK-LABEL: testdoublesle
486; CHECK: crandc [[REG:[0-9]+]], 2, 6
487; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
488entry:
489  %cmp1 = fcmp oeq double %c3, %c4
490  %cmp3tmp = fcmp oeq double %c1, %c2
491  %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
492  br i1 %cmp3, label %iftrue, label %iffalse
493iftrue:
494  ret double %a1
495iffalse:
496  ret double %a2
497}
498
499define double @testdoubleule(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
500; CHECK-LABEL: testdoubleule:
501; CHECK: crandc [[REG:[0-9]+]], 6, 2
502; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
503entry:
504  %cmp1 = fcmp oeq double %c3, %c4
505  %cmp3tmp = fcmp oeq double %c1, %c2
506  %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
507  br i1 %cmp3, label %iftrue, label %iffalse
508iftrue:
509  ret double %a1
510iffalse:
511  ret double %a2
512}
513
514define double @testdoubleeq(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
515; CHECK-LABEL: testdoubleeq
516; CHECK: crxor [[REG:[0-9]+]], 6, 2
517; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
518entry:
519  %cmp1 = fcmp oeq double %c3, %c4
520  %cmp3tmp = fcmp oeq double %c1, %c2
521  %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
522  br i1 %cmp3, label %iftrue, label %iffalse
523iftrue:
524  ret double %a1
525iffalse:
526  ret double %a2
527}
528
529define double @testdoublesge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
530; CHECK-LABEL: testdoublesge
531; CHECK: crandc [[REG:[0-9]+]], 6, 2
532; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
533entry:
534  %cmp1 = fcmp oeq double %c3, %c4
535  %cmp3tmp = fcmp oeq double %c1, %c2
536  %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
537  br i1 %cmp3, label %iftrue, label %iffalse
538iftrue:
539  ret double %a1
540iffalse:
541  ret double %a2
542}
543
544define double @testdoubleuge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
545; CHECK-LABEL: testdoubleuge
546; CHECK: crandc [[REG:[0-9]+]], 2, 6
547; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
548entry:
549  %cmp1 = fcmp oeq double %c3, %c4
550  %cmp3tmp = fcmp oeq double %c1, %c2
551  %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
552  br i1 %cmp3, label %iftrue, label %iffalse
553iftrue:
554  ret double %a1
555iffalse:
556  ret double %a2
557}
558
559define double @testdoublesgt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
560; CHECK-LABEL: testdoublesgt:
561; CHECK: crorc [[REG:[0-9]+]], 6, 2
562; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
563entry:
564  %cmp1 = fcmp oeq double %c3, %c4
565  %cmp3tmp = fcmp oeq double %c1, %c2
566  %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
567  br i1 %cmp3, label %iftrue, label %iffalse
568iftrue:
569  ret double %a1
570iffalse:
571  ret double %a2
572}
573
574define double @testdoubleugt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
575; CHECK-LABEL: testdoubleugt
576; CHECK: crorc [[REG:[0-9]+]], 2, 6
577; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
578entry:
579  %cmp1 = fcmp oeq double %c3, %c4
580  %cmp3tmp = fcmp oeq double %c1, %c2
581  %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
582  br i1 %cmp3, label %iftrue, label %iffalse
583iftrue:
584  ret double %a1
585iffalse:
586  ret double %a2
587}
588
589define double @testdoublene(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
590; CHECK-LABEL: testdoublene
591; CHECK: creqv [[REG:[0-9]+]], 6, 2
592; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
593entry:
594  %cmp1 = fcmp oeq double %c3, %c4
595  %cmp3tmp = fcmp oeq double %c1, %c2
596  %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
597  br i1 %cmp3, label %iftrue, label %iffalse
598iftrue:
599  ret double %a1
600iffalse:
601  ret double %a2
602}
603