[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / InstCombine / and-fcmp.ll
blobdd51c6548eea64c6f5cfe764719d78f713245b33
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instcombine -S | FileCheck %s
4 define i1 @PR1738(double %x, double %y) {
5 ; CHECK-LABEL: @PR1738(
6 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[X:%.*]], [[Y:%.*]]
7 ; CHECK-NEXT:    ret i1 [[TMP1]]
9   %cmp1 = fcmp ord double %x, 0.0
10   %cmp2 = fcmp ord double %y, 0.0
11   %and = and i1 %cmp1, %cmp2
12   ret i1 %and
15 define <2 x i1> @PR1738_vec_undef(<2 x double> %x, <2 x double> %y) {
16 ; CHECK-LABEL: @PR1738_vec_undef(
17 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[X:%.*]], [[Y:%.*]]
18 ; CHECK-NEXT:    ret <2 x i1> [[TMP1]]
20   %cmp1 = fcmp ord <2 x double> %x, <double 0.0, double undef>
21   %cmp2 = fcmp ord <2 x double> %y, <double undef, double 0.0>
22   %or = and <2 x i1> %cmp1, %cmp2
23   ret <2 x i1> %or
26 define i1 @PR41069(i1 %z, float %c, float %d) {
27 ; CHECK-LABEL: @PR41069(
28 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord float [[D:%.*]], [[C:%.*]]
29 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
30 ; CHECK-NEXT:    ret i1 [[R]]
32   %ord1 = fcmp arcp ord float %c, 0.0
33   %and = and i1 %ord1, %z
34   %ord2 = fcmp afn ord float %d, 0.0
35   %r = and i1 %and, %ord2
36   ret i1 %r
39 define i1 @PR41069_commute(i1 %z, float %c, float %d) {
40 ; CHECK-LABEL: @PR41069_commute(
41 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ninf ord float [[D:%.*]], [[C:%.*]]
42 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
43 ; CHECK-NEXT:    ret i1 [[R]]
45   %ord1 = fcmp ninf ord float %c, 0.0
46   %and = and i1 %ord1, %z
47   %ord2 = fcmp ninf reassoc ord float %d, 0.0
48   %r = and i1 %ord2, %and
49   ret i1 %r
52 ; Commute differently and make sure vectors work.
54 define <2 x i1> @PR41069_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
55 ; CHECK-LABEL: @PR41069_vec(
56 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
57 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]]
58 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]]
59 ; CHECK-NEXT:    ret <2 x i1> [[R]]
61   %ord1 = fcmp ord <2 x double> %a, %b
62   %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
63   %and = and <2 x i1> %ord1, %ord2
64   %ord3 = fcmp ord <2 x double> %d, zeroinitializer
65   %r = and <2 x i1> %and, %ord3
66   ret <2 x i1> %r
69 define <2 x i1> @PR41069_vec_commute(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
70 ; CHECK-LABEL: @PR41069_vec_commute(
71 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
72 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]]
73 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]]
74 ; CHECK-NEXT:    ret <2 x i1> [[R]]
76   %ord1 = fcmp ord <2 x double> %a, %b
77   %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
78   %and = and <2 x i1> %ord1, %ord2
79   %ord3 = fcmp ord <2 x double> %d, zeroinitializer
80   %r = and <2 x i1> %ord3, %and
81   ret <2 x i1> %r
84 define i1 @PR15737(float %a, double %b) {
85 ; CHECK-LABEL: @PR15737(
86 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord float [[A:%.*]], 0.000000e+00
87 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[B:%.*]], 0.000000e+00
88 ; CHECK-NEXT:    [[AND:%.*]] = and i1 [[CMP]], [[CMP1]]
89 ; CHECK-NEXT:    ret i1 [[AND]]
91   %cmp = fcmp ord float %a, 0.000000e+00
92   %cmp1 = fcmp ord double %b, 0.000000e+00
93   %and = and i1 %cmp, %cmp1
94   ret i1 %and
97 define <2 x i1> @t9(<2 x float> %a, <2 x double> %b) {
98 ; CHECK-LABEL: @t9(
99 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord <2 x float> [[A:%.*]], zeroinitializer
100 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord <2 x double> [[B:%.*]], zeroinitializer
101 ; CHECK-NEXT:    [[AND:%.*]] = and <2 x i1> [[CMP]], [[CMP1]]
102 ; CHECK-NEXT:    ret <2 x i1> [[AND]]
104   %cmp = fcmp ord <2 x float> %a, zeroinitializer
105   %cmp1 = fcmp ord <2 x double> %b, zeroinitializer
106   %and = and <2 x i1> %cmp, %cmp1
107   ret <2 x i1> %and
110 define i1 @fcmp_ord_nonzero(float %x, float %y) {
111 ; CHECK-LABEL: @fcmp_ord_nonzero(
112 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord float [[X:%.*]], [[Y:%.*]]
113 ; CHECK-NEXT:    ret i1 [[TMP1]]
115   %cmp1 = fcmp ord float %x, 1.0
116   %cmp2 = fcmp ord float %y, 2.0
117   %and = and i1 %cmp1, %cmp2
118   ret i1 %and
121 define <3 x i1> @fcmp_ord_nonzero_vec(<3 x float> %x, <3 x float> %y) {
122 ; CHECK-LABEL: @fcmp_ord_nonzero_vec(
123 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <3 x float> [[X:%.*]], [[Y:%.*]]
124 ; CHECK-NEXT:    ret <3 x i1> [[TMP1]]
126   %cmp1 = fcmp ord <3 x float> %x, <float 1.0, float 2.0, float 3.0>
127   %cmp2 = fcmp ord <3 x float> %y, <float 3.0, float 2.0, float 1.0>
128   %and = and <3 x i1> %cmp1, %cmp2
129   ret <3 x i1> %and
132 define i1 @auto_gen_0(double %a, double %b) {
133 ; CHECK-LABEL: @auto_gen_0(
134 ; CHECK-NEXT:    ret i1 false
136   %cmp = fcmp false double %a, %b
137   %cmp1 = fcmp false double %a, %b
138   %retval = and i1 %cmp, %cmp1
139   ret i1 %retval
142 define i1 @auto_gen_1(double %a, double %b) {
143 ; CHECK-LABEL: @auto_gen_1(
144 ; CHECK-NEXT:    ret i1 false
146   %cmp = fcmp oeq double %a, %b
147   %cmp1 = fcmp false double %a, %b
148   %retval = and i1 %cmp, %cmp1
149   ret i1 %retval
152 define i1 @auto_gen_2(double %a, double %b) {
153 ; CHECK-LABEL: @auto_gen_2(
154 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
155 ; CHECK-NEXT:    ret i1 [[TMP1]]
157   %cmp = fcmp oeq double %a, %b
158   %cmp1 = fcmp oeq double %a, %b
159   %retval = and i1 %cmp, %cmp1
160   ret i1 %retval
163 define i1 @auto_gen_3(double %a, double %b) {
164 ; CHECK-LABEL: @auto_gen_3(
165 ; CHECK-NEXT:    ret i1 false
167   %cmp = fcmp ogt double %a, %b
168   %cmp1 = fcmp false double %a, %b
169   %retval = and i1 %cmp, %cmp1
170   ret i1 %retval
173 define i1 @auto_gen_4(double %a, double %b) {
174 ; CHECK-LABEL: @auto_gen_4(
175 ; CHECK-NEXT:    ret i1 false
177   %cmp = fcmp ogt double %a, %b
178   %cmp1 = fcmp oeq double %a, %b
179   %retval = and i1 %cmp, %cmp1
180   ret i1 %retval
183 define i1 @auto_gen_5(double %a, double %b) {
184 ; CHECK-LABEL: @auto_gen_5(
185 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
186 ; CHECK-NEXT:    ret i1 [[TMP1]]
188   %cmp = fcmp ogt double %a, %b
189   %cmp1 = fcmp ogt double %a, %b
190   %retval = and i1 %cmp, %cmp1
191   ret i1 %retval
194 define i1 @auto_gen_6(double %a, double %b) {
195 ; CHECK-LABEL: @auto_gen_6(
196 ; CHECK-NEXT:    ret i1 false
198   %cmp = fcmp oge double %a, %b
199   %cmp1 = fcmp false double %a, %b
200   %retval = and i1 %cmp, %cmp1
201   ret i1 %retval
204 define i1 @auto_gen_7(double %a, double %b) {
205 ; CHECK-LABEL: @auto_gen_7(
206 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
207 ; CHECK-NEXT:    ret i1 [[TMP1]]
209   %cmp = fcmp oge double %a, %b
210   %cmp1 = fcmp oeq double %a, %b
211   %retval = and i1 %cmp, %cmp1
212   ret i1 %retval
215 define i1 @auto_gen_8(double %a, double %b) {
216 ; CHECK-LABEL: @auto_gen_8(
217 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
218 ; CHECK-NEXT:    ret i1 [[TMP1]]
220   %cmp = fcmp oge double %a, %b
221   %cmp1 = fcmp ogt double %a, %b
222   %retval = and i1 %cmp, %cmp1
223   ret i1 %retval
226 define i1 @auto_gen_9(double %a, double %b) {
227 ; CHECK-LABEL: @auto_gen_9(
228 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
229 ; CHECK-NEXT:    ret i1 [[TMP1]]
231   %cmp = fcmp oge double %a, %b
232   %cmp1 = fcmp oge double %a, %b
233   %retval = and i1 %cmp, %cmp1
234   ret i1 %retval
237 define i1 @auto_gen_10(double %a, double %b) {
238 ; CHECK-LABEL: @auto_gen_10(
239 ; CHECK-NEXT:    ret i1 false
241   %cmp = fcmp olt double %a, %b
242   %cmp1 = fcmp false double %a, %b
243   %retval = and i1 %cmp, %cmp1
244   ret i1 %retval
247 define i1 @auto_gen_11(double %a, double %b) {
248 ; CHECK-LABEL: @auto_gen_11(
249 ; CHECK-NEXT:    ret i1 false
251   %cmp = fcmp olt double %a, %b
252   %cmp1 = fcmp oeq double %a, %b
253   %retval = and i1 %cmp, %cmp1
254   ret i1 %retval
257 define i1 @auto_gen_12(double %a, double %b) {
258 ; CHECK-LABEL: @auto_gen_12(
259 ; CHECK-NEXT:    ret i1 false
261   %cmp = fcmp olt double %a, %b
262   %cmp1 = fcmp ogt double %a, %b
263   %retval = and i1 %cmp, %cmp1
264   ret i1 %retval
267 define i1 @auto_gen_13(double %a, double %b) {
268 ; CHECK-LABEL: @auto_gen_13(
269 ; CHECK-NEXT:    ret i1 false
271   %cmp = fcmp olt double %a, %b
272   %cmp1 = fcmp oge double %a, %b
273   %retval = and i1 %cmp, %cmp1
274   ret i1 %retval
277 define i1 @auto_gen_14(double %a, double %b) {
278 ; CHECK-LABEL: @auto_gen_14(
279 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
280 ; CHECK-NEXT:    ret i1 [[TMP1]]
282   %cmp = fcmp olt double %a, %b
283   %cmp1 = fcmp olt double %a, %b
284   %retval = and i1 %cmp, %cmp1
285   ret i1 %retval
288 define i1 @auto_gen_15(double %a, double %b) {
289 ; CHECK-LABEL: @auto_gen_15(
290 ; CHECK-NEXT:    ret i1 false
292   %cmp = fcmp ole double %a, %b
293   %cmp1 = fcmp false double %a, %b
294   %retval = and i1 %cmp, %cmp1
295   ret i1 %retval
298 define i1 @auto_gen_16(double %a, double %b) {
299 ; CHECK-LABEL: @auto_gen_16(
300 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
301 ; CHECK-NEXT:    ret i1 [[TMP1]]
303   %cmp = fcmp ole double %a, %b
304   %cmp1 = fcmp oeq double %a, %b
305   %retval = and i1 %cmp, %cmp1
306   ret i1 %retval
309 define i1 @auto_gen_17(double %a, double %b) {
310 ; CHECK-LABEL: @auto_gen_17(
311 ; CHECK-NEXT:    ret i1 false
313   %cmp = fcmp ole double %a, %b
314   %cmp1 = fcmp ogt double %a, %b
315   %retval = and i1 %cmp, %cmp1
316   ret i1 %retval
319 define i1 @auto_gen_18(double %a, double %b) {
320 ; CHECK-LABEL: @auto_gen_18(
321 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
322 ; CHECK-NEXT:    ret i1 [[TMP1]]
324   %cmp = fcmp ole double %a, %b
325   %cmp1 = fcmp oge double %a, %b
326   %retval = and i1 %cmp, %cmp1
327   ret i1 %retval
330 define i1 @auto_gen_19(double %a, double %b) {
331 ; CHECK-LABEL: @auto_gen_19(
332 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
333 ; CHECK-NEXT:    ret i1 [[TMP1]]
335   %cmp = fcmp ole double %a, %b
336   %cmp1 = fcmp olt double %a, %b
337   %retval = and i1 %cmp, %cmp1
338   ret i1 %retval
341 define i1 @auto_gen_20(double %a, double %b) {
342 ; CHECK-LABEL: @auto_gen_20(
343 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
344 ; CHECK-NEXT:    ret i1 [[TMP1]]
346   %cmp = fcmp ole double %a, %b
347   %cmp1 = fcmp ole double %a, %b
348   %retval = and i1 %cmp, %cmp1
349   ret i1 %retval
352 define i1 @auto_gen_21(double %a, double %b) {
353 ; CHECK-LABEL: @auto_gen_21(
354 ; CHECK-NEXT:    ret i1 false
356   %cmp = fcmp one double %a, %b
357   %cmp1 = fcmp false double %a, %b
358   %retval = and i1 %cmp, %cmp1
359   ret i1 %retval
362 define i1 @auto_gen_22(double %a, double %b) {
363 ; CHECK-LABEL: @auto_gen_22(
364 ; CHECK-NEXT:    ret i1 false
366   %cmp = fcmp one double %a, %b
367   %cmp1 = fcmp oeq double %a, %b
368   %retval = and i1 %cmp, %cmp1
369   ret i1 %retval
372 define i1 @auto_gen_23(double %a, double %b) {
373 ; CHECK-LABEL: @auto_gen_23(
374 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
375 ; CHECK-NEXT:    ret i1 [[TMP1]]
377   %cmp = fcmp one double %a, %b
378   %cmp1 = fcmp ogt double %a, %b
379   %retval = and i1 %cmp, %cmp1
380   ret i1 %retval
383 define i1 @auto_gen_24(double %a, double %b) {
384 ; CHECK-LABEL: @auto_gen_24(
385 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
386 ; CHECK-NEXT:    ret i1 [[TMP1]]
388   %cmp = fcmp one double %a, %b
389   %cmp1 = fcmp oge double %a, %b
390   %retval = and i1 %cmp, %cmp1
391   ret i1 %retval
394 define i1 @auto_gen_25(double %a, double %b) {
395 ; CHECK-LABEL: @auto_gen_25(
396 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
397 ; CHECK-NEXT:    ret i1 [[TMP1]]
399   %cmp = fcmp one double %a, %b
400   %cmp1 = fcmp olt double %a, %b
401   %retval = and i1 %cmp, %cmp1
402   ret i1 %retval
405 define i1 @auto_gen_26(double %a, double %b) {
406 ; CHECK-LABEL: @auto_gen_26(
407 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
408 ; CHECK-NEXT:    ret i1 [[TMP1]]
410   %cmp = fcmp one double %a, %b
411   %cmp1 = fcmp ole double %a, %b
412   %retval = and i1 %cmp, %cmp1
413   ret i1 %retval
416 define i1 @auto_gen_27(double %a, double %b) {
417 ; CHECK-LABEL: @auto_gen_27(
418 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
419 ; CHECK-NEXT:    ret i1 [[TMP1]]
421   %cmp = fcmp one double %a, %b
422   %cmp1 = fcmp one double %a, %b
423   %retval = and i1 %cmp, %cmp1
424   ret i1 %retval
427 define i1 @auto_gen_28(double %a, double %b) {
428 ; CHECK-LABEL: @auto_gen_28(
429 ; CHECK-NEXT:    ret i1 false
431   %cmp = fcmp ord double %a, %b
432   %cmp1 = fcmp false double %a, %b
433   %retval = and i1 %cmp, %cmp1
434   ret i1 %retval
437 define i1 @auto_gen_29(double %a, double %b) {
438 ; CHECK-LABEL: @auto_gen_29(
439 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
440 ; CHECK-NEXT:    ret i1 [[TMP1]]
442   %cmp = fcmp ord double %a, %b
443   %cmp1 = fcmp oeq double %a, %b
444   %retval = and i1 %cmp, %cmp1
445   ret i1 %retval
448 define i1 @auto_gen_30(double %a, double %b) {
449 ; CHECK-LABEL: @auto_gen_30(
450 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
451 ; CHECK-NEXT:    ret i1 [[TMP1]]
453   %cmp = fcmp ord double %a, %b
454   %cmp1 = fcmp ogt double %a, %b
455   %retval = and i1 %cmp, %cmp1
456   ret i1 %retval
459 define i1 @auto_gen_31(double %a, double %b) {
460 ; CHECK-LABEL: @auto_gen_31(
461 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
462 ; CHECK-NEXT:    ret i1 [[TMP1]]
464   %cmp = fcmp ord double %a, %b
465   %cmp1 = fcmp oge double %a, %b
466   %retval = and i1 %cmp, %cmp1
467   ret i1 %retval
470 define i1 @auto_gen_32(double %a, double %b) {
471 ; CHECK-LABEL: @auto_gen_32(
472 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
473 ; CHECK-NEXT:    ret i1 [[TMP1]]
475   %cmp = fcmp ord double %a, %b
476   %cmp1 = fcmp olt double %a, %b
477   %retval = and i1 %cmp, %cmp1
478   ret i1 %retval
481 define i1 @auto_gen_33(double %a, double %b) {
482 ; CHECK-LABEL: @auto_gen_33(
483 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
484 ; CHECK-NEXT:    ret i1 [[TMP1]]
486   %cmp = fcmp ord double %a, %b
487   %cmp1 = fcmp ole double %a, %b
488   %retval = and i1 %cmp, %cmp1
489   ret i1 %retval
492 define i1 @auto_gen_34(double %a, double %b) {
493 ; CHECK-LABEL: @auto_gen_34(
494 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
495 ; CHECK-NEXT:    ret i1 [[TMP1]]
497   %cmp = fcmp ord double %a, %b
498   %cmp1 = fcmp one double %a, %b
499   %retval = and i1 %cmp, %cmp1
500   ret i1 %retval
503 define i1 @auto_gen_35(double %a, double %b) {
504 ; CHECK-LABEL: @auto_gen_35(
505 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
506 ; CHECK-NEXT:    ret i1 [[TMP1]]
508   %cmp = fcmp ord double %a, %b
509   %cmp1 = fcmp ord double %a, %b
510   %retval = and i1 %cmp, %cmp1
511   ret i1 %retval
514 define i1 @auto_gen_36(double %a, double %b) {
515 ; CHECK-LABEL: @auto_gen_36(
516 ; CHECK-NEXT:    ret i1 false
518   %cmp = fcmp ueq double %a, %b
519   %cmp1 = fcmp false double %a, %b
520   %retval = and i1 %cmp, %cmp1
521   ret i1 %retval
524 define i1 @auto_gen_37(double %a, double %b) {
525 ; CHECK-LABEL: @auto_gen_37(
526 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
527 ; CHECK-NEXT:    ret i1 [[TMP1]]
529   %cmp = fcmp ueq double %a, %b
530   %cmp1 = fcmp oeq double %a, %b
531   %retval = and i1 %cmp, %cmp1
532   ret i1 %retval
535 define i1 @auto_gen_38(double %a, double %b) {
536 ; CHECK-LABEL: @auto_gen_38(
537 ; CHECK-NEXT:    ret i1 false
539   %cmp = fcmp ueq double %a, %b
540   %cmp1 = fcmp ogt double %a, %b
541   %retval = and i1 %cmp, %cmp1
542   ret i1 %retval
545 define i1 @auto_gen_39(double %a, double %b) {
546 ; CHECK-LABEL: @auto_gen_39(
547 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
548 ; CHECK-NEXT:    ret i1 [[TMP1]]
550   %cmp = fcmp ueq double %a, %b
551   %cmp1 = fcmp oge double %a, %b
552   %retval = and i1 %cmp, %cmp1
553   ret i1 %retval
556 define i1 @auto_gen_40(double %a, double %b) {
557 ; CHECK-LABEL: @auto_gen_40(
558 ; CHECK-NEXT:    ret i1 false
560   %cmp = fcmp ueq double %a, %b
561   %cmp1 = fcmp olt double %a, %b
562   %retval = and i1 %cmp, %cmp1
563   ret i1 %retval
566 define i1 @auto_gen_41(double %a, double %b) {
567 ; CHECK-LABEL: @auto_gen_41(
568 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
569 ; CHECK-NEXT:    ret i1 [[TMP1]]
571   %cmp = fcmp ueq double %a, %b
572   %cmp1 = fcmp ole double %a, %b
573   %retval = and i1 %cmp, %cmp1
574   ret i1 %retval
577 define i1 @auto_gen_42(double %a, double %b) {
578 ; CHECK-LABEL: @auto_gen_42(
579 ; CHECK-NEXT:    ret i1 false
581   %cmp = fcmp ueq double %a, %b
582   %cmp1 = fcmp one double %a, %b
583   %retval = and i1 %cmp, %cmp1
584   ret i1 %retval
587 define i1 @auto_gen_43(double %a, double %b) {
588 ; CHECK-LABEL: @auto_gen_43(
589 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
590 ; CHECK-NEXT:    ret i1 [[TMP1]]
592   %cmp = fcmp ueq double %a, %b
593   %cmp1 = fcmp ord double %a, %b
594   %retval = and i1 %cmp, %cmp1
595   ret i1 %retval
598 define i1 @auto_gen_44(double %a, double %b) {
599 ; CHECK-LABEL: @auto_gen_44(
600 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
601 ; CHECK-NEXT:    ret i1 [[TMP1]]
603   %cmp = fcmp ueq double %a, %b
604   %cmp1 = fcmp ueq double %a, %b
605   %retval = and i1 %cmp, %cmp1
606   ret i1 %retval
609 define i1 @auto_gen_45(double %a, double %b) {
610 ; CHECK-LABEL: @auto_gen_45(
611 ; CHECK-NEXT:    ret i1 false
613   %cmp = fcmp ugt double %a, %b
614   %cmp1 = fcmp false double %a, %b
615   %retval = and i1 %cmp, %cmp1
616   ret i1 %retval
619 define i1 @auto_gen_46(double %a, double %b) {
620 ; CHECK-LABEL: @auto_gen_46(
621 ; CHECK-NEXT:    ret i1 false
623   %cmp = fcmp ugt double %a, %b
624   %cmp1 = fcmp oeq double %a, %b
625   %retval = and i1 %cmp, %cmp1
626   ret i1 %retval
629 define i1 @auto_gen_47(double %a, double %b) {
630 ; CHECK-LABEL: @auto_gen_47(
631 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
632 ; CHECK-NEXT:    ret i1 [[TMP1]]
634   %cmp = fcmp ugt double %a, %b
635   %cmp1 = fcmp ogt double %a, %b
636   %retval = and i1 %cmp, %cmp1
637   ret i1 %retval
640 define i1 @auto_gen_48(double %a, double %b) {
641 ; CHECK-LABEL: @auto_gen_48(
642 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
643 ; CHECK-NEXT:    ret i1 [[TMP1]]
645   %cmp = fcmp ugt double %a, %b
646   %cmp1 = fcmp oge double %a, %b
647   %retval = and i1 %cmp, %cmp1
648   ret i1 %retval
651 define i1 @auto_gen_49(double %a, double %b) {
652 ; CHECK-LABEL: @auto_gen_49(
653 ; CHECK-NEXT:    ret i1 false
655   %cmp = fcmp ugt double %a, %b
656   %cmp1 = fcmp olt double %a, %b
657   %retval = and i1 %cmp, %cmp1
658   ret i1 %retval
661 define i1 @auto_gen_50(double %a, double %b) {
662 ; CHECK-LABEL: @auto_gen_50(
663 ; CHECK-NEXT:    ret i1 false
665   %cmp = fcmp ugt double %a, %b
666   %cmp1 = fcmp ole double %a, %b
667   %retval = and i1 %cmp, %cmp1
668   ret i1 %retval
671 define i1 @auto_gen_51(double %a, double %b) {
672 ; CHECK-LABEL: @auto_gen_51(
673 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
674 ; CHECK-NEXT:    ret i1 [[TMP1]]
676   %cmp = fcmp ugt double %a, %b
677   %cmp1 = fcmp one double %a, %b
678   %retval = and i1 %cmp, %cmp1
679   ret i1 %retval
682 define i1 @auto_gen_52(double %a, double %b) {
683 ; CHECK-LABEL: @auto_gen_52(
684 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
685 ; CHECK-NEXT:    ret i1 [[TMP1]]
687   %cmp = fcmp ugt double %a, %b
688   %cmp1 = fcmp ord double %a, %b
689   %retval = and i1 %cmp, %cmp1
690   ret i1 %retval
693 define i1 @auto_gen_53(double %a, double %b) {
694 ; CHECK-LABEL: @auto_gen_53(
695 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
696 ; CHECK-NEXT:    ret i1 [[TMP1]]
698   %cmp = fcmp ugt double %a, %b
699   %cmp1 = fcmp ueq double %a, %b
700   %retval = and i1 %cmp, %cmp1
701   ret i1 %retval
704 define i1 @auto_gen_54(double %a, double %b) {
705 ; CHECK-LABEL: @auto_gen_54(
706 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
707 ; CHECK-NEXT:    ret i1 [[TMP1]]
709   %cmp = fcmp ugt double %a, %b
710   %cmp1 = fcmp ugt double %a, %b
711   %retval = and i1 %cmp, %cmp1
712   ret i1 %retval
715 define i1 @auto_gen_55(double %a, double %b) {
716 ; CHECK-LABEL: @auto_gen_55(
717 ; CHECK-NEXT:    ret i1 false
719   %cmp = fcmp uge double %a, %b
720   %cmp1 = fcmp false double %a, %b
721   %retval = and i1 %cmp, %cmp1
722   ret i1 %retval
725 define i1 @auto_gen_56(double %a, double %b) {
726 ; CHECK-LABEL: @auto_gen_56(
727 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
728 ; CHECK-NEXT:    ret i1 [[TMP1]]
730   %cmp = fcmp uge double %a, %b
731   %cmp1 = fcmp oeq double %a, %b
732   %retval = and i1 %cmp, %cmp1
733   ret i1 %retval
736 define i1 @auto_gen_57(double %a, double %b) {
737 ; CHECK-LABEL: @auto_gen_57(
738 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
739 ; CHECK-NEXT:    ret i1 [[TMP1]]
741   %cmp = fcmp uge double %a, %b
742   %cmp1 = fcmp ogt double %a, %b
743   %retval = and i1 %cmp, %cmp1
744   ret i1 %retval
747 define i1 @auto_gen_58(double %a, double %b) {
748 ; CHECK-LABEL: @auto_gen_58(
749 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
750 ; CHECK-NEXT:    ret i1 [[TMP1]]
752   %cmp = fcmp uge double %a, %b
753   %cmp1 = fcmp oge double %a, %b
754   %retval = and i1 %cmp, %cmp1
755   ret i1 %retval
758 define i1 @auto_gen_59(double %a, double %b) {
759 ; CHECK-LABEL: @auto_gen_59(
760 ; CHECK-NEXT:    ret i1 false
762   %cmp = fcmp uge double %a, %b
763   %cmp1 = fcmp olt double %a, %b
764   %retval = and i1 %cmp, %cmp1
765   ret i1 %retval
768 define i1 @auto_gen_60(double %a, double %b) {
769 ; CHECK-LABEL: @auto_gen_60(
770 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
771 ; CHECK-NEXT:    ret i1 [[TMP1]]
773   %cmp = fcmp uge double %a, %b
774   %cmp1 = fcmp ole double %a, %b
775   %retval = and i1 %cmp, %cmp1
776   ret i1 %retval
779 define i1 @auto_gen_61(double %a, double %b) {
780 ; CHECK-LABEL: @auto_gen_61(
781 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
782 ; CHECK-NEXT:    ret i1 [[TMP1]]
784   %cmp = fcmp uge double %a, %b
785   %cmp1 = fcmp one double %a, %b
786   %retval = and i1 %cmp, %cmp1
787   ret i1 %retval
790 define i1 @auto_gen_62(double %a, double %b) {
791 ; CHECK-LABEL: @auto_gen_62(
792 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
793 ; CHECK-NEXT:    ret i1 [[TMP1]]
795   %cmp = fcmp uge double %a, %b
796   %cmp1 = fcmp ord double %a, %b
797   %retval = and i1 %cmp, %cmp1
798   ret i1 %retval
801 define i1 @auto_gen_63(double %a, double %b) {
802 ; CHECK-LABEL: @auto_gen_63(
803 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
804 ; CHECK-NEXT:    ret i1 [[TMP1]]
806   %cmp = fcmp uge double %a, %b
807   %cmp1 = fcmp ueq double %a, %b
808   %retval = and i1 %cmp, %cmp1
809   ret i1 %retval
812 define i1 @auto_gen_64(double %a, double %b) {
813 ; CHECK-LABEL: @auto_gen_64(
814 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
815 ; CHECK-NEXT:    ret i1 [[TMP1]]
817   %cmp = fcmp uge double %a, %b
818   %cmp1 = fcmp ugt double %a, %b
819   %retval = and i1 %cmp, %cmp1
820   ret i1 %retval
823 define i1 @auto_gen_65(double %a, double %b) {
824 ; CHECK-LABEL: @auto_gen_65(
825 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
826 ; CHECK-NEXT:    ret i1 [[TMP1]]
828   %cmp = fcmp uge double %a, %b
829   %cmp1 = fcmp uge double %a, %b
830   %retval = and i1 %cmp, %cmp1
831   ret i1 %retval
834 define i1 @auto_gen_66(double %a, double %b) {
835 ; CHECK-LABEL: @auto_gen_66(
836 ; CHECK-NEXT:    ret i1 false
838   %cmp = fcmp ult double %a, %b
839   %cmp1 = fcmp false double %a, %b
840   %retval = and i1 %cmp, %cmp1
841   ret i1 %retval
844 define i1 @auto_gen_67(double %a, double %b) {
845 ; CHECK-LABEL: @auto_gen_67(
846 ; CHECK-NEXT:    ret i1 false
848   %cmp = fcmp ult double %a, %b
849   %cmp1 = fcmp oeq double %a, %b
850   %retval = and i1 %cmp, %cmp1
851   ret i1 %retval
854 define i1 @auto_gen_68(double %a, double %b) {
855 ; CHECK-LABEL: @auto_gen_68(
856 ; CHECK-NEXT:    ret i1 false
858   %cmp = fcmp ult double %a, %b
859   %cmp1 = fcmp ogt double %a, %b
860   %retval = and i1 %cmp, %cmp1
861   ret i1 %retval
864 define i1 @auto_gen_69(double %a, double %b) {
865 ; CHECK-LABEL: @auto_gen_69(
866 ; CHECK-NEXT:    ret i1 false
868   %cmp = fcmp ult double %a, %b
869   %cmp1 = fcmp oge double %a, %b
870   %retval = and i1 %cmp, %cmp1
871   ret i1 %retval
874 define i1 @auto_gen_70(double %a, double %b) {
875 ; CHECK-LABEL: @auto_gen_70(
876 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
877 ; CHECK-NEXT:    ret i1 [[TMP1]]
879   %cmp = fcmp ult double %a, %b
880   %cmp1 = fcmp olt double %a, %b
881   %retval = and i1 %cmp, %cmp1
882   ret i1 %retval
885 define i1 @auto_gen_71(double %a, double %b) {
886 ; CHECK-LABEL: @auto_gen_71(
887 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
888 ; CHECK-NEXT:    ret i1 [[TMP1]]
890   %cmp = fcmp ult double %a, %b
891   %cmp1 = fcmp ole double %a, %b
892   %retval = and i1 %cmp, %cmp1
893   ret i1 %retval
896 define i1 @auto_gen_72(double %a, double %b) {
897 ; CHECK-LABEL: @auto_gen_72(
898 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
899 ; CHECK-NEXT:    ret i1 [[TMP1]]
901   %cmp = fcmp ult double %a, %b
902   %cmp1 = fcmp one double %a, %b
903   %retval = and i1 %cmp, %cmp1
904   ret i1 %retval
907 define i1 @auto_gen_73(double %a, double %b) {
908 ; CHECK-LABEL: @auto_gen_73(
909 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
910 ; CHECK-NEXT:    ret i1 [[TMP1]]
912   %cmp = fcmp ult double %a, %b
913   %cmp1 = fcmp ord double %a, %b
914   %retval = and i1 %cmp, %cmp1
915   ret i1 %retval
918 define i1 @auto_gen_74(double %a, double %b) {
919 ; CHECK-LABEL: @auto_gen_74(
920 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
921 ; CHECK-NEXT:    ret i1 [[TMP1]]
923   %cmp = fcmp ult double %a, %b
924   %cmp1 = fcmp ueq double %a, %b
925   %retval = and i1 %cmp, %cmp1
926   ret i1 %retval
929 define i1 @auto_gen_75(double %a, double %b) {
930 ; CHECK-LABEL: @auto_gen_75(
931 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
932 ; CHECK-NEXT:    ret i1 [[TMP1]]
934   %cmp = fcmp ult double %a, %b
935   %cmp1 = fcmp ugt double %a, %b
936   %retval = and i1 %cmp, %cmp1
937   ret i1 %retval
940 define i1 @auto_gen_76(double %a, double %b) {
941 ; CHECK-LABEL: @auto_gen_76(
942 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
943 ; CHECK-NEXT:    ret i1 [[TMP1]]
945   %cmp = fcmp ult double %a, %b
946   %cmp1 = fcmp uge double %a, %b
947   %retval = and i1 %cmp, %cmp1
948   ret i1 %retval
951 define i1 @auto_gen_77(double %a, double %b) {
952 ; CHECK-LABEL: @auto_gen_77(
953 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
954 ; CHECK-NEXT:    ret i1 [[TMP1]]
956   %cmp = fcmp ult double %a, %b
957   %cmp1 = fcmp ult double %a, %b
958   %retval = and i1 %cmp, %cmp1
959   ret i1 %retval
962 define i1 @auto_gen_78(double %a, double %b) {
963 ; CHECK-LABEL: @auto_gen_78(
964 ; CHECK-NEXT:    ret i1 false
966   %cmp = fcmp ule double %a, %b
967   %cmp1 = fcmp false double %a, %b
968   %retval = and i1 %cmp, %cmp1
969   ret i1 %retval
972 define i1 @auto_gen_79(double %a, double %b) {
973 ; CHECK-LABEL: @auto_gen_79(
974 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
975 ; CHECK-NEXT:    ret i1 [[TMP1]]
977   %cmp = fcmp ule double %a, %b
978   %cmp1 = fcmp oeq double %a, %b
979   %retval = and i1 %cmp, %cmp1
980   ret i1 %retval
983 define i1 @auto_gen_80(double %a, double %b) {
984 ; CHECK-LABEL: @auto_gen_80(
985 ; CHECK-NEXT:    ret i1 false
987   %cmp = fcmp ule double %a, %b
988   %cmp1 = fcmp ogt double %a, %b
989   %retval = and i1 %cmp, %cmp1
990   ret i1 %retval
993 define i1 @auto_gen_81(double %a, double %b) {
994 ; CHECK-LABEL: @auto_gen_81(
995 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
996 ; CHECK-NEXT:    ret i1 [[TMP1]]
998   %cmp = fcmp ule double %a, %b
999   %cmp1 = fcmp oge double %a, %b
1000   %retval = and i1 %cmp, %cmp1
1001   ret i1 %retval
1004 define i1 @auto_gen_82(double %a, double %b) {
1005 ; CHECK-LABEL: @auto_gen_82(
1006 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1007 ; CHECK-NEXT:    ret i1 [[TMP1]]
1009   %cmp = fcmp ule double %a, %b
1010   %cmp1 = fcmp olt double %a, %b
1011   %retval = and i1 %cmp, %cmp1
1012   ret i1 %retval
1015 define i1 @auto_gen_83(double %a, double %b) {
1016 ; CHECK-LABEL: @auto_gen_83(
1017 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1018 ; CHECK-NEXT:    ret i1 [[TMP1]]
1020   %cmp = fcmp ule double %a, %b
1021   %cmp1 = fcmp ole double %a, %b
1022   %retval = and i1 %cmp, %cmp1
1023   ret i1 %retval
1026 define i1 @auto_gen_84(double %a, double %b) {
1027 ; CHECK-LABEL: @auto_gen_84(
1028 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1029 ; CHECK-NEXT:    ret i1 [[TMP1]]
1031   %cmp = fcmp ule double %a, %b
1032   %cmp1 = fcmp one double %a, %b
1033   %retval = and i1 %cmp, %cmp1
1034   ret i1 %retval
1037 define i1 @auto_gen_85(double %a, double %b) {
1038 ; CHECK-LABEL: @auto_gen_85(
1039 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1040 ; CHECK-NEXT:    ret i1 [[TMP1]]
1042   %cmp = fcmp ule double %a, %b
1043   %cmp1 = fcmp ord double %a, %b
1044   %retval = and i1 %cmp, %cmp1
1045   ret i1 %retval
1048 define i1 @auto_gen_86(double %a, double %b) {
1049 ; CHECK-LABEL: @auto_gen_86(
1050 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1051 ; CHECK-NEXT:    ret i1 [[TMP1]]
1053   %cmp = fcmp ule double %a, %b
1054   %cmp1 = fcmp ueq double %a, %b
1055   %retval = and i1 %cmp, %cmp1
1056   ret i1 %retval
1059 define i1 @auto_gen_87(double %a, double %b) {
1060 ; CHECK-LABEL: @auto_gen_87(
1061 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1062 ; CHECK-NEXT:    ret i1 [[TMP1]]
1064   %cmp = fcmp ule double %a, %b
1065   %cmp1 = fcmp ugt double %a, %b
1066   %retval = and i1 %cmp, %cmp1
1067   ret i1 %retval
1070 define i1 @auto_gen_88(double %a, double %b) {
1071 ; CHECK-LABEL: @auto_gen_88(
1072 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1073 ; CHECK-NEXT:    ret i1 [[TMP1]]
1075   %cmp = fcmp ule double %a, %b
1076   %cmp1 = fcmp uge double %a, %b
1077   %retval = and i1 %cmp, %cmp1
1078   ret i1 %retval
1081 define i1 @auto_gen_89(double %a, double %b) {
1082 ; CHECK-LABEL: @auto_gen_89(
1083 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1084 ; CHECK-NEXT:    ret i1 [[TMP1]]
1086   %cmp = fcmp ule double %a, %b
1087   %cmp1 = fcmp ult double %a, %b
1088   %retval = and i1 %cmp, %cmp1
1089   ret i1 %retval
1092 define i1 @auto_gen_90(double %a, double %b) {
1093 ; CHECK-LABEL: @auto_gen_90(
1094 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
1095 ; CHECK-NEXT:    ret i1 [[TMP1]]
1097   %cmp = fcmp ule double %a, %b
1098   %cmp1 = fcmp ule double %a, %b
1099   %retval = and i1 %cmp, %cmp1
1100   ret i1 %retval
1103 define i1 @auto_gen_91(double %a, double %b) {
1104 ; CHECK-LABEL: @auto_gen_91(
1105 ; CHECK-NEXT:    ret i1 false
1107   %cmp = fcmp une double %a, %b
1108   %cmp1 = fcmp false double %a, %b
1109   %retval = and i1 %cmp, %cmp1
1110   ret i1 %retval
1113 define i1 @auto_gen_92(double %a, double %b) {
1114 ; CHECK-LABEL: @auto_gen_92(
1115 ; CHECK-NEXT:    ret i1 false
1117   %cmp = fcmp une double %a, %b
1118   %cmp1 = fcmp oeq double %a, %b
1119   %retval = and i1 %cmp, %cmp1
1120   ret i1 %retval
1123 define i1 @auto_gen_93(double %a, double %b) {
1124 ; CHECK-LABEL: @auto_gen_93(
1125 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1126 ; CHECK-NEXT:    ret i1 [[TMP1]]
1128   %cmp = fcmp une double %a, %b
1129   %cmp1 = fcmp ogt double %a, %b
1130   %retval = and i1 %cmp, %cmp1
1131   ret i1 %retval
1134 define i1 @auto_gen_94(double %a, double %b) {
1135 ; CHECK-LABEL: @auto_gen_94(
1136 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1137 ; CHECK-NEXT:    ret i1 [[TMP1]]
1139   %cmp = fcmp une double %a, %b
1140   %cmp1 = fcmp oge double %a, %b
1141   %retval = and i1 %cmp, %cmp1
1142   ret i1 %retval
1145 define i1 @auto_gen_95(double %a, double %b) {
1146 ; CHECK-LABEL: @auto_gen_95(
1147 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1148 ; CHECK-NEXT:    ret i1 [[TMP1]]
1150   %cmp = fcmp une double %a, %b
1151   %cmp1 = fcmp olt double %a, %b
1152   %retval = and i1 %cmp, %cmp1
1153   ret i1 %retval
1156 define i1 @auto_gen_96(double %a, double %b) {
1157 ; CHECK-LABEL: @auto_gen_96(
1158 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1159 ; CHECK-NEXT:    ret i1 [[TMP1]]
1161   %cmp = fcmp une double %a, %b
1162   %cmp1 = fcmp ole double %a, %b
1163   %retval = and i1 %cmp, %cmp1
1164   ret i1 %retval
1167 define i1 @auto_gen_97(double %a, double %b) {
1168 ; CHECK-LABEL: @auto_gen_97(
1169 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1170 ; CHECK-NEXT:    ret i1 [[TMP1]]
1172   %cmp = fcmp une double %a, %b
1173   %cmp1 = fcmp one double %a, %b
1174   %retval = and i1 %cmp, %cmp1
1175   ret i1 %retval
1178 define i1 @auto_gen_98(double %a, double %b) {
1179 ; CHECK-LABEL: @auto_gen_98(
1180 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1181 ; CHECK-NEXT:    ret i1 [[TMP1]]
1183   %cmp = fcmp une double %a, %b
1184   %cmp1 = fcmp ord double %a, %b
1185   %retval = and i1 %cmp, %cmp1
1186   ret i1 %retval
1189 define i1 @auto_gen_99(double %a, double %b) {
1190 ; CHECK-LABEL: @auto_gen_99(
1191 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1192 ; CHECK-NEXT:    ret i1 [[TMP1]]
1194   %cmp = fcmp une double %a, %b
1195   %cmp1 = fcmp ueq double %a, %b
1196   %retval = and i1 %cmp, %cmp1
1197   ret i1 %retval
1200 define i1 @auto_gen_100(double %a, double %b) {
1201 ; CHECK-LABEL: @auto_gen_100(
1202 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1203 ; CHECK-NEXT:    ret i1 [[TMP1]]
1205   %cmp = fcmp une double %a, %b
1206   %cmp1 = fcmp ugt double %a, %b
1207   %retval = and i1 %cmp, %cmp1
1208   ret i1 %retval
1211 define i1 @auto_gen_101(double %a, double %b) {
1212 ; CHECK-LABEL: @auto_gen_101(
1213 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1214 ; CHECK-NEXT:    ret i1 [[TMP1]]
1216   %cmp = fcmp une double %a, %b
1217   %cmp1 = fcmp uge double %a, %b
1218   %retval = and i1 %cmp, %cmp1
1219   ret i1 %retval
1222 define i1 @auto_gen_102(double %a, double %b) {
1223 ; CHECK-LABEL: @auto_gen_102(
1224 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1225 ; CHECK-NEXT:    ret i1 [[TMP1]]
1227   %cmp = fcmp une double %a, %b
1228   %cmp1 = fcmp ult double %a, %b
1229   %retval = and i1 %cmp, %cmp1
1230   ret i1 %retval
1233 define i1 @auto_gen_103(double %a, double %b) {
1234 ; CHECK-LABEL: @auto_gen_103(
1235 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1236 ; CHECK-NEXT:    ret i1 [[TMP1]]
1238   %cmp = fcmp une double %a, %b
1239   %cmp1 = fcmp ule double %a, %b
1240   %retval = and i1 %cmp, %cmp1
1241   ret i1 %retval
1244 define i1 @auto_gen_104(double %a, double %b) {
1245 ; CHECK-LABEL: @auto_gen_104(
1246 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
1247 ; CHECK-NEXT:    ret i1 [[TMP1]]
1249   %cmp = fcmp une double %a, %b
1250   %cmp1 = fcmp une double %a, %b
1251   %retval = and i1 %cmp, %cmp1
1252   ret i1 %retval
1255 define i1 @auto_gen_105(double %a, double %b) {
1256 ; CHECK-LABEL: @auto_gen_105(
1257 ; CHECK-NEXT:    ret i1 false
1259   %cmp = fcmp uno double %a, %b
1260   %cmp1 = fcmp false double %a, %b
1261   %retval = and i1 %cmp, %cmp1
1262   ret i1 %retval
1265 define i1 @auto_gen_106(double %a, double %b) {
1266 ; CHECK-LABEL: @auto_gen_106(
1267 ; CHECK-NEXT:    ret i1 false
1269   %cmp = fcmp uno double %a, %b
1270   %cmp1 = fcmp oeq double %a, %b
1271   %retval = and i1 %cmp, %cmp1
1272   ret i1 %retval
1275 define i1 @auto_gen_107(double %a, double %b) {
1276 ; CHECK-LABEL: @auto_gen_107(
1277 ; CHECK-NEXT:    ret i1 false
1279   %cmp = fcmp uno double %a, %b
1280   %cmp1 = fcmp ogt double %a, %b
1281   %retval = and i1 %cmp, %cmp1
1282   ret i1 %retval
1285 define i1 @auto_gen_108(double %a, double %b) {
1286 ; CHECK-LABEL: @auto_gen_108(
1287 ; CHECK-NEXT:    ret i1 false
1289   %cmp = fcmp uno double %a, %b
1290   %cmp1 = fcmp oge double %a, %b
1291   %retval = and i1 %cmp, %cmp1
1292   ret i1 %retval
1295 define i1 @auto_gen_109(double %a, double %b) {
1296 ; CHECK-LABEL: @auto_gen_109(
1297 ; CHECK-NEXT:    ret i1 false
1299   %cmp = fcmp uno double %a, %b
1300   %cmp1 = fcmp olt double %a, %b
1301   %retval = and i1 %cmp, %cmp1
1302   ret i1 %retval
1305 define i1 @auto_gen_110(double %a, double %b) {
1306 ; CHECK-LABEL: @auto_gen_110(
1307 ; CHECK-NEXT:    ret i1 false
1309   %cmp = fcmp uno double %a, %b
1310   %cmp1 = fcmp ole double %a, %b
1311   %retval = and i1 %cmp, %cmp1
1312   ret i1 %retval
1315 define i1 @auto_gen_111(double %a, double %b) {
1316 ; CHECK-LABEL: @auto_gen_111(
1317 ; CHECK-NEXT:    ret i1 false
1319   %cmp = fcmp uno double %a, %b
1320   %cmp1 = fcmp one double %a, %b
1321   %retval = and i1 %cmp, %cmp1
1322   ret i1 %retval
1325 define i1 @auto_gen_112(double %a, double %b) {
1326 ; CHECK-LABEL: @auto_gen_112(
1327 ; CHECK-NEXT:    ret i1 false
1329   %cmp = fcmp uno double %a, %b
1330   %cmp1 = fcmp ord double %a, %b
1331   %retval = and i1 %cmp, %cmp1
1332   ret i1 %retval
1335 define i1 @auto_gen_113(double %a, double %b) {
1336 ; CHECK-LABEL: @auto_gen_113(
1337 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1338 ; CHECK-NEXT:    ret i1 [[TMP1]]
1340   %cmp = fcmp uno double %a, %b
1341   %cmp1 = fcmp ueq double %a, %b
1342   %retval = and i1 %cmp, %cmp1
1343   ret i1 %retval
1346 define i1 @auto_gen_114(double %a, double %b) {
1347 ; CHECK-LABEL: @auto_gen_114(
1348 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1349 ; CHECK-NEXT:    ret i1 [[TMP1]]
1351   %cmp = fcmp uno double %a, %b
1352   %cmp1 = fcmp ugt double %a, %b
1353   %retval = and i1 %cmp, %cmp1
1354   ret i1 %retval
1357 define i1 @auto_gen_115(double %a, double %b) {
1358 ; CHECK-LABEL: @auto_gen_115(
1359 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1360 ; CHECK-NEXT:    ret i1 [[TMP1]]
1362   %cmp = fcmp uno double %a, %b
1363   %cmp1 = fcmp uge double %a, %b
1364   %retval = and i1 %cmp, %cmp1
1365   ret i1 %retval
1368 define i1 @auto_gen_116(double %a, double %b) {
1369 ; CHECK-LABEL: @auto_gen_116(
1370 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1371 ; CHECK-NEXT:    ret i1 [[TMP1]]
1373   %cmp = fcmp uno double %a, %b
1374   %cmp1 = fcmp ult double %a, %b
1375   %retval = and i1 %cmp, %cmp1
1376   ret i1 %retval
1379 define i1 @auto_gen_117(double %a, double %b) {
1380 ; CHECK-LABEL: @auto_gen_117(
1381 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1382 ; CHECK-NEXT:    ret i1 [[TMP1]]
1384   %cmp = fcmp uno double %a, %b
1385   %cmp1 = fcmp ule double %a, %b
1386   %retval = and i1 %cmp, %cmp1
1387   ret i1 %retval
1390 define i1 @auto_gen_118(double %a, double %b) {
1391 ; CHECK-LABEL: @auto_gen_118(
1392 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1393 ; CHECK-NEXT:    ret i1 [[TMP1]]
1395   %cmp = fcmp uno double %a, %b
1396   %cmp1 = fcmp une double %a, %b
1397   %retval = and i1 %cmp, %cmp1
1398   ret i1 %retval
1401 define i1 @auto_gen_119(double %a, double %b) {
1402 ; CHECK-LABEL: @auto_gen_119(
1403 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1404 ; CHECK-NEXT:    ret i1 [[TMP1]]
1406   %cmp = fcmp uno double %a, %b
1407   %cmp1 = fcmp uno double %a, %b
1408   %retval = and i1 %cmp, %cmp1
1409   ret i1 %retval
1412 define i1 @auto_gen_120(double %a, double %b) {
1413 ; CHECK-LABEL: @auto_gen_120(
1414 ; CHECK-NEXT:    ret i1 false
1416   %cmp = fcmp true double %a, %b
1417   %cmp1 = fcmp false double %a, %b
1418   %retval = and i1 %cmp, %cmp1
1419   ret i1 %retval
1422 define i1 @auto_gen_121(double %a, double %b) {
1423 ; CHECK-LABEL: @auto_gen_121(
1424 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1425 ; CHECK-NEXT:    ret i1 [[CMP1]]
1427   %cmp = fcmp true double %a, %b
1428   %cmp1 = fcmp oeq double %a, %b
1429   %retval = and i1 %cmp, %cmp1
1430   ret i1 %retval
1433 define i1 @auto_gen_122(double %a, double %b) {
1434 ; CHECK-LABEL: @auto_gen_122(
1435 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1436 ; CHECK-NEXT:    ret i1 [[CMP1]]
1438   %cmp = fcmp true double %a, %b
1439   %cmp1 = fcmp ogt double %a, %b
1440   %retval = and i1 %cmp, %cmp1
1441   ret i1 %retval
1444 define i1 @auto_gen_123(double %a, double %b) {
1445 ; CHECK-LABEL: @auto_gen_123(
1446 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
1447 ; CHECK-NEXT:    ret i1 [[CMP1]]
1449   %cmp = fcmp true double %a, %b
1450   %cmp1 = fcmp oge double %a, %b
1451   %retval = and i1 %cmp, %cmp1
1452   ret i1 %retval
1455 define i1 @auto_gen_124(double %a, double %b) {
1456 ; CHECK-LABEL: @auto_gen_124(
1457 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1458 ; CHECK-NEXT:    ret i1 [[CMP1]]
1460   %cmp = fcmp true double %a, %b
1461   %cmp1 = fcmp olt double %a, %b
1462   %retval = and i1 %cmp, %cmp1
1463   ret i1 %retval
1466 define i1 @auto_gen_125(double %a, double %b) {
1467 ; CHECK-LABEL: @auto_gen_125(
1468 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1469 ; CHECK-NEXT:    ret i1 [[CMP1]]
1471   %cmp = fcmp true double %a, %b
1472   %cmp1 = fcmp ole double %a, %b
1473   %retval = and i1 %cmp, %cmp1
1474   ret i1 %retval
1477 define i1 @auto_gen_126(double %a, double %b) {
1478 ; CHECK-LABEL: @auto_gen_126(
1479 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1480 ; CHECK-NEXT:    ret i1 [[CMP1]]
1482   %cmp = fcmp true double %a, %b
1483   %cmp1 = fcmp one double %a, %b
1484   %retval = and i1 %cmp, %cmp1
1485   ret i1 %retval
1488 define i1 @auto_gen_127(double %a, double %b) {
1489 ; CHECK-LABEL: @auto_gen_127(
1490 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
1491 ; CHECK-NEXT:    ret i1 [[CMP1]]
1493   %cmp = fcmp true double %a, %b
1494   %cmp1 = fcmp ord double %a, %b
1495   %retval = and i1 %cmp, %cmp1
1496   ret i1 %retval
1499 define i1 @auto_gen_128(double %a, double %b) {
1500 ; CHECK-LABEL: @auto_gen_128(
1501 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1502 ; CHECK-NEXT:    ret i1 [[CMP1]]
1504   %cmp = fcmp true double %a, %b
1505   %cmp1 = fcmp ueq double %a, %b
1506   %retval = and i1 %cmp, %cmp1
1507   ret i1 %retval
1510 define i1 @auto_gen_129(double %a, double %b) {
1511 ; CHECK-LABEL: @auto_gen_129(
1512 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1513 ; CHECK-NEXT:    ret i1 [[CMP1]]
1515   %cmp = fcmp true double %a, %b
1516   %cmp1 = fcmp ugt double %a, %b
1517   %retval = and i1 %cmp, %cmp1
1518   ret i1 %retval
1521 define i1 @auto_gen_130(double %a, double %b) {
1522 ; CHECK-LABEL: @auto_gen_130(
1523 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
1524 ; CHECK-NEXT:    ret i1 [[CMP1]]
1526   %cmp = fcmp true double %a, %b
1527   %cmp1 = fcmp uge double %a, %b
1528   %retval = and i1 %cmp, %cmp1
1529   ret i1 %retval
1532 define i1 @auto_gen_131(double %a, double %b) {
1533 ; CHECK-LABEL: @auto_gen_131(
1534 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1535 ; CHECK-NEXT:    ret i1 [[CMP1]]
1537   %cmp = fcmp true double %a, %b
1538   %cmp1 = fcmp ult double %a, %b
1539   %retval = and i1 %cmp, %cmp1
1540   ret i1 %retval
1543 define i1 @auto_gen_132(double %a, double %b) {
1544 ; CHECK-LABEL: @auto_gen_132(
1545 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
1546 ; CHECK-NEXT:    ret i1 [[CMP1]]
1548   %cmp = fcmp true double %a, %b
1549   %cmp1 = fcmp ule double %a, %b
1550   %retval = and i1 %cmp, %cmp1
1551   ret i1 %retval
1554 define i1 @auto_gen_133(double %a, double %b) {
1555 ; CHECK-LABEL: @auto_gen_133(
1556 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
1557 ; CHECK-NEXT:    ret i1 [[CMP1]]
1559   %cmp = fcmp true double %a, %b
1560   %cmp1 = fcmp une double %a, %b
1561   %retval = and i1 %cmp, %cmp1
1562   ret i1 %retval
1565 define i1 @auto_gen_134(double %a, double %b) {
1566 ; CHECK-LABEL: @auto_gen_134(
1567 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1568 ; CHECK-NEXT:    ret i1 [[CMP1]]
1570   %cmp = fcmp true double %a, %b
1571   %cmp1 = fcmp uno double %a, %b
1572   %retval = and i1 %cmp, %cmp1
1573   ret i1 %retval
1576 define i1 @auto_gen_135(double %a, double %b) {
1577 ; CHECK-LABEL: @auto_gen_135(
1578 ; CHECK-NEXT:    ret i1 true
1580   %cmp = fcmp true double %a, %b
1581   %cmp1 = fcmp true double %a, %b
1582   %retval = and i1 %cmp, %cmp1
1583   ret i1 %retval