Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / Transforms / InstCombine / and-fcmp.ll
blobc7bbc8ab56f9a69decaa8580a909f348241de9dd
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
4 define i1 @PR1738(double %x, double %y) {
5 ; CHECK-LABEL: @PR1738(
6 ; CHECK-NEXT:    [[AND:%.*]] = fcmp ord double [[X:%.*]], [[Y:%.*]]
7 ; CHECK-NEXT:    ret i1 [[AND]]
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 ; TODO: this can be supported by freezing %y
16 define i1 @PR1738_logical(double %x, double %y) {
17 ; CHECK-LABEL: @PR1738_logical(
18 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[X:%.*]], 0.000000e+00
19 ; CHECK-NEXT:    [[CMP2:%.*]] = fcmp ord double [[Y:%.*]], 0.000000e+00
20 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 false
21 ; CHECK-NEXT:    ret i1 [[AND]]
23   %cmp1 = fcmp ord double %x, 0.0
24   %cmp2 = fcmp ord double %y, 0.0
25   %and = select i1 %cmp1, i1 %cmp2, i1 false
26   ret i1 %and
29 define i1 @PR1738_logical_noundef(double %x, double noundef %y) {
30 ; CHECK-LABEL: @PR1738_logical_noundef(
31 ; CHECK-NEXT:    [[AND:%.*]] = fcmp ord double [[X:%.*]], [[Y:%.*]]
32 ; CHECK-NEXT:    ret i1 [[AND]]
34   %cmp1 = fcmp ord double %x, 0.0
35   %cmp2 = fcmp ord double %y, 0.0
36   %and = select i1 %cmp1, i1 %cmp2, i1 false
37   ret i1 %and
40 define <2 x i1> @PR1738_vec_undef(<2 x double> %x, <2 x double> %y) {
41 ; CHECK-LABEL: @PR1738_vec_undef(
42 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord <2 x double> [[X:%.*]], <double 0.000000e+00, double undef>
43 ; CHECK-NEXT:    [[CMP2:%.*]] = fcmp ord <2 x double> [[Y:%.*]], <double undef, double 0.000000e+00>
44 ; CHECK-NEXT:    [[OR:%.*]] = and <2 x i1> [[CMP1]], [[CMP2]]
45 ; CHECK-NEXT:    ret <2 x i1> [[OR]]
47   %cmp1 = fcmp ord <2 x double> %x, <double 0.0, double undef>
48   %cmp2 = fcmp ord <2 x double> %y, <double undef, double 0.0>
49   %or = and <2 x i1> %cmp1, %cmp2
50   ret <2 x i1> %or
53 define <2 x i1> @PR1738_vec_poison(<2 x double> %x, <2 x double> %y) {
54 ; CHECK-LABEL: @PR1738_vec_poison(
55 ; CHECK-NEXT:    [[OR:%.*]] = fcmp ord <2 x double> [[X:%.*]], [[Y:%.*]]
56 ; CHECK-NEXT:    ret <2 x i1> [[OR]]
58   %cmp1 = fcmp ord <2 x double> %x, <double 0.0, double poison>
59   %cmp2 = fcmp ord <2 x double> %y, <double poison, double 0.0>
60   %or = and <2 x i1> %cmp1, %cmp2
61   ret <2 x i1> %or
64 define i1 @PR41069(i1 %z, float %c, float %d) {
65 ; CHECK-LABEL: @PR41069(
66 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord float [[D:%.*]], [[C:%.*]]
67 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
68 ; CHECK-NEXT:    ret i1 [[R]]
70   %ord1 = fcmp arcp ord float %c, 0.0
71   %and = and i1 %ord1, %z
72   %ord2 = fcmp afn ord float %d, 0.0
73   %r = and i1 %and, %ord2
74   ret i1 %r
77 ; FIXME: this can be supported by freezing %d
78 define i1 @PR41069_logical(i1 %z, float %c, float %d) {
79 ; CHECK-LABEL: @PR41069_logical(
80 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp arcp ord float [[C:%.*]], 0.000000e+00
81 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[ORD1]], i1 [[Z:%.*]], i1 false
82 ; CHECK-NEXT:    [[ORD2:%.*]] = fcmp afn ord float [[D:%.*]], 0.000000e+00
83 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[AND]], i1 [[ORD2]], i1 false
84 ; CHECK-NEXT:    ret i1 [[R]]
86   %ord1 = fcmp arcp ord float %c, 0.0
87   %and = select i1 %ord1, i1 %z, i1 false
88   %ord2 = fcmp afn ord float %d, 0.0
89   %r = select i1 %and, i1 %ord2, i1 false
90   ret i1 %r
93 define i1 @PR41069_commute(i1 %z, float %c, float %d) {
94 ; CHECK-LABEL: @PR41069_commute(
95 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ninf ord float [[D:%.*]], [[C:%.*]]
96 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
97 ; CHECK-NEXT:    ret i1 [[R]]
99   %ord1 = fcmp ninf ord float %c, 0.0
100   %and = and i1 %ord1, %z
101   %ord2 = fcmp ninf reassoc ord float %d, 0.0
102   %r = and i1 %ord2, %and
103   ret i1 %r
106 ; TODO: this should be fixed using freeze
107 define i1 @PR41069_commute_logical(i1 %z, float %c, float %d) {
108 ; CHECK-LABEL: @PR41069_commute_logical(
109 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ninf ord float [[C:%.*]], 0.000000e+00
110 ; CHECK-NEXT:    [[ORD2:%.*]] = fcmp reassoc ninf ord float [[D:%.*]], 0.000000e+00
111 ; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[ORD2]], i1 [[ORD1]], i1 false
112 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[TMP1]], i1 [[Z:%.*]], i1 false
113 ; CHECK-NEXT:    ret i1 [[R]]
115   %ord1 = fcmp ninf ord float %c, 0.0
116   %and = select i1 %ord1, i1 %z, i1 false
117   %ord2 = fcmp ninf reassoc ord float %d, 0.0
118   %r = select i1 %ord2, i1 %and, i1 false
119   ret i1 %r
122 ; Commute differently and make sure vectors work.
124 define <2 x i1> @PR41069_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
125 ; CHECK-LABEL: @PR41069_vec(
126 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
127 ; CHECK-NEXT:    [[ORD2:%.*]] = fcmp ord <2 x double> [[C:%.*]], <double 0.000000e+00, double undef>
128 ; CHECK-NEXT:    [[AND:%.*]] = and <2 x i1> [[ORD1]], [[ORD2]]
129 ; CHECK-NEXT:    [[ORD3:%.*]] = fcmp ord <2 x double> [[D:%.*]], zeroinitializer
130 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[AND]], [[ORD3]]
131 ; CHECK-NEXT:    ret <2 x i1> [[R]]
133   %ord1 = fcmp ord <2 x double> %a, %b
134   %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
135   %and = and <2 x i1> %ord1, %ord2
136   %ord3 = fcmp ord <2 x double> %d, zeroinitializer
137   %r = and <2 x i1> %and, %ord3
138   ret <2 x i1> %r
141 define <2 x i1> @PR41069_vec_commute(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
142 ; CHECK-LABEL: @PR41069_vec_commute(
143 ; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
144 ; CHECK-NEXT:    [[ORD2:%.*]] = fcmp ord <2 x double> [[C:%.*]], <double 0.000000e+00, double undef>
145 ; CHECK-NEXT:    [[AND:%.*]] = and <2 x i1> [[ORD1]], [[ORD2]]
146 ; CHECK-NEXT:    [[ORD3:%.*]] = fcmp ord <2 x double> [[D:%.*]], zeroinitializer
147 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[ORD3]], [[AND]]
148 ; CHECK-NEXT:    ret <2 x i1> [[R]]
150   %ord1 = fcmp ord <2 x double> %a, %b
151   %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
152   %and = and <2 x i1> %ord1, %ord2
153   %ord3 = fcmp ord <2 x double> %d, zeroinitializer
154   %r = and <2 x i1> %ord3, %and
155   ret <2 x i1> %r
158 define i1 @PR15737(float %a, double %b) {
159 ; CHECK-LABEL: @PR15737(
160 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord float [[A:%.*]], 0.000000e+00
161 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[B:%.*]], 0.000000e+00
162 ; CHECK-NEXT:    [[AND:%.*]] = and i1 [[CMP]], [[CMP1]]
163 ; CHECK-NEXT:    ret i1 [[AND]]
165   %cmp = fcmp ord float %a, 0.000000e+00
166   %cmp1 = fcmp ord double %b, 0.000000e+00
167   %and = and i1 %cmp, %cmp1
168   ret i1 %and
171 define i1 @PR15737_logical(float %a, double %b) {
172 ; CHECK-LABEL: @PR15737_logical(
173 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord float [[A:%.*]], 0.000000e+00
174 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[B:%.*]], 0.000000e+00
175 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[CMP]], i1 [[CMP1]], i1 false
176 ; CHECK-NEXT:    ret i1 [[AND]]
178   %cmp = fcmp ord float %a, 0.000000e+00
179   %cmp1 = fcmp ord double %b, 0.000000e+00
180   %and = select i1 %cmp, i1 %cmp1, i1 false
181   ret i1 %and
184 define <2 x i1> @t9(<2 x float> %a, <2 x double> %b) {
185 ; CHECK-LABEL: @t9(
186 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord <2 x float> [[A:%.*]], zeroinitializer
187 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord <2 x double> [[B:%.*]], zeroinitializer
188 ; CHECK-NEXT:    [[AND:%.*]] = and <2 x i1> [[CMP]], [[CMP1]]
189 ; CHECK-NEXT:    ret <2 x i1> [[AND]]
191   %cmp = fcmp ord <2 x float> %a, zeroinitializer
192   %cmp1 = fcmp ord <2 x double> %b, zeroinitializer
193   %and = and <2 x i1> %cmp, %cmp1
194   ret <2 x i1> %and
197 define i1 @fcmp_ord_nonzero(float %x, float %y) {
198 ; CHECK-LABEL: @fcmp_ord_nonzero(
199 ; CHECK-NEXT:    [[AND:%.*]] = fcmp ord float [[X:%.*]], [[Y:%.*]]
200 ; CHECK-NEXT:    ret i1 [[AND]]
202   %cmp1 = fcmp ord float %x, 1.0
203   %cmp2 = fcmp ord float %y, 2.0
204   %and = and i1 %cmp1, %cmp2
205   ret i1 %and
208 ; TODO: this can be supported by freezing %y
209 define i1 @fcmp_ord_nonzero_logical(float %x, float %y) {
210 ; CHECK-LABEL: @fcmp_ord_nonzero_logical(
211 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord float [[X:%.*]], 0.000000e+00
212 ; CHECK-NEXT:    [[CMP2:%.*]] = fcmp ord float [[Y:%.*]], 0.000000e+00
213 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 false
214 ; CHECK-NEXT:    ret i1 [[AND]]
216   %cmp1 = fcmp ord float %x, 1.0
217   %cmp2 = fcmp ord float %y, 2.0
218   %and = select i1 %cmp1, i1 %cmp2, i1 false
219   ret i1 %and
222 define <3 x i1> @fcmp_ord_nonzero_vec(<3 x float> %x, <3 x float> %y) {
223 ; CHECK-LABEL: @fcmp_ord_nonzero_vec(
224 ; CHECK-NEXT:    [[AND:%.*]] = fcmp ord <3 x float> [[X:%.*]], [[Y:%.*]]
225 ; CHECK-NEXT:    ret <3 x i1> [[AND]]
227   %cmp1 = fcmp ord <3 x float> %x, <float 1.0, float 2.0, float 3.0>
228   %cmp2 = fcmp ord <3 x float> %y, <float 3.0, float 2.0, float 1.0>
229   %and = and <3 x i1> %cmp1, %cmp2
230   ret <3 x i1> %and
233 define i1 @auto_gen_0(double %a, double %b) {
234 ; CHECK-LABEL: @auto_gen_0(
235 ; CHECK-NEXT:    ret i1 false
237   %cmp = fcmp false double %a, %b
238   %cmp1 = fcmp false double %a, %b
239   %retval = and i1 %cmp, %cmp1
240   ret i1 %retval
243 define i1 @auto_gen_0_logical(double %a, double %b) {
244 ; CHECK-LABEL: @auto_gen_0_logical(
245 ; CHECK-NEXT:    ret i1 false
247   %cmp = fcmp false double %a, %b
248   %cmp1 = fcmp false double %a, %b
249   %retval = select i1 %cmp, i1 %cmp1, i1 false
250   ret i1 %retval
253 define i1 @auto_gen_0_logical_fmf(double %a, double %b) {
254 ; CHECK-LABEL: @auto_gen_0_logical_fmf(
255 ; CHECK-NEXT:    ret i1 false
257   %cmp = fcmp false double %a, %b
258   %cmp1 = fcmp fast false double %a, %b
259   %retval = select i1 %cmp, i1 %cmp1, i1 false
260   ret i1 %retval
263 define i1 @auto_gen_1(double %a, double %b) {
264 ; CHECK-LABEL: @auto_gen_1(
265 ; CHECK-NEXT:    ret i1 false
267   %cmp = fcmp oeq double %a, %b
268   %cmp1 = fcmp false double %a, %b
269   %retval = and i1 %cmp, %cmp1
270   ret i1 %retval
273 define i1 @auto_gen_1_logical(double %a, double %b) {
274 ; CHECK-LABEL: @auto_gen_1_logical(
275 ; CHECK-NEXT:    ret i1 false
277   %cmp = fcmp oeq double %a, %b
278   %cmp1 = fcmp false double %a, %b
279   %retval = select i1 %cmp, i1 %cmp1, i1 false
280   ret i1 %retval
283 define i1 @auto_gen_1_logical_fmf(double %a, double %b) {
284 ; CHECK-LABEL: @auto_gen_1_logical_fmf(
285 ; CHECK-NEXT:    ret i1 false
287   %cmp = fcmp fast oeq double %a, %b
288   %cmp1 = fcmp fast false double %a, %b
289   %retval = select i1 %cmp, i1 %cmp1, i1 false
290   ret i1 %retval
293 define i1 @auto_gen_2(double %a, double %b) {
294 ; CHECK-LABEL: @auto_gen_2(
295 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
296 ; CHECK-NEXT:    ret i1 [[RETVAL]]
298   %cmp = fcmp oeq double %a, %b
299   %cmp1 = fcmp oeq double %a, %b
300   %retval = and i1 %cmp, %cmp1
301   ret i1 %retval
304 define i1 @auto_gen_2_logical(double %a, double %b) {
305 ; CHECK-LABEL: @auto_gen_2_logical(
306 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
307 ; CHECK-NEXT:    ret i1 [[RETVAL]]
309   %cmp = fcmp oeq double %a, %b
310   %cmp1 = fcmp oeq double %a, %b
311   %retval = select i1 %cmp, i1 %cmp1, i1 false
312   ret i1 %retval
315 define i1 @auto_gen_2_logical_fmf(double %a, double %b) {
316 ; CHECK-LABEL: @auto_gen_2_logical_fmf(
317 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
318 ; CHECK-NEXT:    ret i1 [[RETVAL]]
320   %cmp = fcmp oeq double %a, %b
321   %cmp1 = fcmp fast oeq double %a, %b
322   %retval = select i1 %cmp, i1 %cmp1, i1 false
323   ret i1 %retval
326 define i1 @auto_gen_3(double %a, double %b) {
327 ; CHECK-LABEL: @auto_gen_3(
328 ; CHECK-NEXT:    ret i1 false
330   %cmp = fcmp ogt double %a, %b
331   %cmp1 = fcmp false double %a, %b
332   %retval = and i1 %cmp, %cmp1
333   ret i1 %retval
336 define i1 @auto_gen_3_logical(double %a, double %b) {
337 ; CHECK-LABEL: @auto_gen_3_logical(
338 ; CHECK-NEXT:    ret i1 false
340   %cmp = fcmp ogt double %a, %b
341   %cmp1 = fcmp false double %a, %b
342   %retval = select i1 %cmp, i1 %cmp1, i1 false
343   ret i1 %retval
346 define i1 @auto_gen_3_logical_fmf(double %a, double %b) {
347 ; CHECK-LABEL: @auto_gen_3_logical_fmf(
348 ; CHECK-NEXT:    ret i1 false
350   %cmp = fcmp fast ogt double %a, %b
351   %cmp1 = fcmp fast false double %a, %b
352   %retval = select i1 %cmp, i1 %cmp1, i1 false
353   ret i1 %retval
356 define i1 @auto_gen_4(double %a, double %b) {
357 ; CHECK-LABEL: @auto_gen_4(
358 ; CHECK-NEXT:    ret i1 false
360   %cmp = fcmp ogt double %a, %b
361   %cmp1 = fcmp oeq double %a, %b
362   %retval = and i1 %cmp, %cmp1
363   ret i1 %retval
366 define i1 @auto_gen_4_logical(double %a, double %b) {
367 ; CHECK-LABEL: @auto_gen_4_logical(
368 ; CHECK-NEXT:    ret i1 false
370   %cmp = fcmp ogt double %a, %b
371   %cmp1 = fcmp oeq double %a, %b
372   %retval = select i1 %cmp, i1 %cmp1, i1 false
373   ret i1 %retval
376 define i1 @auto_gen_4_logical_fmf(double %a, double %b) {
377 ; CHECK-LABEL: @auto_gen_4_logical_fmf(
378 ; CHECK-NEXT:    ret i1 false
380   %cmp = fcmp ogt double %a, %b
381   %cmp1 = fcmp fast oeq double %a, %b
382   %retval = select i1 %cmp, i1 %cmp1, i1 false
383   ret i1 %retval
386 define i1 @auto_gen_5(double %a, double %b) {
387 ; CHECK-LABEL: @auto_gen_5(
388 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
389 ; CHECK-NEXT:    ret i1 [[RETVAL]]
391   %cmp = fcmp ogt double %a, %b
392   %cmp1 = fcmp ogt double %a, %b
393   %retval = and i1 %cmp, %cmp1
394   ret i1 %retval
397 define i1 @auto_gen_5_logical(double %a, double %b) {
398 ; CHECK-LABEL: @auto_gen_5_logical(
399 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
400 ; CHECK-NEXT:    ret i1 [[RETVAL]]
402   %cmp = fcmp ogt double %a, %b
403   %cmp1 = fcmp ogt double %a, %b
404   %retval = select i1 %cmp, i1 %cmp1, i1 false
405   ret i1 %retval
408 define i1 @auto_gen_5_logical_fmf(double %a, double %b) {
409 ; CHECK-LABEL: @auto_gen_5_logical_fmf(
410 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
411 ; CHECK-NEXT:    ret i1 [[RETVAL]]
413   %cmp = fcmp fast ogt double %a, %b
414   %cmp1 = fcmp fast ogt double %a, %b
415   %retval = select i1 %cmp, i1 %cmp1, i1 false
416   ret i1 %retval
419 define i1 @auto_gen_6(double %a, double %b) {
420 ; CHECK-LABEL: @auto_gen_6(
421 ; CHECK-NEXT:    ret i1 false
423   %cmp = fcmp oge double %a, %b
424   %cmp1 = fcmp false double %a, %b
425   %retval = and i1 %cmp, %cmp1
426   ret i1 %retval
429 define i1 @auto_gen_6_logical(double %a, double %b) {
430 ; CHECK-LABEL: @auto_gen_6_logical(
431 ; CHECK-NEXT:    ret i1 false
433   %cmp = fcmp oge double %a, %b
434   %cmp1 = fcmp false double %a, %b
435   %retval = select i1 %cmp, i1 %cmp1, i1 false
436   ret i1 %retval
439 define i1 @auto_gen_6_logical_fmf(double %a, double %b) {
440 ; CHECK-LABEL: @auto_gen_6_logical_fmf(
441 ; CHECK-NEXT:    ret i1 false
443   %cmp = fcmp oge double %a, %b
444   %cmp1 = fcmp fast false double %a, %b
445   %retval = select i1 %cmp, i1 %cmp1, i1 false
446   ret i1 %retval
449 define i1 @auto_gen_7(double %a, double %b) {
450 ; CHECK-LABEL: @auto_gen_7(
451 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
452 ; CHECK-NEXT:    ret i1 [[RETVAL]]
454   %cmp = fcmp oge double %a, %b
455   %cmp1 = fcmp oeq double %a, %b
456   %retval = and i1 %cmp, %cmp1
457   ret i1 %retval
460 define i1 @auto_gen_7_logical(double %a, double %b) {
461 ; CHECK-LABEL: @auto_gen_7_logical(
462 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
463 ; CHECK-NEXT:    ret i1 [[RETVAL]]
465   %cmp = fcmp oge double %a, %b
466   %cmp1 = fcmp oeq double %a, %b
467   %retval = select i1 %cmp, i1 %cmp1, i1 false
468   ret i1 %retval
471 define i1 @auto_gen_7_logical_fmf(double %a, double %b) {
472 ; CHECK-LABEL: @auto_gen_7_logical_fmf(
473 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
474 ; CHECK-NEXT:    ret i1 [[RETVAL]]
476   %cmp = fcmp fast oge double %a, %b
477   %cmp1 = fcmp fast oeq double %a, %b
478   %retval = select i1 %cmp, i1 %cmp1, i1 false
479   ret i1 %retval
482 define i1 @auto_gen_8(double %a, double %b) {
483 ; CHECK-LABEL: @auto_gen_8(
484 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
485 ; CHECK-NEXT:    ret i1 [[RETVAL]]
487   %cmp = fcmp oge double %a, %b
488   %cmp1 = fcmp ogt double %a, %b
489   %retval = and i1 %cmp, %cmp1
490   ret i1 %retval
493 define i1 @auto_gen_8_logical(double %a, double %b) {
494 ; CHECK-LABEL: @auto_gen_8_logical(
495 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
496 ; CHECK-NEXT:    ret i1 [[RETVAL]]
498   %cmp = fcmp oge double %a, %b
499   %cmp1 = fcmp ogt double %a, %b
500   %retval = select i1 %cmp, i1 %cmp1, i1 false
501   ret i1 %retval
504 define i1 @auto_gen_8_logical_fmf(double %a, double %b) {
505 ; CHECK-LABEL: @auto_gen_8_logical_fmf(
506 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
507 ; CHECK-NEXT:    ret i1 [[RETVAL]]
509   %cmp = fcmp oge double %a, %b
510   %cmp1 = fcmp fast ogt double %a, %b
511   %retval = select i1 %cmp, i1 %cmp1, i1 false
512   ret i1 %retval
515 define i1 @auto_gen_9(double %a, double %b) {
516 ; CHECK-LABEL: @auto_gen_9(
517 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
518 ; CHECK-NEXT:    ret i1 [[RETVAL]]
520   %cmp = fcmp oge double %a, %b
521   %cmp1 = fcmp oge double %a, %b
522   %retval = and i1 %cmp, %cmp1
523   ret i1 %retval
526 define i1 @auto_gen_9_logical(double %a, double %b) {
527 ; CHECK-LABEL: @auto_gen_9_logical(
528 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
529 ; CHECK-NEXT:    ret i1 [[RETVAL]]
531   %cmp = fcmp oge double %a, %b
532   %cmp1 = fcmp oge double %a, %b
533   %retval = select i1 %cmp, i1 %cmp1, i1 false
534   ret i1 %retval
537 define i1 @auto_gen_9_logical_fmf(double %a, double %b) {
538 ; CHECK-LABEL: @auto_gen_9_logical_fmf(
539 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
540 ; CHECK-NEXT:    ret i1 [[RETVAL]]
542   %cmp = fcmp fast oge double %a, %b
543   %cmp1 = fcmp fast oge double %a, %b
544   %retval = select i1 %cmp, i1 %cmp1, i1 false
545   ret i1 %retval
548 define i1 @auto_gen_10(double %a, double %b) {
549 ; CHECK-LABEL: @auto_gen_10(
550 ; CHECK-NEXT:    ret i1 false
552   %cmp = fcmp olt double %a, %b
553   %cmp1 = fcmp false double %a, %b
554   %retval = and i1 %cmp, %cmp1
555   ret i1 %retval
558 define i1 @auto_gen_10_logical(double %a, double %b) {
559 ; CHECK-LABEL: @auto_gen_10_logical(
560 ; CHECK-NEXT:    ret i1 false
562   %cmp = fcmp olt double %a, %b
563   %cmp1 = fcmp false double %a, %b
564   %retval = select i1 %cmp, i1 %cmp1, i1 false
565   ret i1 %retval
568 define i1 @auto_gen_10_logical_fmf(double %a, double %b) {
569 ; CHECK-LABEL: @auto_gen_10_logical_fmf(
570 ; CHECK-NEXT:    ret i1 false
572   %cmp = fcmp olt double %a, %b
573   %cmp1 = fcmp fast false double %a, %b
574   %retval = select i1 %cmp, i1 %cmp1, i1 false
575   ret i1 %retval
578 define i1 @auto_gen_11(double %a, double %b) {
579 ; CHECK-LABEL: @auto_gen_11(
580 ; CHECK-NEXT:    ret i1 false
582   %cmp = fcmp olt double %a, %b
583   %cmp1 = fcmp oeq double %a, %b
584   %retval = and i1 %cmp, %cmp1
585   ret i1 %retval
588 define i1 @auto_gen_11_logical(double %a, double %b) {
589 ; CHECK-LABEL: @auto_gen_11_logical(
590 ; CHECK-NEXT:    ret i1 false
592   %cmp = fcmp olt double %a, %b
593   %cmp1 = fcmp oeq double %a, %b
594   %retval = select i1 %cmp, i1 %cmp1, i1 false
595   ret i1 %retval
598 define i1 @auto_gen_11_logical_fmf(double %a, double %b) {
599 ; CHECK-LABEL: @auto_gen_11_logical_fmf(
600 ; CHECK-NEXT:    ret i1 false
602   %cmp = fcmp fast olt double %a, %b
603   %cmp1 = fcmp fast oeq double %a, %b
604   %retval = select i1 %cmp, i1 %cmp1, i1 false
605   ret i1 %retval
608 define i1 @auto_gen_12(double %a, double %b) {
609 ; CHECK-LABEL: @auto_gen_12(
610 ; CHECK-NEXT:    ret i1 false
612   %cmp = fcmp olt double %a, %b
613   %cmp1 = fcmp ogt double %a, %b
614   %retval = and i1 %cmp, %cmp1
615   ret i1 %retval
618 define i1 @auto_gen_12_logical(double %a, double %b) {
619 ; CHECK-LABEL: @auto_gen_12_logical(
620 ; CHECK-NEXT:    ret i1 false
622   %cmp = fcmp olt double %a, %b
623   %cmp1 = fcmp ogt double %a, %b
624   %retval = select i1 %cmp, i1 %cmp1, i1 false
625   ret i1 %retval
628 define i1 @auto_gen_12_logical_fmf(double %a, double %b) {
629 ; CHECK-LABEL: @auto_gen_12_logical_fmf(
630 ; CHECK-NEXT:    ret i1 false
632   %cmp = fcmp olt double %a, %b
633   %cmp1 = fcmp fast ogt double %a, %b
634   %retval = select i1 %cmp, i1 %cmp1, i1 false
635   ret i1 %retval
638 define i1 @auto_gen_13(double %a, double %b) {
639 ; CHECK-LABEL: @auto_gen_13(
640 ; CHECK-NEXT:    ret i1 false
642   %cmp = fcmp olt double %a, %b
643   %cmp1 = fcmp oge double %a, %b
644   %retval = and i1 %cmp, %cmp1
645   ret i1 %retval
648 define i1 @auto_gen_13_logical(double %a, double %b) {
649 ; CHECK-LABEL: @auto_gen_13_logical(
650 ; CHECK-NEXT:    ret i1 false
652   %cmp = fcmp olt double %a, %b
653   %cmp1 = fcmp oge double %a, %b
654   %retval = select i1 %cmp, i1 %cmp1, i1 false
655   ret i1 %retval
658 define i1 @auto_gen_13_logical_fmf(double %a, double %b) {
659 ; CHECK-LABEL: @auto_gen_13_logical_fmf(
660 ; CHECK-NEXT:    ret i1 false
662   %cmp = fcmp fast olt double %a, %b
663   %cmp1 = fcmp fast oge double %a, %b
664   %retval = select i1 %cmp, i1 %cmp1, i1 false
665   ret i1 %retval
668 define i1 @auto_gen_14(double %a, double %b) {
669 ; CHECK-LABEL: @auto_gen_14(
670 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
671 ; CHECK-NEXT:    ret i1 [[RETVAL]]
673   %cmp = fcmp olt double %a, %b
674   %cmp1 = fcmp olt double %a, %b
675   %retval = and i1 %cmp, %cmp1
676   ret i1 %retval
679 define i1 @auto_gen_14_logical(double %a, double %b) {
680 ; CHECK-LABEL: @auto_gen_14_logical(
681 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
682 ; CHECK-NEXT:    ret i1 [[RETVAL]]
684   %cmp = fcmp olt double %a, %b
685   %cmp1 = fcmp olt double %a, %b
686   %retval = select i1 %cmp, i1 %cmp1, i1 false
687   ret i1 %retval
690 define i1 @auto_gen_14_logical_fmf(double %a, double %b) {
691 ; CHECK-LABEL: @auto_gen_14_logical_fmf(
692 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
693 ; CHECK-NEXT:    ret i1 [[RETVAL]]
695   %cmp = fcmp olt double %a, %b
696   %cmp1 = fcmp fast olt double %a, %b
697   %retval = select i1 %cmp, i1 %cmp1, i1 false
698   ret i1 %retval
701 define i1 @auto_gen_15(double %a, double %b) {
702 ; CHECK-LABEL: @auto_gen_15(
703 ; CHECK-NEXT:    ret i1 false
705   %cmp = fcmp ole double %a, %b
706   %cmp1 = fcmp false double %a, %b
707   %retval = and i1 %cmp, %cmp1
708   ret i1 %retval
711 define i1 @auto_gen_15_logical(double %a, double %b) {
712 ; CHECK-LABEL: @auto_gen_15_logical(
713 ; CHECK-NEXT:    ret i1 false
715   %cmp = fcmp ole double %a, %b
716   %cmp1 = fcmp false double %a, %b
717   %retval = select i1 %cmp, i1 %cmp1, i1 false
718   ret i1 %retval
721 define i1 @auto_gen_15_logical_fmf(double %a, double %b) {
722 ; CHECK-LABEL: @auto_gen_15_logical_fmf(
723 ; CHECK-NEXT:    ret i1 false
725   %cmp = fcmp fast ole double %a, %b
726   %cmp1 = fcmp fast false double %a, %b
727   %retval = select i1 %cmp, i1 %cmp1, i1 false
728   ret i1 %retval
731 define i1 @auto_gen_16(double %a, double %b) {
732 ; CHECK-LABEL: @auto_gen_16(
733 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
734 ; CHECK-NEXT:    ret i1 [[RETVAL]]
736   %cmp = fcmp ole double %a, %b
737   %cmp1 = fcmp oeq double %a, %b
738   %retval = and i1 %cmp, %cmp1
739   ret i1 %retval
742 define i1 @auto_gen_16_logical(double %a, double %b) {
743 ; CHECK-LABEL: @auto_gen_16_logical(
744 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
745 ; CHECK-NEXT:    ret i1 [[RETVAL]]
747   %cmp = fcmp ole double %a, %b
748   %cmp1 = fcmp oeq double %a, %b
749   %retval = select i1 %cmp, i1 %cmp1, i1 false
750   ret i1 %retval
753 define i1 @auto_gen_16_logical_fmf(double %a, double %b) {
754 ; CHECK-LABEL: @auto_gen_16_logical_fmf(
755 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
756 ; CHECK-NEXT:    ret i1 [[RETVAL]]
758   %cmp = fcmp ole double %a, %b
759   %cmp1 = fcmp fast oeq double %a, %b
760   %retval = select i1 %cmp, i1 %cmp1, i1 false
761   ret i1 %retval
764 define i1 @auto_gen_17(double %a, double %b) {
765 ; CHECK-LABEL: @auto_gen_17(
766 ; CHECK-NEXT:    ret i1 false
768   %cmp = fcmp ole double %a, %b
769   %cmp1 = fcmp ogt double %a, %b
770   %retval = and i1 %cmp, %cmp1
771   ret i1 %retval
774 define i1 @auto_gen_17_logical(double %a, double %b) {
775 ; CHECK-LABEL: @auto_gen_17_logical(
776 ; CHECK-NEXT:    ret i1 false
778   %cmp = fcmp ole double %a, %b
779   %cmp1 = fcmp ogt double %a, %b
780   %retval = select i1 %cmp, i1 %cmp1, i1 false
781   ret i1 %retval
784 define i1 @auto_gen_17_logical_fmf(double %a, double %b) {
785 ; CHECK-LABEL: @auto_gen_17_logical_fmf(
786 ; CHECK-NEXT:    ret i1 false
788   %cmp = fcmp fast ole double %a, %b
789   %cmp1 = fcmp fast ogt double %a, %b
790   %retval = select i1 %cmp, i1 %cmp1, i1 false
791   ret i1 %retval
794 define i1 @auto_gen_18(double %a, double %b) {
795 ; CHECK-LABEL: @auto_gen_18(
796 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
797 ; CHECK-NEXT:    ret i1 [[RETVAL]]
799   %cmp = fcmp ole double %a, %b
800   %cmp1 = fcmp oge double %a, %b
801   %retval = and i1 %cmp, %cmp1
802   ret i1 %retval
805 define i1 @auto_gen_18_logical(double %a, double %b) {
806 ; CHECK-LABEL: @auto_gen_18_logical(
807 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
808 ; CHECK-NEXT:    ret i1 [[RETVAL]]
810   %cmp = fcmp ole double %a, %b
811   %cmp1 = fcmp oge double %a, %b
812   %retval = select i1 %cmp, i1 %cmp1, i1 false
813   ret i1 %retval
816 define i1 @auto_gen_18_logical_fmf(double %a, double %b) {
817 ; CHECK-LABEL: @auto_gen_18_logical_fmf(
818 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
819 ; CHECK-NEXT:    ret i1 [[RETVAL]]
821   %cmp = fcmp ole double %a, %b
822   %cmp1 = fcmp fast oge double %a, %b
823   %retval = select i1 %cmp, i1 %cmp1, i1 false
824   ret i1 %retval
827 define i1 @auto_gen_19(double %a, double %b) {
828 ; CHECK-LABEL: @auto_gen_19(
829 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
830 ; CHECK-NEXT:    ret i1 [[RETVAL]]
832   %cmp = fcmp ole double %a, %b
833   %cmp1 = fcmp olt double %a, %b
834   %retval = and i1 %cmp, %cmp1
835   ret i1 %retval
838 define i1 @auto_gen_19_logical(double %a, double %b) {
839 ; CHECK-LABEL: @auto_gen_19_logical(
840 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
841 ; CHECK-NEXT:    ret i1 [[RETVAL]]
843   %cmp = fcmp ole double %a, %b
844   %cmp1 = fcmp olt double %a, %b
845   %retval = select i1 %cmp, i1 %cmp1, i1 false
846   ret i1 %retval
849 define i1 @auto_gen_19_logical_fmf(double %a, double %b) {
850 ; CHECK-LABEL: @auto_gen_19_logical_fmf(
851 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
852 ; CHECK-NEXT:    ret i1 [[RETVAL]]
854   %cmp = fcmp fast ole double %a, %b
855   %cmp1 = fcmp fast olt double %a, %b
856   %retval = select i1 %cmp, i1 %cmp1, i1 false
857   ret i1 %retval
860 define i1 @auto_gen_20(double %a, double %b) {
861 ; CHECK-LABEL: @auto_gen_20(
862 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
863 ; CHECK-NEXT:    ret i1 [[RETVAL]]
865   %cmp = fcmp ole double %a, %b
866   %cmp1 = fcmp ole double %a, %b
867   %retval = and i1 %cmp, %cmp1
868   ret i1 %retval
871 define i1 @auto_gen_20_logical(double %a, double %b) {
872 ; CHECK-LABEL: @auto_gen_20_logical(
873 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
874 ; CHECK-NEXT:    ret i1 [[RETVAL]]
876   %cmp = fcmp ole double %a, %b
877   %cmp1 = fcmp ole double %a, %b
878   %retval = select i1 %cmp, i1 %cmp1, i1 false
879   ret i1 %retval
882 define i1 @auto_gen_20_logical_fmf(double %a, double %b) {
883 ; CHECK-LABEL: @auto_gen_20_logical_fmf(
884 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
885 ; CHECK-NEXT:    ret i1 [[RETVAL]]
887   %cmp = fcmp ole double %a, %b
888   %cmp1 = fcmp fast ole double %a, %b
889   %retval = select i1 %cmp, i1 %cmp1, i1 false
890   ret i1 %retval
893 define i1 @auto_gen_21(double %a, double %b) {
894 ; CHECK-LABEL: @auto_gen_21(
895 ; CHECK-NEXT:    ret i1 false
897   %cmp = fcmp one double %a, %b
898   %cmp1 = fcmp false double %a, %b
899   %retval = and i1 %cmp, %cmp1
900   ret i1 %retval
903 define i1 @auto_gen_21_logical(double %a, double %b) {
904 ; CHECK-LABEL: @auto_gen_21_logical(
905 ; CHECK-NEXT:    ret i1 false
907   %cmp = fcmp one double %a, %b
908   %cmp1 = fcmp false double %a, %b
909   %retval = select i1 %cmp, i1 %cmp1, i1 false
910   ret i1 %retval
913 define i1 @auto_gen_21_logical_fmf(double %a, double %b) {
914 ; CHECK-LABEL: @auto_gen_21_logical_fmf(
915 ; CHECK-NEXT:    ret i1 false
917   %cmp = fcmp fast one double %a, %b
918   %cmp1 = fcmp fast false double %a, %b
919   %retval = select i1 %cmp, i1 %cmp1, i1 false
920   ret i1 %retval
923 define i1 @auto_gen_22(double %a, double %b) {
924 ; CHECK-LABEL: @auto_gen_22(
925 ; CHECK-NEXT:    ret i1 false
927   %cmp = fcmp one double %a, %b
928   %cmp1 = fcmp oeq double %a, %b
929   %retval = and i1 %cmp, %cmp1
930   ret i1 %retval
933 define i1 @auto_gen_22_logical(double %a, double %b) {
934 ; CHECK-LABEL: @auto_gen_22_logical(
935 ; CHECK-NEXT:    ret i1 false
937   %cmp = fcmp one double %a, %b
938   %cmp1 = fcmp oeq double %a, %b
939   %retval = select i1 %cmp, i1 %cmp1, i1 false
940   ret i1 %retval
943 define i1 @auto_gen_22_logical_fmf(double %a, double %b) {
944 ; CHECK-LABEL: @auto_gen_22_logical_fmf(
945 ; CHECK-NEXT:    ret i1 false
947   %cmp = fcmp one double %a, %b
948   %cmp1 = fcmp fast oeq double %a, %b
949   %retval = select i1 %cmp, i1 %cmp1, i1 false
950   ret i1 %retval
953 define i1 @auto_gen_23(double %a, double %b) {
954 ; CHECK-LABEL: @auto_gen_23(
955 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
956 ; CHECK-NEXT:    ret i1 [[RETVAL]]
958   %cmp = fcmp one double %a, %b
959   %cmp1 = fcmp ogt double %a, %b
960   %retval = and i1 %cmp, %cmp1
961   ret i1 %retval
964 define i1 @auto_gen_23_logical(double %a, double %b) {
965 ; CHECK-LABEL: @auto_gen_23_logical(
966 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
967 ; CHECK-NEXT:    ret i1 [[RETVAL]]
969   %cmp = fcmp one double %a, %b
970   %cmp1 = fcmp ogt double %a, %b
971   %retval = select i1 %cmp, i1 %cmp1, i1 false
972   ret i1 %retval
975 define i1 @auto_gen_23_logical_fmf(double %a, double %b) {
976 ; CHECK-LABEL: @auto_gen_23_logical_fmf(
977 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
978 ; CHECK-NEXT:    ret i1 [[RETVAL]]
980   %cmp = fcmp fast one double %a, %b
981   %cmp1 = fcmp fast ogt double %a, %b
982   %retval = select i1 %cmp, i1 %cmp1, i1 false
983   ret i1 %retval
986 define i1 @auto_gen_24(double %a, double %b) {
987 ; CHECK-LABEL: @auto_gen_24(
988 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
989 ; CHECK-NEXT:    ret i1 [[RETVAL]]
991   %cmp = fcmp one double %a, %b
992   %cmp1 = fcmp oge double %a, %b
993   %retval = and i1 %cmp, %cmp1
994   ret i1 %retval
997 define i1 @auto_gen_24_logical(double %a, double %b) {
998 ; CHECK-LABEL: @auto_gen_24_logical(
999 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1000 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1002   %cmp = fcmp one double %a, %b
1003   %cmp1 = fcmp oge double %a, %b
1004   %retval = select i1 %cmp, i1 %cmp1, i1 false
1005   ret i1 %retval
1008 define i1 @auto_gen_24_logical_fmf(double %a, double %b) {
1009 ; CHECK-LABEL: @auto_gen_24_logical_fmf(
1010 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1011 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1013   %cmp = fcmp one double %a, %b
1014   %cmp1 = fcmp fast oge double %a, %b
1015   %retval = select i1 %cmp, i1 %cmp1, i1 false
1016   ret i1 %retval
1019 define i1 @auto_gen_25(double %a, double %b) {
1020 ; CHECK-LABEL: @auto_gen_25(
1021 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1022 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1024   %cmp = fcmp one double %a, %b
1025   %cmp1 = fcmp olt double %a, %b
1026   %retval = and i1 %cmp, %cmp1
1027   ret i1 %retval
1030 define i1 @auto_gen_25_logical(double %a, double %b) {
1031 ; CHECK-LABEL: @auto_gen_25_logical(
1032 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1033 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1035   %cmp = fcmp one double %a, %b
1036   %cmp1 = fcmp olt double %a, %b
1037   %retval = select i1 %cmp, i1 %cmp1, i1 false
1038   ret i1 %retval
1041 define i1 @auto_gen_25_logical_fmf(double %a, double %b) {
1042 ; CHECK-LABEL: @auto_gen_25_logical_fmf(
1043 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
1044 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1046   %cmp = fcmp fast one double %a, %b
1047   %cmp1 = fcmp fast olt double %a, %b
1048   %retval = select i1 %cmp, i1 %cmp1, i1 false
1049   ret i1 %retval
1052 define i1 @auto_gen_26(double %a, double %b) {
1053 ; CHECK-LABEL: @auto_gen_26(
1054 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1055 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1057   %cmp = fcmp one double %a, %b
1058   %cmp1 = fcmp ole double %a, %b
1059   %retval = and i1 %cmp, %cmp1
1060   ret i1 %retval
1063 define i1 @auto_gen_26_logical(double %a, double %b) {
1064 ; CHECK-LABEL: @auto_gen_26_logical(
1065 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1066 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1068   %cmp = fcmp one double %a, %b
1069   %cmp1 = fcmp ole double %a, %b
1070   %retval = select i1 %cmp, i1 %cmp1, i1 false
1071   ret i1 %retval
1074 define i1 @auto_gen_26_logical_fmf(double %a, double %b) {
1075 ; CHECK-LABEL: @auto_gen_26_logical_fmf(
1076 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1077 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1079   %cmp = fcmp one double %a, %b
1080   %cmp1 = fcmp fast ole double %a, %b
1081   %retval = select i1 %cmp, i1 %cmp1, i1 false
1082   ret i1 %retval
1085 define i1 @auto_gen_27(double %a, double %b) {
1086 ; CHECK-LABEL: @auto_gen_27(
1087 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1088 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1090   %cmp = fcmp one double %a, %b
1091   %cmp1 = fcmp one double %a, %b
1092   %retval = and i1 %cmp, %cmp1
1093   ret i1 %retval
1096 define i1 @auto_gen_27_logical(double %a, double %b) {
1097 ; CHECK-LABEL: @auto_gen_27_logical(
1098 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1099 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1101   %cmp = fcmp one double %a, %b
1102   %cmp1 = fcmp one double %a, %b
1103   %retval = select i1 %cmp, i1 %cmp1, i1 false
1104   ret i1 %retval
1107 define i1 @auto_gen_27_logical_fmf(double %a, double %b) {
1108 ; CHECK-LABEL: @auto_gen_27_logical_fmf(
1109 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
1110 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1112   %cmp = fcmp fast one double %a, %b
1113   %cmp1 = fcmp fast one double %a, %b
1114   %retval = select i1 %cmp, i1 %cmp1, i1 false
1115   ret i1 %retval
1118 define i1 @auto_gen_28(double %a, double %b) {
1119 ; CHECK-LABEL: @auto_gen_28(
1120 ; CHECK-NEXT:    ret i1 false
1122   %cmp = fcmp ord double %a, %b
1123   %cmp1 = fcmp false double %a, %b
1124   %retval = and i1 %cmp, %cmp1
1125   ret i1 %retval
1128 define i1 @auto_gen_28_logical(double %a, double %b) {
1129 ; CHECK-LABEL: @auto_gen_28_logical(
1130 ; CHECK-NEXT:    ret i1 false
1132   %cmp = fcmp ord double %a, %b
1133   %cmp1 = fcmp false double %a, %b
1134   %retval = select i1 %cmp, i1 %cmp1, i1 false
1135   ret i1 %retval
1138 define i1 @auto_gen_28_logical_fmf(double %a, double %b) {
1139 ; CHECK-LABEL: @auto_gen_28_logical_fmf(
1140 ; CHECK-NEXT:    ret i1 false
1142   %cmp = fcmp ord double %a, %b
1143   %cmp1 = fcmp fast false double %a, %b
1144   %retval = select i1 %cmp, i1 %cmp1, i1 false
1145   ret i1 %retval
1148 define i1 @auto_gen_29(double %a, double %b) {
1149 ; CHECK-LABEL: @auto_gen_29(
1150 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1151 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1153   %cmp = fcmp ord double %a, %b
1154   %cmp1 = fcmp oeq double %a, %b
1155   %retval = and i1 %cmp, %cmp1
1156   ret i1 %retval
1159 define i1 @auto_gen_29_logical(double %a, double %b) {
1160 ; CHECK-LABEL: @auto_gen_29_logical(
1161 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1162 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1164   %cmp = fcmp ord double %a, %b
1165   %cmp1 = fcmp oeq double %a, %b
1166   %retval = select i1 %cmp, i1 %cmp1, i1 false
1167   ret i1 %retval
1170 define i1 @auto_gen_29_logical_fmf(double %a, double %b) {
1171 ; CHECK-LABEL: @auto_gen_29_logical_fmf(
1172 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
1173 ; CHECK-NEXT:    ret i1 [[CMP1]]
1175   %cmp = fcmp fast ord double %a, %b
1176   %cmp1 = fcmp fast oeq double %a, %b
1177   %retval = select i1 %cmp, i1 %cmp1, i1 false
1178   ret i1 %retval
1181 define i1 @auto_gen_30(double %a, double %b) {
1182 ; CHECK-LABEL: @auto_gen_30(
1183 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1184 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1186   %cmp = fcmp ord double %a, %b
1187   %cmp1 = fcmp ogt double %a, %b
1188   %retval = and i1 %cmp, %cmp1
1189   ret i1 %retval
1192 define i1 @auto_gen_30_logical(double %a, double %b) {
1193 ; CHECK-LABEL: @auto_gen_30_logical(
1194 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1195 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1197   %cmp = fcmp ord double %a, %b
1198   %cmp1 = fcmp ogt double %a, %b
1199   %retval = select i1 %cmp, i1 %cmp1, i1 false
1200   ret i1 %retval
1203 define i1 @auto_gen_30_logical_fmf(double %a, double %b) {
1204 ; CHECK-LABEL: @auto_gen_30_logical_fmf(
1205 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1206 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1208   %cmp = fcmp ord double %a, %b
1209   %cmp1 = fcmp fast ogt double %a, %b
1210   %retval = select i1 %cmp, i1 %cmp1, i1 false
1211   ret i1 %retval
1214 define i1 @auto_gen_31(double %a, double %b) {
1215 ; CHECK-LABEL: @auto_gen_31(
1216 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
1217 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1219   %cmp = fcmp ord double %a, %b
1220   %cmp1 = fcmp oge double %a, %b
1221   %retval = and i1 %cmp, %cmp1
1222   ret i1 %retval
1225 define i1 @auto_gen_31_logical(double %a, double %b) {
1226 ; CHECK-LABEL: @auto_gen_31_logical(
1227 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
1228 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1230   %cmp = fcmp ord double %a, %b
1231   %cmp1 = fcmp oge double %a, %b
1232   %retval = select i1 %cmp, i1 %cmp1, i1 false
1233   ret i1 %retval
1236 define i1 @auto_gen_31_logical_fmf(double %a, double %b) {
1237 ; CHECK-LABEL: @auto_gen_31_logical_fmf(
1238 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
1239 ; CHECK-NEXT:    ret i1 [[CMP1]]
1241   %cmp = fcmp fast ord double %a, %b
1242   %cmp1 = fcmp fast oge double %a, %b
1243   %retval = select i1 %cmp, i1 %cmp1, i1 false
1244   ret i1 %retval
1247 define i1 @auto_gen_32(double %a, double %b) {
1248 ; CHECK-LABEL: @auto_gen_32(
1249 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1250 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1252   %cmp = fcmp ord double %a, %b
1253   %cmp1 = fcmp olt double %a, %b
1254   %retval = and i1 %cmp, %cmp1
1255   ret i1 %retval
1258 define i1 @auto_gen_32_logical(double %a, double %b) {
1259 ; CHECK-LABEL: @auto_gen_32_logical(
1260 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1261 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1263   %cmp = fcmp ord double %a, %b
1264   %cmp1 = fcmp olt double %a, %b
1265   %retval = select i1 %cmp, i1 %cmp1, i1 false
1266   ret i1 %retval
1269 define i1 @auto_gen_32_logical_fmf(double %a, double %b) {
1270 ; CHECK-LABEL: @auto_gen_32_logical_fmf(
1271 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1272 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1274   %cmp = fcmp ord double %a, %b
1275   %cmp1 = fcmp fast olt double %a, %b
1276   %retval = select i1 %cmp, i1 %cmp1, i1 false
1277   ret i1 %retval
1280 define i1 @auto_gen_33(double %a, double %b) {
1281 ; CHECK-LABEL: @auto_gen_33(
1282 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1283 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1285   %cmp = fcmp ord double %a, %b
1286   %cmp1 = fcmp ole double %a, %b
1287   %retval = and i1 %cmp, %cmp1
1288   ret i1 %retval
1291 define i1 @auto_gen_33_logical(double %a, double %b) {
1292 ; CHECK-LABEL: @auto_gen_33_logical(
1293 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1294 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1296   %cmp = fcmp ord double %a, %b
1297   %cmp1 = fcmp ole double %a, %b
1298   %retval = select i1 %cmp, i1 %cmp1, i1 false
1299   ret i1 %retval
1302 define i1 @auto_gen_33_logical_fmf(double %a, double %b) {
1303 ; CHECK-LABEL: @auto_gen_33_logical_fmf(
1304 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
1305 ; CHECK-NEXT:    ret i1 [[CMP1]]
1307   %cmp = fcmp fast ord double %a, %b
1308   %cmp1 = fcmp fast ole double %a, %b
1309   %retval = select i1 %cmp, i1 %cmp1, i1 false
1310   ret i1 %retval
1313 define i1 @auto_gen_34(double %a, double %b) {
1314 ; CHECK-LABEL: @auto_gen_34(
1315 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1316 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1318   %cmp = fcmp ord double %a, %b
1319   %cmp1 = fcmp one double %a, %b
1320   %retval = and i1 %cmp, %cmp1
1321   ret i1 %retval
1324 define i1 @auto_gen_34_logical(double %a, double %b) {
1325 ; CHECK-LABEL: @auto_gen_34_logical(
1326 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1327 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1329   %cmp = fcmp ord double %a, %b
1330   %cmp1 = fcmp one double %a, %b
1331   %retval = select i1 %cmp, i1 %cmp1, i1 false
1332   ret i1 %retval
1335 define i1 @auto_gen_34_logical_fmf(double %a, double %b) {
1336 ; CHECK-LABEL: @auto_gen_34_logical_fmf(
1337 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1338 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1340   %cmp = fcmp ord double %a, %b
1341   %cmp1 = fcmp fast one double %a, %b
1342   %retval = select i1 %cmp, i1 %cmp1, i1 false
1343   ret i1 %retval
1346 define i1 @auto_gen_35(double %a, double %b) {
1347 ; CHECK-LABEL: @auto_gen_35(
1348 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
1349 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1351   %cmp = fcmp ord double %a, %b
1352   %cmp1 = fcmp ord double %a, %b
1353   %retval = and i1 %cmp, %cmp1
1354   ret i1 %retval
1357 define i1 @auto_gen_35_logical(double %a, double %b) {
1358 ; CHECK-LABEL: @auto_gen_35_logical(
1359 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
1360 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1362   %cmp = fcmp ord double %a, %b
1363   %cmp1 = fcmp ord double %a, %b
1364   %retval = select i1 %cmp, i1 %cmp1, i1 false
1365   ret i1 %retval
1368 define i1 @auto_gen_35_logical_fmf(double %a, double %b) {
1369 ; CHECK-LABEL: @auto_gen_35_logical_fmf(
1370 ; CHECK-NEXT:    ret i1 true
1372   %cmp = fcmp fast ord double %a, %b
1373   %cmp1 = fcmp fast ord double %a, %b
1374   %retval = select i1 %cmp, i1 %cmp1, i1 false
1375   ret i1 %retval
1378 define i1 @auto_gen_36(double %a, double %b) {
1379 ; CHECK-LABEL: @auto_gen_36(
1380 ; CHECK-NEXT:    ret i1 false
1382   %cmp = fcmp ueq double %a, %b
1383   %cmp1 = fcmp false double %a, %b
1384   %retval = and i1 %cmp, %cmp1
1385   ret i1 %retval
1388 define i1 @auto_gen_36_logical(double %a, double %b) {
1389 ; CHECK-LABEL: @auto_gen_36_logical(
1390 ; CHECK-NEXT:    ret i1 false
1392   %cmp = fcmp ueq double %a, %b
1393   %cmp1 = fcmp false double %a, %b
1394   %retval = select i1 %cmp, i1 %cmp1, i1 false
1395   ret i1 %retval
1398 define i1 @auto_gen_36_logical_fmf(double %a, double %b) {
1399 ; CHECK-LABEL: @auto_gen_36_logical_fmf(
1400 ; CHECK-NEXT:    ret i1 false
1402   %cmp = fcmp ueq double %a, %b
1403   %cmp1 = fcmp fast false double %a, %b
1404   %retval = select i1 %cmp, i1 %cmp1, i1 false
1405   ret i1 %retval
1408 define i1 @auto_gen_37(double %a, double %b) {
1409 ; CHECK-LABEL: @auto_gen_37(
1410 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1411 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1413   %cmp = fcmp ueq double %a, %b
1414   %cmp1 = fcmp oeq double %a, %b
1415   %retval = and i1 %cmp, %cmp1
1416   ret i1 %retval
1419 define i1 @auto_gen_37_logical(double %a, double %b) {
1420 ; CHECK-LABEL: @auto_gen_37_logical(
1421 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1422 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1424   %cmp = fcmp ueq double %a, %b
1425   %cmp1 = fcmp oeq double %a, %b
1426   %retval = select i1 %cmp, i1 %cmp1, i1 false
1427   ret i1 %retval
1430 define i1 @auto_gen_37_logical_fmf(double %a, double %b) {
1431 ; CHECK-LABEL: @auto_gen_37_logical_fmf(
1432 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
1433 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1435   %cmp = fcmp fast ueq double %a, %b
1436   %cmp1 = fcmp fast oeq double %a, %b
1437   %retval = select i1 %cmp, i1 %cmp1, i1 false
1438   ret i1 %retval
1441 define i1 @auto_gen_38(double %a, double %b) {
1442 ; CHECK-LABEL: @auto_gen_38(
1443 ; CHECK-NEXT:    ret i1 false
1445   %cmp = fcmp ueq double %a, %b
1446   %cmp1 = fcmp ogt double %a, %b
1447   %retval = and i1 %cmp, %cmp1
1448   ret i1 %retval
1451 define i1 @auto_gen_38_logical(double %a, double %b) {
1452 ; CHECK-LABEL: @auto_gen_38_logical(
1453 ; CHECK-NEXT:    ret i1 false
1455   %cmp = fcmp ueq double %a, %b
1456   %cmp1 = fcmp ogt double %a, %b
1457   %retval = select i1 %cmp, i1 %cmp1, i1 false
1458   ret i1 %retval
1461 define i1 @auto_gen_38_logical_fmf(double %a, double %b) {
1462 ; CHECK-LABEL: @auto_gen_38_logical_fmf(
1463 ; CHECK-NEXT:    ret i1 false
1465   %cmp = fcmp ueq double %a, %b
1466   %cmp1 = fcmp fast ogt double %a, %b
1467   %retval = select i1 %cmp, i1 %cmp1, i1 false
1468   ret i1 %retval
1471 define i1 @auto_gen_39(double %a, double %b) {
1472 ; CHECK-LABEL: @auto_gen_39(
1473 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1474 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1476   %cmp = fcmp ueq double %a, %b
1477   %cmp1 = fcmp oge double %a, %b
1478   %retval = and i1 %cmp, %cmp1
1479   ret i1 %retval
1482 define i1 @auto_gen_39_logical(double %a, double %b) {
1483 ; CHECK-LABEL: @auto_gen_39_logical(
1484 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1485 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1487   %cmp = fcmp ueq double %a, %b
1488   %cmp1 = fcmp oge double %a, %b
1489   %retval = select i1 %cmp, i1 %cmp1, i1 false
1490   ret i1 %retval
1493 define i1 @auto_gen_39_logical_fmf(double %a, double %b) {
1494 ; CHECK-LABEL: @auto_gen_39_logical_fmf(
1495 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
1496 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1498   %cmp = fcmp fast ueq double %a, %b
1499   %cmp1 = fcmp fast oge double %a, %b
1500   %retval = select i1 %cmp, i1 %cmp1, i1 false
1501   ret i1 %retval
1504 define i1 @auto_gen_40(double %a, double %b) {
1505 ; CHECK-LABEL: @auto_gen_40(
1506 ; CHECK-NEXT:    ret i1 false
1508   %cmp = fcmp ueq double %a, %b
1509   %cmp1 = fcmp olt double %a, %b
1510   %retval = and i1 %cmp, %cmp1
1511   ret i1 %retval
1514 define i1 @auto_gen_40_logical(double %a, double %b) {
1515 ; CHECK-LABEL: @auto_gen_40_logical(
1516 ; CHECK-NEXT:    ret i1 false
1518   %cmp = fcmp ueq double %a, %b
1519   %cmp1 = fcmp olt double %a, %b
1520   %retval = select i1 %cmp, i1 %cmp1, i1 false
1521   ret i1 %retval
1524 define i1 @auto_gen_40_logical_fmf(double %a, double %b) {
1525 ; CHECK-LABEL: @auto_gen_40_logical_fmf(
1526 ; CHECK-NEXT:    ret i1 false
1528   %cmp = fcmp ueq double %a, %b
1529   %cmp1 = fcmp fast olt double %a, %b
1530   %retval = select i1 %cmp, i1 %cmp1, i1 false
1531   ret i1 %retval
1534 define i1 @auto_gen_41(double %a, double %b) {
1535 ; CHECK-LABEL: @auto_gen_41(
1536 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1537 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1539   %cmp = fcmp ueq double %a, %b
1540   %cmp1 = fcmp ole double %a, %b
1541   %retval = and i1 %cmp, %cmp1
1542   ret i1 %retval
1545 define i1 @auto_gen_41_logical(double %a, double %b) {
1546 ; CHECK-LABEL: @auto_gen_41_logical(
1547 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1548 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1550   %cmp = fcmp ueq double %a, %b
1551   %cmp1 = fcmp ole double %a, %b
1552   %retval = select i1 %cmp, i1 %cmp1, i1 false
1553   ret i1 %retval
1556 define i1 @auto_gen_41_logical_fmf(double %a, double %b) {
1557 ; CHECK-LABEL: @auto_gen_41_logical_fmf(
1558 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
1559 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1561   %cmp = fcmp fast ueq double %a, %b
1562   %cmp1 = fcmp fast ole double %a, %b
1563   %retval = select i1 %cmp, i1 %cmp1, i1 false
1564   ret i1 %retval
1567 define i1 @auto_gen_42(double %a, double %b) {
1568 ; CHECK-LABEL: @auto_gen_42(
1569 ; CHECK-NEXT:    ret i1 false
1571   %cmp = fcmp ueq double %a, %b
1572   %cmp1 = fcmp one double %a, %b
1573   %retval = and i1 %cmp, %cmp1
1574   ret i1 %retval
1577 define i1 @auto_gen_42_logical(double %a, double %b) {
1578 ; CHECK-LABEL: @auto_gen_42_logical(
1579 ; CHECK-NEXT:    ret i1 false
1581   %cmp = fcmp ueq double %a, %b
1582   %cmp1 = fcmp one double %a, %b
1583   %retval = select i1 %cmp, i1 %cmp1, i1 false
1584   ret i1 %retval
1587 define i1 @auto_gen_42_logical_fmf(double %a, double %b) {
1588 ; CHECK-LABEL: @auto_gen_42_logical_fmf(
1589 ; CHECK-NEXT:    ret i1 false
1591   %cmp = fcmp ueq double %a, %b
1592   %cmp1 = fcmp fast one double %a, %b
1593   %retval = select i1 %cmp, i1 %cmp1, i1 false
1594   ret i1 %retval
1597 define i1 @auto_gen_43(double %a, double %b) {
1598 ; CHECK-LABEL: @auto_gen_43(
1599 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1600 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1602   %cmp = fcmp ueq double %a, %b
1603   %cmp1 = fcmp ord double %a, %b
1604   %retval = and i1 %cmp, %cmp1
1605   ret i1 %retval
1608 define i1 @auto_gen_43_logical(double %a, double %b) {
1609 ; CHECK-LABEL: @auto_gen_43_logical(
1610 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1611 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1613   %cmp = fcmp ueq double %a, %b
1614   %cmp1 = fcmp ord double %a, %b
1615   %retval = select i1 %cmp, i1 %cmp1, i1 false
1616   ret i1 %retval
1619 define i1 @auto_gen_43_logical_fmf(double %a, double %b) {
1620 ; CHECK-LABEL: @auto_gen_43_logical_fmf(
1621 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
1622 ; CHECK-NEXT:    ret i1 [[CMP]]
1624   %cmp = fcmp fast ueq double %a, %b
1625   %cmp1 = fcmp fast ord double %a, %b
1626   %retval = select i1 %cmp, i1 %cmp1, i1 false
1627   ret i1 %retval
1630 define i1 @auto_gen_44(double %a, double %b) {
1631 ; CHECK-LABEL: @auto_gen_44(
1632 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1633 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1635   %cmp = fcmp ueq double %a, %b
1636   %cmp1 = fcmp ueq double %a, %b
1637   %retval = and i1 %cmp, %cmp1
1638   ret i1 %retval
1641 define i1 @auto_gen_44_logical(double %a, double %b) {
1642 ; CHECK-LABEL: @auto_gen_44_logical(
1643 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1644 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1646   %cmp = fcmp ueq double %a, %b
1647   %cmp1 = fcmp ueq double %a, %b
1648   %retval = select i1 %cmp, i1 %cmp1, i1 false
1649   ret i1 %retval
1652 define i1 @auto_gen_44_logical_fmf(double %a, double %b) {
1653 ; CHECK-LABEL: @auto_gen_44_logical_fmf(
1654 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1655 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1657   %cmp = fcmp ueq double %a, %b
1658   %cmp1 = fcmp fast ueq double %a, %b
1659   %retval = select i1 %cmp, i1 %cmp1, i1 false
1660   ret i1 %retval
1663 define i1 @auto_gen_45(double %a, double %b) {
1664 ; CHECK-LABEL: @auto_gen_45(
1665 ; CHECK-NEXT:    ret i1 false
1667   %cmp = fcmp ugt double %a, %b
1668   %cmp1 = fcmp false double %a, %b
1669   %retval = and i1 %cmp, %cmp1
1670   ret i1 %retval
1673 define i1 @auto_gen_45_logical(double %a, double %b) {
1674 ; CHECK-LABEL: @auto_gen_45_logical(
1675 ; CHECK-NEXT:    ret i1 false
1677   %cmp = fcmp ugt double %a, %b
1678   %cmp1 = fcmp false double %a, %b
1679   %retval = select i1 %cmp, i1 %cmp1, i1 false
1680   ret i1 %retval
1683 define i1 @auto_gen_45_logical_fmf(double %a, double %b) {
1684 ; CHECK-LABEL: @auto_gen_45_logical_fmf(
1685 ; CHECK-NEXT:    ret i1 false
1687   %cmp = fcmp fast ugt double %a, %b
1688   %cmp1 = fcmp fast false double %a, %b
1689   %retval = select i1 %cmp, i1 %cmp1, i1 false
1690   ret i1 %retval
1693 define i1 @auto_gen_46(double %a, double %b) {
1694 ; CHECK-LABEL: @auto_gen_46(
1695 ; CHECK-NEXT:    ret i1 false
1697   %cmp = fcmp ugt double %a, %b
1698   %cmp1 = fcmp oeq double %a, %b
1699   %retval = and i1 %cmp, %cmp1
1700   ret i1 %retval
1703 define i1 @auto_gen_46_logical(double %a, double %b) {
1704 ; CHECK-LABEL: @auto_gen_46_logical(
1705 ; CHECK-NEXT:    ret i1 false
1707   %cmp = fcmp ugt double %a, %b
1708   %cmp1 = fcmp oeq double %a, %b
1709   %retval = select i1 %cmp, i1 %cmp1, i1 false
1710   ret i1 %retval
1713 define i1 @auto_gen_46_logical_fmf(double %a, double %b) {
1714 ; CHECK-LABEL: @auto_gen_46_logical_fmf(
1715 ; CHECK-NEXT:    ret i1 false
1717   %cmp = fcmp ugt double %a, %b
1718   %cmp1 = fcmp fast oeq double %a, %b
1719   %retval = select i1 %cmp, i1 %cmp1, i1 false
1720   ret i1 %retval
1723 define i1 @auto_gen_47(double %a, double %b) {
1724 ; CHECK-LABEL: @auto_gen_47(
1725 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1726 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1728   %cmp = fcmp ugt double %a, %b
1729   %cmp1 = fcmp ogt double %a, %b
1730   %retval = and i1 %cmp, %cmp1
1731   ret i1 %retval
1734 define i1 @auto_gen_47_logical(double %a, double %b) {
1735 ; CHECK-LABEL: @auto_gen_47_logical(
1736 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1737 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1739   %cmp = fcmp ugt double %a, %b
1740   %cmp1 = fcmp ogt double %a, %b
1741   %retval = select i1 %cmp, i1 %cmp1, i1 false
1742   ret i1 %retval
1745 define i1 @auto_gen_47_logical_fmf(double %a, double %b) {
1746 ; CHECK-LABEL: @auto_gen_47_logical_fmf(
1747 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
1748 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1750   %cmp = fcmp fast ugt double %a, %b
1751   %cmp1 = fcmp fast ogt double %a, %b
1752   %retval = select i1 %cmp, i1 %cmp1, i1 false
1753   ret i1 %retval
1756 define i1 @auto_gen_48(double %a, double %b) {
1757 ; CHECK-LABEL: @auto_gen_48(
1758 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1759 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1761   %cmp = fcmp ugt double %a, %b
1762   %cmp1 = fcmp oge double %a, %b
1763   %retval = and i1 %cmp, %cmp1
1764   ret i1 %retval
1767 define i1 @auto_gen_48_logical(double %a, double %b) {
1768 ; CHECK-LABEL: @auto_gen_48_logical(
1769 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1770 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1772   %cmp = fcmp ugt double %a, %b
1773   %cmp1 = fcmp oge double %a, %b
1774   %retval = select i1 %cmp, i1 %cmp1, i1 false
1775   ret i1 %retval
1778 define i1 @auto_gen_48_logical_fmf(double %a, double %b) {
1779 ; CHECK-LABEL: @auto_gen_48_logical_fmf(
1780 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1781 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1783   %cmp = fcmp ugt double %a, %b
1784   %cmp1 = fcmp fast oge double %a, %b
1785   %retval = select i1 %cmp, i1 %cmp1, i1 false
1786   ret i1 %retval
1789 define i1 @auto_gen_49(double %a, double %b) {
1790 ; CHECK-LABEL: @auto_gen_49(
1791 ; CHECK-NEXT:    ret i1 false
1793   %cmp = fcmp ugt double %a, %b
1794   %cmp1 = fcmp olt double %a, %b
1795   %retval = and i1 %cmp, %cmp1
1796   ret i1 %retval
1799 define i1 @auto_gen_49_logical(double %a, double %b) {
1800 ; CHECK-LABEL: @auto_gen_49_logical(
1801 ; CHECK-NEXT:    ret i1 false
1803   %cmp = fcmp ugt double %a, %b
1804   %cmp1 = fcmp olt double %a, %b
1805   %retval = select i1 %cmp, i1 %cmp1, i1 false
1806   ret i1 %retval
1809 define i1 @auto_gen_49_logical_fmf(double %a, double %b) {
1810 ; CHECK-LABEL: @auto_gen_49_logical_fmf(
1811 ; CHECK-NEXT:    ret i1 false
1813   %cmp = fcmp fast ugt double %a, %b
1814   %cmp1 = fcmp fast olt double %a, %b
1815   %retval = select i1 %cmp, i1 %cmp1, i1 false
1816   ret i1 %retval
1819 define i1 @auto_gen_50(double %a, double %b) {
1820 ; CHECK-LABEL: @auto_gen_50(
1821 ; CHECK-NEXT:    ret i1 false
1823   %cmp = fcmp ugt double %a, %b
1824   %cmp1 = fcmp ole double %a, %b
1825   %retval = and i1 %cmp, %cmp1
1826   ret i1 %retval
1829 define i1 @auto_gen_50_logical(double %a, double %b) {
1830 ; CHECK-LABEL: @auto_gen_50_logical(
1831 ; CHECK-NEXT:    ret i1 false
1833   %cmp = fcmp ugt double %a, %b
1834   %cmp1 = fcmp ole double %a, %b
1835   %retval = select i1 %cmp, i1 %cmp1, i1 false
1836   ret i1 %retval
1839 define i1 @auto_gen_50_logical_fmf(double %a, double %b) {
1840 ; CHECK-LABEL: @auto_gen_50_logical_fmf(
1841 ; CHECK-NEXT:    ret i1 false
1843   %cmp = fcmp ugt double %a, %b
1844   %cmp1 = fcmp fast ole double %a, %b
1845   %retval = select i1 %cmp, i1 %cmp1, i1 false
1846   ret i1 %retval
1849 define i1 @auto_gen_51(double %a, double %b) {
1850 ; CHECK-LABEL: @auto_gen_51(
1851 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1852 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1854   %cmp = fcmp ugt double %a, %b
1855   %cmp1 = fcmp one double %a, %b
1856   %retval = and i1 %cmp, %cmp1
1857   ret i1 %retval
1860 define i1 @auto_gen_51_logical(double %a, double %b) {
1861 ; CHECK-LABEL: @auto_gen_51_logical(
1862 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1863 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1865   %cmp = fcmp ugt double %a, %b
1866   %cmp1 = fcmp one double %a, %b
1867   %retval = select i1 %cmp, i1 %cmp1, i1 false
1868   ret i1 %retval
1871 define i1 @auto_gen_51_logical_fmf(double %a, double %b) {
1872 ; CHECK-LABEL: @auto_gen_51_logical_fmf(
1873 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
1874 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1876   %cmp = fcmp fast ugt double %a, %b
1877   %cmp1 = fcmp fast one double %a, %b
1878   %retval = select i1 %cmp, i1 %cmp1, i1 false
1879   ret i1 %retval
1882 define i1 @auto_gen_52(double %a, double %b) {
1883 ; CHECK-LABEL: @auto_gen_52(
1884 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1885 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1887   %cmp = fcmp ugt double %a, %b
1888   %cmp1 = fcmp ord double %a, %b
1889   %retval = and i1 %cmp, %cmp1
1890   ret i1 %retval
1893 define i1 @auto_gen_52_logical(double %a, double %b) {
1894 ; CHECK-LABEL: @auto_gen_52_logical(
1895 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1896 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1898   %cmp = fcmp ugt double %a, %b
1899   %cmp1 = fcmp ord double %a, %b
1900   %retval = select i1 %cmp, i1 %cmp1, i1 false
1901   ret i1 %retval
1904 define i1 @auto_gen_52_logical_fmf(double %a, double %b) {
1905 ; CHECK-LABEL: @auto_gen_52_logical_fmf(
1906 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1907 ; CHECK-NEXT:    ret i1 [[CMP]]
1909   %cmp = fcmp ugt double %a, %b
1910   %cmp1 = fcmp fast ord double %a, %b
1911   %retval = select i1 %cmp, i1 %cmp1, i1 false
1912   ret i1 %retval
1915 define i1 @auto_gen_53(double %a, double %b) {
1916 ; CHECK-LABEL: @auto_gen_53(
1917 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1918 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1920   %cmp = fcmp ugt double %a, %b
1921   %cmp1 = fcmp ueq double %a, %b
1922   %retval = and i1 %cmp, %cmp1
1923   ret i1 %retval
1926 define i1 @auto_gen_53_logical(double %a, double %b) {
1927 ; CHECK-LABEL: @auto_gen_53_logical(
1928 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1929 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1931   %cmp = fcmp ugt double %a, %b
1932   %cmp1 = fcmp ueq double %a, %b
1933   %retval = select i1 %cmp, i1 %cmp1, i1 false
1934   ret i1 %retval
1937 define i1 @auto_gen_53_logical_fmf(double %a, double %b) {
1938 ; CHECK-LABEL: @auto_gen_53_logical_fmf(
1939 ; CHECK-NEXT:    ret i1 false
1941   %cmp = fcmp fast ugt double %a, %b
1942   %cmp1 = fcmp fast ueq double %a, %b
1943   %retval = select i1 %cmp, i1 %cmp1, i1 false
1944   ret i1 %retval
1947 define i1 @auto_gen_54(double %a, double %b) {
1948 ; CHECK-LABEL: @auto_gen_54(
1949 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1950 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1952   %cmp = fcmp ugt double %a, %b
1953   %cmp1 = fcmp ugt double %a, %b
1954   %retval = and i1 %cmp, %cmp1
1955   ret i1 %retval
1958 define i1 @auto_gen_54_logical(double %a, double %b) {
1959 ; CHECK-LABEL: @auto_gen_54_logical(
1960 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1961 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1963   %cmp = fcmp ugt double %a, %b
1964   %cmp1 = fcmp ugt double %a, %b
1965   %retval = select i1 %cmp, i1 %cmp1, i1 false
1966   ret i1 %retval
1969 define i1 @auto_gen_54_logical_fmf(double %a, double %b) {
1970 ; CHECK-LABEL: @auto_gen_54_logical_fmf(
1971 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1972 ; CHECK-NEXT:    ret i1 [[RETVAL]]
1974   %cmp = fcmp ugt double %a, %b
1975   %cmp1 = fcmp fast ugt double %a, %b
1976   %retval = select i1 %cmp, i1 %cmp1, i1 false
1977   ret i1 %retval
1980 define i1 @auto_gen_55(double %a, double %b) {
1981 ; CHECK-LABEL: @auto_gen_55(
1982 ; CHECK-NEXT:    ret i1 false
1984   %cmp = fcmp uge double %a, %b
1985   %cmp1 = fcmp false double %a, %b
1986   %retval = and i1 %cmp, %cmp1
1987   ret i1 %retval
1990 define i1 @auto_gen_55_logical(double %a, double %b) {
1991 ; CHECK-LABEL: @auto_gen_55_logical(
1992 ; CHECK-NEXT:    ret i1 false
1994   %cmp = fcmp uge double %a, %b
1995   %cmp1 = fcmp false double %a, %b
1996   %retval = select i1 %cmp, i1 %cmp1, i1 false
1997   ret i1 %retval
2000 define i1 @auto_gen_55_logical_fmf(double %a, double %b) {
2001 ; CHECK-LABEL: @auto_gen_55_logical_fmf(
2002 ; CHECK-NEXT:    ret i1 false
2004   %cmp = fcmp fast uge double %a, %b
2005   %cmp1 = fcmp fast false double %a, %b
2006   %retval = select i1 %cmp, i1 %cmp1, i1 false
2007   ret i1 %retval
2010 define i1 @auto_gen_56(double %a, double %b) {
2011 ; CHECK-LABEL: @auto_gen_56(
2012 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2013 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2015   %cmp = fcmp uge double %a, %b
2016   %cmp1 = fcmp oeq double %a, %b
2017   %retval = and i1 %cmp, %cmp1
2018   ret i1 %retval
2021 define i1 @auto_gen_56_logical(double %a, double %b) {
2022 ; CHECK-LABEL: @auto_gen_56_logical(
2023 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2024 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2026   %cmp = fcmp uge double %a, %b
2027   %cmp1 = fcmp oeq double %a, %b
2028   %retval = select i1 %cmp, i1 %cmp1, i1 false
2029   ret i1 %retval
2032 define i1 @auto_gen_56_logical_fmf(double %a, double %b) {
2033 ; CHECK-LABEL: @auto_gen_56_logical_fmf(
2034 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2035 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2037   %cmp = fcmp uge double %a, %b
2038   %cmp1 = fcmp fast oeq double %a, %b
2039   %retval = select i1 %cmp, i1 %cmp1, i1 false
2040   ret i1 %retval
2043 define i1 @auto_gen_57(double %a, double %b) {
2044 ; CHECK-LABEL: @auto_gen_57(
2045 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
2046 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2048   %cmp = fcmp uge double %a, %b
2049   %cmp1 = fcmp ogt double %a, %b
2050   %retval = and i1 %cmp, %cmp1
2051   ret i1 %retval
2054 define i1 @auto_gen_57_logical(double %a, double %b) {
2055 ; CHECK-LABEL: @auto_gen_57_logical(
2056 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
2057 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2059   %cmp = fcmp uge double %a, %b
2060   %cmp1 = fcmp ogt double %a, %b
2061   %retval = select i1 %cmp, i1 %cmp1, i1 false
2062   ret i1 %retval
2065 define i1 @auto_gen_57_logical_fmf(double %a, double %b) {
2066 ; CHECK-LABEL: @auto_gen_57_logical_fmf(
2067 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
2068 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2070   %cmp = fcmp fast uge double %a, %b
2071   %cmp1 = fcmp fast ogt double %a, %b
2072   %retval = select i1 %cmp, i1 %cmp1, i1 false
2073   ret i1 %retval
2076 define i1 @auto_gen_58(double %a, double %b) {
2077 ; CHECK-LABEL: @auto_gen_58(
2078 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
2079 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2081   %cmp = fcmp uge double %a, %b
2082   %cmp1 = fcmp oge double %a, %b
2083   %retval = and i1 %cmp, %cmp1
2084   ret i1 %retval
2087 define i1 @auto_gen_58_logical(double %a, double %b) {
2088 ; CHECK-LABEL: @auto_gen_58_logical(
2089 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
2090 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2092   %cmp = fcmp uge double %a, %b
2093   %cmp1 = fcmp oge double %a, %b
2094   %retval = select i1 %cmp, i1 %cmp1, i1 false
2095   ret i1 %retval
2098 define i1 @auto_gen_58_logical_fmf(double %a, double %b) {
2099 ; CHECK-LABEL: @auto_gen_58_logical_fmf(
2100 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
2101 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2103   %cmp = fcmp uge double %a, %b
2104   %cmp1 = fcmp fast oge double %a, %b
2105   %retval = select i1 %cmp, i1 %cmp1, i1 false
2106   ret i1 %retval
2109 define i1 @auto_gen_59(double %a, double %b) {
2110 ; CHECK-LABEL: @auto_gen_59(
2111 ; CHECK-NEXT:    ret i1 false
2113   %cmp = fcmp uge double %a, %b
2114   %cmp1 = fcmp olt double %a, %b
2115   %retval = and i1 %cmp, %cmp1
2116   ret i1 %retval
2119 define i1 @auto_gen_59_logical(double %a, double %b) {
2120 ; CHECK-LABEL: @auto_gen_59_logical(
2121 ; CHECK-NEXT:    ret i1 false
2123   %cmp = fcmp uge double %a, %b
2124   %cmp1 = fcmp olt double %a, %b
2125   %retval = select i1 %cmp, i1 %cmp1, i1 false
2126   ret i1 %retval
2129 define i1 @auto_gen_59_logical_fmf(double %a, double %b) {
2130 ; CHECK-LABEL: @auto_gen_59_logical_fmf(
2131 ; CHECK-NEXT:    ret i1 false
2133   %cmp = fcmp fast uge double %a, %b
2134   %cmp1 = fcmp fast olt double %a, %b
2135   %retval = select i1 %cmp, i1 %cmp1, i1 false
2136   ret i1 %retval
2139 define i1 @auto_gen_60(double %a, double %b) {
2140 ; CHECK-LABEL: @auto_gen_60(
2141 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2142 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2144   %cmp = fcmp uge double %a, %b
2145   %cmp1 = fcmp ole double %a, %b
2146   %retval = and i1 %cmp, %cmp1
2147   ret i1 %retval
2150 define i1 @auto_gen_60_logical(double %a, double %b) {
2151 ; CHECK-LABEL: @auto_gen_60_logical(
2152 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2153 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2155   %cmp = fcmp uge double %a, %b
2156   %cmp1 = fcmp ole double %a, %b
2157   %retval = select i1 %cmp, i1 %cmp1, i1 false
2158   ret i1 %retval
2161 define i1 @auto_gen_60_logical_fmf(double %a, double %b) {
2162 ; CHECK-LABEL: @auto_gen_60_logical_fmf(
2163 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2164 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2166   %cmp = fcmp uge double %a, %b
2167   %cmp1 = fcmp fast ole double %a, %b
2168   %retval = select i1 %cmp, i1 %cmp1, i1 false
2169   ret i1 %retval
2172 define i1 @auto_gen_61(double %a, double %b) {
2173 ; CHECK-LABEL: @auto_gen_61(
2174 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
2175 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2177   %cmp = fcmp uge double %a, %b
2178   %cmp1 = fcmp one double %a, %b
2179   %retval = and i1 %cmp, %cmp1
2180   ret i1 %retval
2183 define i1 @auto_gen_61_logical(double %a, double %b) {
2184 ; CHECK-LABEL: @auto_gen_61_logical(
2185 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
2186 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2188   %cmp = fcmp uge double %a, %b
2189   %cmp1 = fcmp one double %a, %b
2190   %retval = select i1 %cmp, i1 %cmp1, i1 false
2191   ret i1 %retval
2194 define i1 @auto_gen_61_logical_fmf(double %a, double %b) {
2195 ; CHECK-LABEL: @auto_gen_61_logical_fmf(
2196 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
2197 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2199   %cmp = fcmp fast uge double %a, %b
2200   %cmp1 = fcmp fast one double %a, %b
2201   %retval = select i1 %cmp, i1 %cmp1, i1 false
2202   ret i1 %retval
2205 define i1 @auto_gen_62(double %a, double %b) {
2206 ; CHECK-LABEL: @auto_gen_62(
2207 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
2208 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2210   %cmp = fcmp uge double %a, %b
2211   %cmp1 = fcmp ord double %a, %b
2212   %retval = and i1 %cmp, %cmp1
2213   ret i1 %retval
2216 define i1 @auto_gen_62_logical(double %a, double %b) {
2217 ; CHECK-LABEL: @auto_gen_62_logical(
2218 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
2219 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2221   %cmp = fcmp uge double %a, %b
2222   %cmp1 = fcmp ord double %a, %b
2223   %retval = select i1 %cmp, i1 %cmp1, i1 false
2224   ret i1 %retval
2227 define i1 @auto_gen_62_logical_fmf(double %a, double %b) {
2228 ; CHECK-LABEL: @auto_gen_62_logical_fmf(
2229 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
2230 ; CHECK-NEXT:    ret i1 [[CMP]]
2232   %cmp = fcmp uge double %a, %b
2233   %cmp1 = fcmp fast ord double %a, %b
2234   %retval = select i1 %cmp, i1 %cmp1, i1 false
2235   ret i1 %retval
2238 define i1 @auto_gen_63(double %a, double %b) {
2239 ; CHECK-LABEL: @auto_gen_63(
2240 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
2241 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2243   %cmp = fcmp uge double %a, %b
2244   %cmp1 = fcmp ueq double %a, %b
2245   %retval = and i1 %cmp, %cmp1
2246   ret i1 %retval
2249 define i1 @auto_gen_63_logical(double %a, double %b) {
2250 ; CHECK-LABEL: @auto_gen_63_logical(
2251 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
2252 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2254   %cmp = fcmp uge double %a, %b
2255   %cmp1 = fcmp ueq double %a, %b
2256   %retval = select i1 %cmp, i1 %cmp1, i1 false
2257   ret i1 %retval
2260 define i1 @auto_gen_63_logical_fmf(double %a, double %b) {
2261 ; CHECK-LABEL: @auto_gen_63_logical_fmf(
2262 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
2263 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2265   %cmp = fcmp fast uge double %a, %b
2266   %cmp1 = fcmp fast ueq double %a, %b
2267   %retval = select i1 %cmp, i1 %cmp1, i1 false
2268   ret i1 %retval
2271 define i1 @auto_gen_64(double %a, double %b) {
2272 ; CHECK-LABEL: @auto_gen_64(
2273 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
2274 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2276   %cmp = fcmp uge double %a, %b
2277   %cmp1 = fcmp ugt double %a, %b
2278   %retval = and i1 %cmp, %cmp1
2279   ret i1 %retval
2282 define i1 @auto_gen_64_logical(double %a, double %b) {
2283 ; CHECK-LABEL: @auto_gen_64_logical(
2284 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
2285 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2287   %cmp = fcmp uge double %a, %b
2288   %cmp1 = fcmp ugt double %a, %b
2289   %retval = select i1 %cmp, i1 %cmp1, i1 false
2290   ret i1 %retval
2293 define i1 @auto_gen_64_logical_fmf(double %a, double %b) {
2294 ; CHECK-LABEL: @auto_gen_64_logical_fmf(
2295 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
2296 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2298   %cmp = fcmp uge double %a, %b
2299   %cmp1 = fcmp fast ugt double %a, %b
2300   %retval = select i1 %cmp, i1 %cmp1, i1 false
2301   ret i1 %retval
2304 define i1 @auto_gen_65(double %a, double %b) {
2305 ; CHECK-LABEL: @auto_gen_65(
2306 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
2307 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2309   %cmp = fcmp uge double %a, %b
2310   %cmp1 = fcmp uge double %a, %b
2311   %retval = and i1 %cmp, %cmp1
2312   ret i1 %retval
2315 define i1 @auto_gen_65_logical(double %a, double %b) {
2316 ; CHECK-LABEL: @auto_gen_65_logical(
2317 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
2318 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2320   %cmp = fcmp uge double %a, %b
2321   %cmp1 = fcmp uge double %a, %b
2322   %retval = select i1 %cmp, i1 %cmp1, i1 false
2323   ret i1 %retval
2326 define i1 @auto_gen_65_logical_fmf(double %a, double %b) {
2327 ; CHECK-LABEL: @auto_gen_65_logical_fmf(
2328 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
2329 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2331   %cmp = fcmp fast uge double %a, %b
2332   %cmp1 = fcmp fast uge double %a, %b
2333   %retval = select i1 %cmp, i1 %cmp1, i1 false
2334   ret i1 %retval
2337 define i1 @auto_gen_66(double %a, double %b) {
2338 ; CHECK-LABEL: @auto_gen_66(
2339 ; CHECK-NEXT:    ret i1 false
2341   %cmp = fcmp ult double %a, %b
2342   %cmp1 = fcmp false double %a, %b
2343   %retval = and i1 %cmp, %cmp1
2344   ret i1 %retval
2347 define i1 @auto_gen_66_logical(double %a, double %b) {
2348 ; CHECK-LABEL: @auto_gen_66_logical(
2349 ; CHECK-NEXT:    ret i1 false
2351   %cmp = fcmp ult double %a, %b
2352   %cmp1 = fcmp false double %a, %b
2353   %retval = select i1 %cmp, i1 %cmp1, i1 false
2354   ret i1 %retval
2357 define i1 @auto_gen_66_logical_fmf(double %a, double %b) {
2358 ; CHECK-LABEL: @auto_gen_66_logical_fmf(
2359 ; CHECK-NEXT:    ret i1 false
2361   %cmp = fcmp ult double %a, %b
2362   %cmp1 = fcmp fast false double %a, %b
2363   %retval = select i1 %cmp, i1 %cmp1, i1 false
2364   ret i1 %retval
2367 define i1 @auto_gen_67(double %a, double %b) {
2368 ; CHECK-LABEL: @auto_gen_67(
2369 ; CHECK-NEXT:    ret i1 false
2371   %cmp = fcmp ult double %a, %b
2372   %cmp1 = fcmp oeq double %a, %b
2373   %retval = and i1 %cmp, %cmp1
2374   ret i1 %retval
2377 define i1 @auto_gen_67_logical(double %a, double %b) {
2378 ; CHECK-LABEL: @auto_gen_67_logical(
2379 ; CHECK-NEXT:    ret i1 false
2381   %cmp = fcmp ult double %a, %b
2382   %cmp1 = fcmp oeq double %a, %b
2383   %retval = select i1 %cmp, i1 %cmp1, i1 false
2384   ret i1 %retval
2387 define i1 @auto_gen_67_logical_fmf(double %a, double %b) {
2388 ; CHECK-LABEL: @auto_gen_67_logical_fmf(
2389 ; CHECK-NEXT:    ret i1 false
2391   %cmp = fcmp fast ult double %a, %b
2392   %cmp1 = fcmp fast oeq double %a, %b
2393   %retval = select i1 %cmp, i1 %cmp1, i1 false
2394   ret i1 %retval
2397 define i1 @auto_gen_68(double %a, double %b) {
2398 ; CHECK-LABEL: @auto_gen_68(
2399 ; CHECK-NEXT:    ret i1 false
2401   %cmp = fcmp ult double %a, %b
2402   %cmp1 = fcmp ogt double %a, %b
2403   %retval = and i1 %cmp, %cmp1
2404   ret i1 %retval
2407 define i1 @auto_gen_68_logical(double %a, double %b) {
2408 ; CHECK-LABEL: @auto_gen_68_logical(
2409 ; CHECK-NEXT:    ret i1 false
2411   %cmp = fcmp ult double %a, %b
2412   %cmp1 = fcmp ogt double %a, %b
2413   %retval = select i1 %cmp, i1 %cmp1, i1 false
2414   ret i1 %retval
2417 define i1 @auto_gen_68_logical_fmf(double %a, double %b) {
2418 ; CHECK-LABEL: @auto_gen_68_logical_fmf(
2419 ; CHECK-NEXT:    ret i1 false
2421   %cmp = fcmp ult double %a, %b
2422   %cmp1 = fcmp fast ogt double %a, %b
2423   %retval = select i1 %cmp, i1 %cmp1, i1 false
2424   ret i1 %retval
2427 define i1 @auto_gen_69(double %a, double %b) {
2428 ; CHECK-LABEL: @auto_gen_69(
2429 ; CHECK-NEXT:    ret i1 false
2431   %cmp = fcmp ult double %a, %b
2432   %cmp1 = fcmp oge double %a, %b
2433   %retval = and i1 %cmp, %cmp1
2434   ret i1 %retval
2437 define i1 @auto_gen_69_logical(double %a, double %b) {
2438 ; CHECK-LABEL: @auto_gen_69_logical(
2439 ; CHECK-NEXT:    ret i1 false
2441   %cmp = fcmp ult double %a, %b
2442   %cmp1 = fcmp oge double %a, %b
2443   %retval = select i1 %cmp, i1 %cmp1, i1 false
2444   ret i1 %retval
2447 define i1 @auto_gen_69_logical_fmf(double %a, double %b) {
2448 ; CHECK-LABEL: @auto_gen_69_logical_fmf(
2449 ; CHECK-NEXT:    ret i1 false
2451   %cmp = fcmp fast ult double %a, %b
2452   %cmp1 = fcmp fast oge double %a, %b
2453   %retval = select i1 %cmp, i1 %cmp1, i1 false
2454   ret i1 %retval
2457 define i1 @auto_gen_70(double %a, double %b) {
2458 ; CHECK-LABEL: @auto_gen_70(
2459 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2460 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2462   %cmp = fcmp ult double %a, %b
2463   %cmp1 = fcmp olt double %a, %b
2464   %retval = and i1 %cmp, %cmp1
2465   ret i1 %retval
2468 define i1 @auto_gen_70_logical(double %a, double %b) {
2469 ; CHECK-LABEL: @auto_gen_70_logical(
2470 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2471 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2473   %cmp = fcmp ult double %a, %b
2474   %cmp1 = fcmp olt double %a, %b
2475   %retval = select i1 %cmp, i1 %cmp1, i1 false
2476   ret i1 %retval
2479 define i1 @auto_gen_70_logical_fmf(double %a, double %b) {
2480 ; CHECK-LABEL: @auto_gen_70_logical_fmf(
2481 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2482 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2484   %cmp = fcmp ult double %a, %b
2485   %cmp1 = fcmp fast olt double %a, %b
2486   %retval = select i1 %cmp, i1 %cmp1, i1 false
2487   ret i1 %retval
2490 define i1 @auto_gen_71(double %a, double %b) {
2491 ; CHECK-LABEL: @auto_gen_71(
2492 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2493 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2495   %cmp = fcmp ult double %a, %b
2496   %cmp1 = fcmp ole double %a, %b
2497   %retval = and i1 %cmp, %cmp1
2498   ret i1 %retval
2501 define i1 @auto_gen_71_logical(double %a, double %b) {
2502 ; CHECK-LABEL: @auto_gen_71_logical(
2503 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2504 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2506   %cmp = fcmp ult double %a, %b
2507   %cmp1 = fcmp ole double %a, %b
2508   %retval = select i1 %cmp, i1 %cmp1, i1 false
2509   ret i1 %retval
2512 define i1 @auto_gen_71_logical_fmf(double %a, double %b) {
2513 ; CHECK-LABEL: @auto_gen_71_logical_fmf(
2514 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
2515 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2517   %cmp = fcmp fast ult double %a, %b
2518   %cmp1 = fcmp fast ole double %a, %b
2519   %retval = select i1 %cmp, i1 %cmp1, i1 false
2520   ret i1 %retval
2523 define i1 @auto_gen_72(double %a, double %b) {
2524 ; CHECK-LABEL: @auto_gen_72(
2525 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2526 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2528   %cmp = fcmp ult double %a, %b
2529   %cmp1 = fcmp one double %a, %b
2530   %retval = and i1 %cmp, %cmp1
2531   ret i1 %retval
2534 define i1 @auto_gen_72_logical(double %a, double %b) {
2535 ; CHECK-LABEL: @auto_gen_72_logical(
2536 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2537 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2539   %cmp = fcmp ult double %a, %b
2540   %cmp1 = fcmp one double %a, %b
2541   %retval = select i1 %cmp, i1 %cmp1, i1 false
2542   ret i1 %retval
2545 define i1 @auto_gen_72_logical_fmf(double %a, double %b) {
2546 ; CHECK-LABEL: @auto_gen_72_logical_fmf(
2547 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2548 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2550   %cmp = fcmp ult double %a, %b
2551   %cmp1 = fcmp fast one double %a, %b
2552   %retval = select i1 %cmp, i1 %cmp1, i1 false
2553   ret i1 %retval
2556 define i1 @auto_gen_73(double %a, double %b) {
2557 ; CHECK-LABEL: @auto_gen_73(
2558 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2559 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2561   %cmp = fcmp ult double %a, %b
2562   %cmp1 = fcmp ord double %a, %b
2563   %retval = and i1 %cmp, %cmp1
2564   ret i1 %retval
2567 define i1 @auto_gen_73_logical(double %a, double %b) {
2568 ; CHECK-LABEL: @auto_gen_73_logical(
2569 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2570 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2572   %cmp = fcmp ult double %a, %b
2573   %cmp1 = fcmp ord double %a, %b
2574   %retval = select i1 %cmp, i1 %cmp1, i1 false
2575   ret i1 %retval
2578 define i1 @auto_gen_73_logical_fmf(double %a, double %b) {
2579 ; CHECK-LABEL: @auto_gen_73_logical_fmf(
2580 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
2581 ; CHECK-NEXT:    ret i1 [[CMP]]
2583   %cmp = fcmp fast ult double %a, %b
2584   %cmp1 = fcmp fast ord double %a, %b
2585   %retval = select i1 %cmp, i1 %cmp1, i1 false
2586   ret i1 %retval
2589 define i1 @auto_gen_74(double %a, double %b) {
2590 ; CHECK-LABEL: @auto_gen_74(
2591 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2592 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2594   %cmp = fcmp ult double %a, %b
2595   %cmp1 = fcmp ueq double %a, %b
2596   %retval = and i1 %cmp, %cmp1
2597   ret i1 %retval
2600 define i1 @auto_gen_74_logical(double %a, double %b) {
2601 ; CHECK-LABEL: @auto_gen_74_logical(
2602 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2603 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2605   %cmp = fcmp ult double %a, %b
2606   %cmp1 = fcmp ueq double %a, %b
2607   %retval = select i1 %cmp, i1 %cmp1, i1 false
2608   ret i1 %retval
2611 define i1 @auto_gen_74_logical_fmf(double %a, double %b) {
2612 ; CHECK-LABEL: @auto_gen_74_logical_fmf(
2613 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2614 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2616   %cmp = fcmp ult double %a, %b
2617   %cmp1 = fcmp fast ueq double %a, %b
2618   %retval = select i1 %cmp, i1 %cmp1, i1 false
2619   ret i1 %retval
2622 define i1 @auto_gen_75(double %a, double %b) {
2623 ; CHECK-LABEL: @auto_gen_75(
2624 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2625 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2627   %cmp = fcmp ult double %a, %b
2628   %cmp1 = fcmp ugt double %a, %b
2629   %retval = and i1 %cmp, %cmp1
2630   ret i1 %retval
2633 define i1 @auto_gen_75_logical(double %a, double %b) {
2634 ; CHECK-LABEL: @auto_gen_75_logical(
2635 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2636 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2638   %cmp = fcmp ult double %a, %b
2639   %cmp1 = fcmp ugt double %a, %b
2640   %retval = select i1 %cmp, i1 %cmp1, i1 false
2641   ret i1 %retval
2644 define i1 @auto_gen_75_logical_fmf(double %a, double %b) {
2645 ; CHECK-LABEL: @auto_gen_75_logical_fmf(
2646 ; CHECK-NEXT:    ret i1 false
2648   %cmp = fcmp fast ult double %a, %b
2649   %cmp1 = fcmp fast ugt double %a, %b
2650   %retval = select i1 %cmp, i1 %cmp1, i1 false
2651   ret i1 %retval
2654 define i1 @auto_gen_76(double %a, double %b) {
2655 ; CHECK-LABEL: @auto_gen_76(
2656 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2657 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2659   %cmp = fcmp ult double %a, %b
2660   %cmp1 = fcmp uge double %a, %b
2661   %retval = and i1 %cmp, %cmp1
2662   ret i1 %retval
2665 define i1 @auto_gen_76_logical(double %a, double %b) {
2666 ; CHECK-LABEL: @auto_gen_76_logical(
2667 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2668 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2670   %cmp = fcmp ult double %a, %b
2671   %cmp1 = fcmp uge double %a, %b
2672   %retval = select i1 %cmp, i1 %cmp1, i1 false
2673   ret i1 %retval
2676 define i1 @auto_gen_76_logical_fmf(double %a, double %b) {
2677 ; CHECK-LABEL: @auto_gen_76_logical_fmf(
2678 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
2679 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2681   %cmp = fcmp ult double %a, %b
2682   %cmp1 = fcmp fast uge double %a, %b
2683   %retval = select i1 %cmp, i1 %cmp1, i1 false
2684   ret i1 %retval
2687 define i1 @auto_gen_77(double %a, double %b) {
2688 ; CHECK-LABEL: @auto_gen_77(
2689 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
2690 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2692   %cmp = fcmp ult double %a, %b
2693   %cmp1 = fcmp ult double %a, %b
2694   %retval = and i1 %cmp, %cmp1
2695   ret i1 %retval
2698 define i1 @auto_gen_77_logical(double %a, double %b) {
2699 ; CHECK-LABEL: @auto_gen_77_logical(
2700 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
2701 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2703   %cmp = fcmp ult double %a, %b
2704   %cmp1 = fcmp ult double %a, %b
2705   %retval = select i1 %cmp, i1 %cmp1, i1 false
2706   ret i1 %retval
2709 define i1 @auto_gen_77_logical_fmf(double %a, double %b) {
2710 ; CHECK-LABEL: @auto_gen_77_logical_fmf(
2711 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
2712 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2714   %cmp = fcmp fast ult double %a, %b
2715   %cmp1 = fcmp fast ult double %a, %b
2716   %retval = select i1 %cmp, i1 %cmp1, i1 false
2717   ret i1 %retval
2720 define i1 @auto_gen_78(double %a, double %b) {
2721 ; CHECK-LABEL: @auto_gen_78(
2722 ; CHECK-NEXT:    ret i1 false
2724   %cmp = fcmp ule double %a, %b
2725   %cmp1 = fcmp false double %a, %b
2726   %retval = and i1 %cmp, %cmp1
2727   ret i1 %retval
2730 define i1 @auto_gen_78_logical(double %a, double %b) {
2731 ; CHECK-LABEL: @auto_gen_78_logical(
2732 ; CHECK-NEXT:    ret i1 false
2734   %cmp = fcmp ule double %a, %b
2735   %cmp1 = fcmp false double %a, %b
2736   %retval = select i1 %cmp, i1 %cmp1, i1 false
2737   ret i1 %retval
2740 define i1 @auto_gen_78_logical_fmf(double %a, double %b) {
2741 ; CHECK-LABEL: @auto_gen_78_logical_fmf(
2742 ; CHECK-NEXT:    ret i1 false
2744   %cmp = fcmp ule double %a, %b
2745   %cmp1 = fcmp fast false double %a, %b
2746   %retval = select i1 %cmp, i1 %cmp1, i1 false
2747   ret i1 %retval
2750 define i1 @auto_gen_79(double %a, double %b) {
2751 ; CHECK-LABEL: @auto_gen_79(
2752 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2753 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2755   %cmp = fcmp ule double %a, %b
2756   %cmp1 = fcmp oeq double %a, %b
2757   %retval = and i1 %cmp, %cmp1
2758   ret i1 %retval
2761 define i1 @auto_gen_79_logical(double %a, double %b) {
2762 ; CHECK-LABEL: @auto_gen_79_logical(
2763 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2764 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2766   %cmp = fcmp ule double %a, %b
2767   %cmp1 = fcmp oeq double %a, %b
2768   %retval = select i1 %cmp, i1 %cmp1, i1 false
2769   ret i1 %retval
2772 define i1 @auto_gen_79_logical_fmf(double %a, double %b) {
2773 ; CHECK-LABEL: @auto_gen_79_logical_fmf(
2774 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
2775 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2777   %cmp = fcmp fast ule double %a, %b
2778   %cmp1 = fcmp fast oeq double %a, %b
2779   %retval = select i1 %cmp, i1 %cmp1, i1 false
2780   ret i1 %retval
2783 define i1 @auto_gen_80(double %a, double %b) {
2784 ; CHECK-LABEL: @auto_gen_80(
2785 ; CHECK-NEXT:    ret i1 false
2787   %cmp = fcmp ule double %a, %b
2788   %cmp1 = fcmp ogt double %a, %b
2789   %retval = and i1 %cmp, %cmp1
2790   ret i1 %retval
2793 define i1 @auto_gen_80_logical(double %a, double %b) {
2794 ; CHECK-LABEL: @auto_gen_80_logical(
2795 ; CHECK-NEXT:    ret i1 false
2797   %cmp = fcmp ule double %a, %b
2798   %cmp1 = fcmp ogt double %a, %b
2799   %retval = select i1 %cmp, i1 %cmp1, i1 false
2800   ret i1 %retval
2803 define i1 @auto_gen_80_logical_fmf(double %a, double %b) {
2804 ; CHECK-LABEL: @auto_gen_80_logical_fmf(
2805 ; CHECK-NEXT:    ret i1 false
2807   %cmp = fcmp ule double %a, %b
2808   %cmp1 = fcmp fast ogt double %a, %b
2809   %retval = select i1 %cmp, i1 %cmp1, i1 false
2810   ret i1 %retval
2813 define i1 @auto_gen_81(double %a, double %b) {
2814 ; CHECK-LABEL: @auto_gen_81(
2815 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2816 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2818   %cmp = fcmp ule double %a, %b
2819   %cmp1 = fcmp oge double %a, %b
2820   %retval = and i1 %cmp, %cmp1
2821   ret i1 %retval
2824 define i1 @auto_gen_81_logical(double %a, double %b) {
2825 ; CHECK-LABEL: @auto_gen_81_logical(
2826 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
2827 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2829   %cmp = fcmp ule double %a, %b
2830   %cmp1 = fcmp oge double %a, %b
2831   %retval = select i1 %cmp, i1 %cmp1, i1 false
2832   ret i1 %retval
2835 define i1 @auto_gen_81_logical_fmf(double %a, double %b) {
2836 ; CHECK-LABEL: @auto_gen_81_logical_fmf(
2837 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
2838 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2840   %cmp = fcmp fast ule double %a, %b
2841   %cmp1 = fcmp fast oge double %a, %b
2842   %retval = select i1 %cmp, i1 %cmp1, i1 false
2843   ret i1 %retval
2846 define i1 @auto_gen_82(double %a, double %b) {
2847 ; CHECK-LABEL: @auto_gen_82(
2848 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2849 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2851   %cmp = fcmp ule double %a, %b
2852   %cmp1 = fcmp olt double %a, %b
2853   %retval = and i1 %cmp, %cmp1
2854   ret i1 %retval
2857 define i1 @auto_gen_82_logical(double %a, double %b) {
2858 ; CHECK-LABEL: @auto_gen_82_logical(
2859 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2860 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2862   %cmp = fcmp ule double %a, %b
2863   %cmp1 = fcmp olt double %a, %b
2864   %retval = select i1 %cmp, i1 %cmp1, i1 false
2865   ret i1 %retval
2868 define i1 @auto_gen_82_logical_fmf(double %a, double %b) {
2869 ; CHECK-LABEL: @auto_gen_82_logical_fmf(
2870 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2871 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2873   %cmp = fcmp ule double %a, %b
2874   %cmp1 = fcmp fast olt double %a, %b
2875   %retval = select i1 %cmp, i1 %cmp1, i1 false
2876   ret i1 %retval
2879 define i1 @auto_gen_83(double %a, double %b) {
2880 ; CHECK-LABEL: @auto_gen_83(
2881 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
2882 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2884   %cmp = fcmp ule double %a, %b
2885   %cmp1 = fcmp ole double %a, %b
2886   %retval = and i1 %cmp, %cmp1
2887   ret i1 %retval
2890 define i1 @auto_gen_83_logical(double %a, double %b) {
2891 ; CHECK-LABEL: @auto_gen_83_logical(
2892 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
2893 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2895   %cmp = fcmp ule double %a, %b
2896   %cmp1 = fcmp ole double %a, %b
2897   %retval = select i1 %cmp, i1 %cmp1, i1 false
2898   ret i1 %retval
2901 define i1 @auto_gen_83_logical_fmf(double %a, double %b) {
2902 ; CHECK-LABEL: @auto_gen_83_logical_fmf(
2903 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
2904 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2906   %cmp = fcmp fast ule double %a, %b
2907   %cmp1 = fcmp fast ole double %a, %b
2908   %retval = select i1 %cmp, i1 %cmp1, i1 false
2909   ret i1 %retval
2912 define i1 @auto_gen_84(double %a, double %b) {
2913 ; CHECK-LABEL: @auto_gen_84(
2914 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2915 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2917   %cmp = fcmp ule double %a, %b
2918   %cmp1 = fcmp one double %a, %b
2919   %retval = and i1 %cmp, %cmp1
2920   ret i1 %retval
2923 define i1 @auto_gen_84_logical(double %a, double %b) {
2924 ; CHECK-LABEL: @auto_gen_84_logical(
2925 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2926 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2928   %cmp = fcmp ule double %a, %b
2929   %cmp1 = fcmp one double %a, %b
2930   %retval = select i1 %cmp, i1 %cmp1, i1 false
2931   ret i1 %retval
2934 define i1 @auto_gen_84_logical_fmf(double %a, double %b) {
2935 ; CHECK-LABEL: @auto_gen_84_logical_fmf(
2936 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
2937 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2939   %cmp = fcmp ule double %a, %b
2940   %cmp1 = fcmp fast one double %a, %b
2941   %retval = select i1 %cmp, i1 %cmp1, i1 false
2942   ret i1 %retval
2945 define i1 @auto_gen_85(double %a, double %b) {
2946 ; CHECK-LABEL: @auto_gen_85(
2947 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
2948 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2950   %cmp = fcmp ule double %a, %b
2951   %cmp1 = fcmp ord double %a, %b
2952   %retval = and i1 %cmp, %cmp1
2953   ret i1 %retval
2956 define i1 @auto_gen_85_logical(double %a, double %b) {
2957 ; CHECK-LABEL: @auto_gen_85_logical(
2958 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
2959 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2961   %cmp = fcmp ule double %a, %b
2962   %cmp1 = fcmp ord double %a, %b
2963   %retval = select i1 %cmp, i1 %cmp1, i1 false
2964   ret i1 %retval
2967 define i1 @auto_gen_85_logical_fmf(double %a, double %b) {
2968 ; CHECK-LABEL: @auto_gen_85_logical_fmf(
2969 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
2970 ; CHECK-NEXT:    ret i1 [[CMP]]
2972   %cmp = fcmp fast ule double %a, %b
2973   %cmp1 = fcmp fast ord double %a, %b
2974   %retval = select i1 %cmp, i1 %cmp1, i1 false
2975   ret i1 %retval
2978 define i1 @auto_gen_86(double %a, double %b) {
2979 ; CHECK-LABEL: @auto_gen_86(
2980 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
2981 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2983   %cmp = fcmp ule double %a, %b
2984   %cmp1 = fcmp ueq double %a, %b
2985   %retval = and i1 %cmp, %cmp1
2986   ret i1 %retval
2989 define i1 @auto_gen_86_logical(double %a, double %b) {
2990 ; CHECK-LABEL: @auto_gen_86_logical(
2991 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
2992 ; CHECK-NEXT:    ret i1 [[RETVAL]]
2994   %cmp = fcmp ule double %a, %b
2995   %cmp1 = fcmp ueq double %a, %b
2996   %retval = select i1 %cmp, i1 %cmp1, i1 false
2997   ret i1 %retval
3000 define i1 @auto_gen_86_logical_fmf(double %a, double %b) {
3001 ; CHECK-LABEL: @auto_gen_86_logical_fmf(
3002 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
3003 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3005   %cmp = fcmp ule double %a, %b
3006   %cmp1 = fcmp fast ueq double %a, %b
3007   %retval = select i1 %cmp, i1 %cmp1, i1 false
3008   ret i1 %retval
3011 define i1 @auto_gen_87(double %a, double %b) {
3012 ; CHECK-LABEL: @auto_gen_87(
3013 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3014 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3016   %cmp = fcmp ule double %a, %b
3017   %cmp1 = fcmp ugt double %a, %b
3018   %retval = and i1 %cmp, %cmp1
3019   ret i1 %retval
3022 define i1 @auto_gen_87_logical(double %a, double %b) {
3023 ; CHECK-LABEL: @auto_gen_87_logical(
3024 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3025 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3027   %cmp = fcmp ule double %a, %b
3028   %cmp1 = fcmp ugt double %a, %b
3029   %retval = select i1 %cmp, i1 %cmp1, i1 false
3030   ret i1 %retval
3033 define i1 @auto_gen_87_logical_fmf(double %a, double %b) {
3034 ; CHECK-LABEL: @auto_gen_87_logical_fmf(
3035 ; CHECK-NEXT:    ret i1 false
3037   %cmp = fcmp fast ule double %a, %b
3038   %cmp1 = fcmp fast ugt double %a, %b
3039   %retval = select i1 %cmp, i1 %cmp1, i1 false
3040   ret i1 %retval
3043 define i1 @auto_gen_88(double %a, double %b) {
3044 ; CHECK-LABEL: @auto_gen_88(
3045 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
3046 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3048   %cmp = fcmp ule double %a, %b
3049   %cmp1 = fcmp uge double %a, %b
3050   %retval = and i1 %cmp, %cmp1
3051   ret i1 %retval
3054 define i1 @auto_gen_88_logical(double %a, double %b) {
3055 ; CHECK-LABEL: @auto_gen_88_logical(
3056 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
3057 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3059   %cmp = fcmp ule double %a, %b
3060   %cmp1 = fcmp uge double %a, %b
3061   %retval = select i1 %cmp, i1 %cmp1, i1 false
3062   ret i1 %retval
3065 define i1 @auto_gen_88_logical_fmf(double %a, double %b) {
3066 ; CHECK-LABEL: @auto_gen_88_logical_fmf(
3067 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
3068 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3070   %cmp = fcmp ule double %a, %b
3071   %cmp1 = fcmp fast uge double %a, %b
3072   %retval = select i1 %cmp, i1 %cmp1, i1 false
3073   ret i1 %retval
3076 define i1 @auto_gen_89(double %a, double %b) {
3077 ; CHECK-LABEL: @auto_gen_89(
3078 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3079 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3081   %cmp = fcmp ule double %a, %b
3082   %cmp1 = fcmp ult double %a, %b
3083   %retval = and i1 %cmp, %cmp1
3084   ret i1 %retval
3087 define i1 @auto_gen_89_logical(double %a, double %b) {
3088 ; CHECK-LABEL: @auto_gen_89_logical(
3089 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3090 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3092   %cmp = fcmp ule double %a, %b
3093   %cmp1 = fcmp ult double %a, %b
3094   %retval = select i1 %cmp, i1 %cmp1, i1 false
3095   ret i1 %retval
3098 define i1 @auto_gen_89_logical_fmf(double %a, double %b) {
3099 ; CHECK-LABEL: @auto_gen_89_logical_fmf(
3100 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
3101 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3103   %cmp = fcmp fast ule double %a, %b
3104   %cmp1 = fcmp fast ult double %a, %b
3105   %retval = select i1 %cmp, i1 %cmp1, i1 false
3106   ret i1 %retval
3109 define i1 @auto_gen_90(double %a, double %b) {
3110 ; CHECK-LABEL: @auto_gen_90(
3111 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
3112 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3114   %cmp = fcmp ule double %a, %b
3115   %cmp1 = fcmp ule double %a, %b
3116   %retval = and i1 %cmp, %cmp1
3117   ret i1 %retval
3120 define i1 @auto_gen_90_logical(double %a, double %b) {
3121 ; CHECK-LABEL: @auto_gen_90_logical(
3122 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
3123 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3125   %cmp = fcmp ule double %a, %b
3126   %cmp1 = fcmp ule double %a, %b
3127   %retval = select i1 %cmp, i1 %cmp1, i1 false
3128   ret i1 %retval
3131 define i1 @auto_gen_90_logical_fmf(double %a, double %b) {
3132 ; CHECK-LABEL: @auto_gen_90_logical_fmf(
3133 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
3134 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3136   %cmp = fcmp ule double %a, %b
3137   %cmp1 = fcmp fast ule double %a, %b
3138   %retval = select i1 %cmp, i1 %cmp1, i1 false
3139   ret i1 %retval
3142 define i1 @auto_gen_91(double %a, double %b) {
3143 ; CHECK-LABEL: @auto_gen_91(
3144 ; CHECK-NEXT:    ret i1 false
3146   %cmp = fcmp une double %a, %b
3147   %cmp1 = fcmp false double %a, %b
3148   %retval = and i1 %cmp, %cmp1
3149   ret i1 %retval
3152 define i1 @auto_gen_91_logical(double %a, double %b) {
3153 ; CHECK-LABEL: @auto_gen_91_logical(
3154 ; CHECK-NEXT:    ret i1 false
3156   %cmp = fcmp une double %a, %b
3157   %cmp1 = fcmp false double %a, %b
3158   %retval = select i1 %cmp, i1 %cmp1, i1 false
3159   ret i1 %retval
3162 define i1 @auto_gen_91_logical_fmf(double %a, double %b) {
3163 ; CHECK-LABEL: @auto_gen_91_logical_fmf(
3164 ; CHECK-NEXT:    ret i1 false
3166   %cmp = fcmp fast une double %a, %b
3167   %cmp1 = fcmp fast false double %a, %b
3168   %retval = select i1 %cmp, i1 %cmp1, i1 false
3169   ret i1 %retval
3172 define i1 @auto_gen_92(double %a, double %b) {
3173 ; CHECK-LABEL: @auto_gen_92(
3174 ; CHECK-NEXT:    ret i1 false
3176   %cmp = fcmp une double %a, %b
3177   %cmp1 = fcmp oeq double %a, %b
3178   %retval = and i1 %cmp, %cmp1
3179   ret i1 %retval
3182 define i1 @auto_gen_92_logical(double %a, double %b) {
3183 ; CHECK-LABEL: @auto_gen_92_logical(
3184 ; CHECK-NEXT:    ret i1 false
3186   %cmp = fcmp une double %a, %b
3187   %cmp1 = fcmp oeq double %a, %b
3188   %retval = select i1 %cmp, i1 %cmp1, i1 false
3189   ret i1 %retval
3192 define i1 @auto_gen_92_logical_fmf(double %a, double %b) {
3193 ; CHECK-LABEL: @auto_gen_92_logical_fmf(
3194 ; CHECK-NEXT:    ret i1 false
3196   %cmp = fcmp une double %a, %b
3197   %cmp1 = fcmp fast oeq double %a, %b
3198   %retval = select i1 %cmp, i1 %cmp1, i1 false
3199   ret i1 %retval
3202 define i1 @auto_gen_93(double %a, double %b) {
3203 ; CHECK-LABEL: @auto_gen_93(
3204 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
3205 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3207   %cmp = fcmp une double %a, %b
3208   %cmp1 = fcmp ogt double %a, %b
3209   %retval = and i1 %cmp, %cmp1
3210   ret i1 %retval
3213 define i1 @auto_gen_93_logical(double %a, double %b) {
3214 ; CHECK-LABEL: @auto_gen_93_logical(
3215 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
3216 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3218   %cmp = fcmp une double %a, %b
3219   %cmp1 = fcmp ogt double %a, %b
3220   %retval = select i1 %cmp, i1 %cmp1, i1 false
3221   ret i1 %retval
3224 define i1 @auto_gen_93_logical_fmf(double %a, double %b) {
3225 ; CHECK-LABEL: @auto_gen_93_logical_fmf(
3226 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
3227 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3229   %cmp = fcmp fast une double %a, %b
3230   %cmp1 = fcmp fast ogt double %a, %b
3231   %retval = select i1 %cmp, i1 %cmp1, i1 false
3232   ret i1 %retval
3235 define i1 @auto_gen_94(double %a, double %b) {
3236 ; CHECK-LABEL: @auto_gen_94(
3237 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
3238 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3240   %cmp = fcmp une double %a, %b
3241   %cmp1 = fcmp oge double %a, %b
3242   %retval = and i1 %cmp, %cmp1
3243   ret i1 %retval
3246 define i1 @auto_gen_94_logical(double %a, double %b) {
3247 ; CHECK-LABEL: @auto_gen_94_logical(
3248 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
3249 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3251   %cmp = fcmp une double %a, %b
3252   %cmp1 = fcmp oge double %a, %b
3253   %retval = select i1 %cmp, i1 %cmp1, i1 false
3254   ret i1 %retval
3257 define i1 @auto_gen_94_logical_fmf(double %a, double %b) {
3258 ; CHECK-LABEL: @auto_gen_94_logical_fmf(
3259 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
3260 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3262   %cmp = fcmp une double %a, %b
3263   %cmp1 = fcmp fast oge double %a, %b
3264   %retval = select i1 %cmp, i1 %cmp1, i1 false
3265   ret i1 %retval
3268 define i1 @auto_gen_95(double %a, double %b) {
3269 ; CHECK-LABEL: @auto_gen_95(
3270 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
3271 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3273   %cmp = fcmp une double %a, %b
3274   %cmp1 = fcmp olt double %a, %b
3275   %retval = and i1 %cmp, %cmp1
3276   ret i1 %retval
3279 define i1 @auto_gen_95_logical(double %a, double %b) {
3280 ; CHECK-LABEL: @auto_gen_95_logical(
3281 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
3282 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3284   %cmp = fcmp une double %a, %b
3285   %cmp1 = fcmp olt double %a, %b
3286   %retval = select i1 %cmp, i1 %cmp1, i1 false
3287   ret i1 %retval
3290 define i1 @auto_gen_95_logical_fmf(double %a, double %b) {
3291 ; CHECK-LABEL: @auto_gen_95_logical_fmf(
3292 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
3293 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3295   %cmp = fcmp fast une double %a, %b
3296   %cmp1 = fcmp fast olt double %a, %b
3297   %retval = select i1 %cmp, i1 %cmp1, i1 false
3298   ret i1 %retval
3301 define i1 @auto_gen_96(double %a, double %b) {
3302 ; CHECK-LABEL: @auto_gen_96(
3303 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
3304 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3306   %cmp = fcmp une double %a, %b
3307   %cmp1 = fcmp ole double %a, %b
3308   %retval = and i1 %cmp, %cmp1
3309   ret i1 %retval
3312 define i1 @auto_gen_96_logical(double %a, double %b) {
3313 ; CHECK-LABEL: @auto_gen_96_logical(
3314 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
3315 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3317   %cmp = fcmp une double %a, %b
3318   %cmp1 = fcmp ole double %a, %b
3319   %retval = select i1 %cmp, i1 %cmp1, i1 false
3320   ret i1 %retval
3323 define i1 @auto_gen_96_logical_fmf(double %a, double %b) {
3324 ; CHECK-LABEL: @auto_gen_96_logical_fmf(
3325 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
3326 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3328   %cmp = fcmp une double %a, %b
3329   %cmp1 = fcmp fast ole double %a, %b
3330   %retval = select i1 %cmp, i1 %cmp1, i1 false
3331   ret i1 %retval
3334 define i1 @auto_gen_97(double %a, double %b) {
3335 ; CHECK-LABEL: @auto_gen_97(
3336 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
3337 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3339   %cmp = fcmp une double %a, %b
3340   %cmp1 = fcmp one double %a, %b
3341   %retval = and i1 %cmp, %cmp1
3342   ret i1 %retval
3345 define i1 @auto_gen_97_logical(double %a, double %b) {
3346 ; CHECK-LABEL: @auto_gen_97_logical(
3347 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
3348 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3350   %cmp = fcmp une double %a, %b
3351   %cmp1 = fcmp one double %a, %b
3352   %retval = select i1 %cmp, i1 %cmp1, i1 false
3353   ret i1 %retval
3356 define i1 @auto_gen_97_logical_fmf(double %a, double %b) {
3357 ; CHECK-LABEL: @auto_gen_97_logical_fmf(
3358 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
3359 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3361   %cmp = fcmp fast une double %a, %b
3362   %cmp1 = fcmp fast one double %a, %b
3363   %retval = select i1 %cmp, i1 %cmp1, i1 false
3364   ret i1 %retval
3367 define i1 @auto_gen_98(double %a, double %b) {
3368 ; CHECK-LABEL: @auto_gen_98(
3369 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
3370 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3372   %cmp = fcmp une double %a, %b
3373   %cmp1 = fcmp ord double %a, %b
3374   %retval = and i1 %cmp, %cmp1
3375   ret i1 %retval
3378 define i1 @auto_gen_98_logical(double %a, double %b) {
3379 ; CHECK-LABEL: @auto_gen_98_logical(
3380 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
3381 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3383   %cmp = fcmp une double %a, %b
3384   %cmp1 = fcmp ord double %a, %b
3385   %retval = select i1 %cmp, i1 %cmp1, i1 false
3386   ret i1 %retval
3389 define i1 @auto_gen_98_logical_fmf(double %a, double %b) {
3390 ; CHECK-LABEL: @auto_gen_98_logical_fmf(
3391 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
3392 ; CHECK-NEXT:    ret i1 [[CMP]]
3394   %cmp = fcmp une double %a, %b
3395   %cmp1 = fcmp fast ord double %a, %b
3396   %retval = select i1 %cmp, i1 %cmp1, i1 false
3397   ret i1 %retval
3400 define i1 @auto_gen_99(double %a, double %b) {
3401 ; CHECK-LABEL: @auto_gen_99(
3402 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3403 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3405   %cmp = fcmp une double %a, %b
3406   %cmp1 = fcmp ueq double %a, %b
3407   %retval = and i1 %cmp, %cmp1
3408   ret i1 %retval
3411 define i1 @auto_gen_99_logical(double %a, double %b) {
3412 ; CHECK-LABEL: @auto_gen_99_logical(
3413 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3414 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3416   %cmp = fcmp une double %a, %b
3417   %cmp1 = fcmp ueq double %a, %b
3418   %retval = select i1 %cmp, i1 %cmp1, i1 false
3419   ret i1 %retval
3422 define i1 @auto_gen_99_logical_fmf(double %a, double %b) {
3423 ; CHECK-LABEL: @auto_gen_99_logical_fmf(
3424 ; CHECK-NEXT:    ret i1 false
3426   %cmp = fcmp fast une double %a, %b
3427   %cmp1 = fcmp fast ueq double %a, %b
3428   %retval = select i1 %cmp, i1 %cmp1, i1 false
3429   ret i1 %retval
3432 define i1 @auto_gen_100(double %a, double %b) {
3433 ; CHECK-LABEL: @auto_gen_100(
3434 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
3435 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3437   %cmp = fcmp une double %a, %b
3438   %cmp1 = fcmp ugt double %a, %b
3439   %retval = and i1 %cmp, %cmp1
3440   ret i1 %retval
3443 define i1 @auto_gen_100_logical(double %a, double %b) {
3444 ; CHECK-LABEL: @auto_gen_100_logical(
3445 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
3446 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3448   %cmp = fcmp une double %a, %b
3449   %cmp1 = fcmp ugt double %a, %b
3450   %retval = select i1 %cmp, i1 %cmp1, i1 false
3451   ret i1 %retval
3454 define i1 @auto_gen_100_logical_fmf(double %a, double %b) {
3455 ; CHECK-LABEL: @auto_gen_100_logical_fmf(
3456 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
3457 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3459   %cmp = fcmp une double %a, %b
3460   %cmp1 = fcmp fast ugt double %a, %b
3461   %retval = select i1 %cmp, i1 %cmp1, i1 false
3462   ret i1 %retval
3465 define i1 @auto_gen_101(double %a, double %b) {
3466 ; CHECK-LABEL: @auto_gen_101(
3467 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
3468 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3470   %cmp = fcmp une double %a, %b
3471   %cmp1 = fcmp uge double %a, %b
3472   %retval = and i1 %cmp, %cmp1
3473   ret i1 %retval
3476 define i1 @auto_gen_101_logical(double %a, double %b) {
3477 ; CHECK-LABEL: @auto_gen_101_logical(
3478 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
3479 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3481   %cmp = fcmp une double %a, %b
3482   %cmp1 = fcmp uge double %a, %b
3483   %retval = select i1 %cmp, i1 %cmp1, i1 false
3484   ret i1 %retval
3487 define i1 @auto_gen_101_logical_fmf(double %a, double %b) {
3488 ; CHECK-LABEL: @auto_gen_101_logical_fmf(
3489 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
3490 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3492   %cmp = fcmp fast une double %a, %b
3493   %cmp1 = fcmp fast uge double %a, %b
3494   %retval = select i1 %cmp, i1 %cmp1, i1 false
3495   ret i1 %retval
3498 define i1 @auto_gen_102(double %a, double %b) {
3499 ; CHECK-LABEL: @auto_gen_102(
3500 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3501 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3503   %cmp = fcmp une double %a, %b
3504   %cmp1 = fcmp ult double %a, %b
3505   %retval = and i1 %cmp, %cmp1
3506   ret i1 %retval
3509 define i1 @auto_gen_102_logical(double %a, double %b) {
3510 ; CHECK-LABEL: @auto_gen_102_logical(
3511 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3512 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3514   %cmp = fcmp une double %a, %b
3515   %cmp1 = fcmp ult double %a, %b
3516   %retval = select i1 %cmp, i1 %cmp1, i1 false
3517   ret i1 %retval
3520 define i1 @auto_gen_102_logical_fmf(double %a, double %b) {
3521 ; CHECK-LABEL: @auto_gen_102_logical_fmf(
3522 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3523 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3525   %cmp = fcmp une double %a, %b
3526   %cmp1 = fcmp fast ult double %a, %b
3527   %retval = select i1 %cmp, i1 %cmp1, i1 false
3528   ret i1 %retval
3531 define i1 @auto_gen_103(double %a, double %b) {
3532 ; CHECK-LABEL: @auto_gen_103(
3533 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3534 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3536   %cmp = fcmp une double %a, %b
3537   %cmp1 = fcmp ule double %a, %b
3538   %retval = and i1 %cmp, %cmp1
3539   ret i1 %retval
3542 define i1 @auto_gen_103_logical(double %a, double %b) {
3543 ; CHECK-LABEL: @auto_gen_103_logical(
3544 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
3545 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3547   %cmp = fcmp une double %a, %b
3548   %cmp1 = fcmp ule double %a, %b
3549   %retval = select i1 %cmp, i1 %cmp1, i1 false
3550   ret i1 %retval
3553 define i1 @auto_gen_103_logical_fmf(double %a, double %b) {
3554 ; CHECK-LABEL: @auto_gen_103_logical_fmf(
3555 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
3556 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3558   %cmp = fcmp fast une double %a, %b
3559   %cmp1 = fcmp fast ule double %a, %b
3560   %retval = select i1 %cmp, i1 %cmp1, i1 false
3561   ret i1 %retval
3564 define i1 @auto_gen_104(double %a, double %b) {
3565 ; CHECK-LABEL: @auto_gen_104(
3566 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
3567 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3569   %cmp = fcmp une double %a, %b
3570   %cmp1 = fcmp une double %a, %b
3571   %retval = and i1 %cmp, %cmp1
3572   ret i1 %retval
3575 define i1 @auto_gen_104_logical(double %a, double %b) {
3576 ; CHECK-LABEL: @auto_gen_104_logical(
3577 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
3578 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3580   %cmp = fcmp une double %a, %b
3581   %cmp1 = fcmp une double %a, %b
3582   %retval = select i1 %cmp, i1 %cmp1, i1 false
3583   ret i1 %retval
3586 define i1 @auto_gen_104_logical_fmf(double %a, double %b) {
3587 ; CHECK-LABEL: @auto_gen_104_logical_fmf(
3588 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
3589 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3591   %cmp = fcmp une double %a, %b
3592   %cmp1 = fcmp fast une double %a, %b
3593   %retval = select i1 %cmp, i1 %cmp1, i1 false
3594   ret i1 %retval
3597 define i1 @auto_gen_105(double %a, double %b) {
3598 ; CHECK-LABEL: @auto_gen_105(
3599 ; CHECK-NEXT:    ret i1 false
3601   %cmp = fcmp uno double %a, %b
3602   %cmp1 = fcmp false double %a, %b
3603   %retval = and i1 %cmp, %cmp1
3604   ret i1 %retval
3607 define i1 @auto_gen_105_logical(double %a, double %b) {
3608 ; CHECK-LABEL: @auto_gen_105_logical(
3609 ; CHECK-NEXT:    ret i1 false
3611   %cmp = fcmp uno double %a, %b
3612   %cmp1 = fcmp false double %a, %b
3613   %retval = select i1 %cmp, i1 %cmp1, i1 false
3614   ret i1 %retval
3617 define i1 @auto_gen_105_logical_fmf(double %a, double %b) {
3618 ; CHECK-LABEL: @auto_gen_105_logical_fmf(
3619 ; CHECK-NEXT:    ret i1 false
3621   %cmp = fcmp fast uno double %a, %b
3622   %cmp1 = fcmp fast false double %a, %b
3623   %retval = select i1 %cmp, i1 %cmp1, i1 false
3624   ret i1 %retval
3627 define i1 @auto_gen_106(double %a, double %b) {
3628 ; CHECK-LABEL: @auto_gen_106(
3629 ; CHECK-NEXT:    ret i1 false
3631   %cmp = fcmp uno double %a, %b
3632   %cmp1 = fcmp oeq double %a, %b
3633   %retval = and i1 %cmp, %cmp1
3634   ret i1 %retval
3637 define i1 @auto_gen_106_logical(double %a, double %b) {
3638 ; CHECK-LABEL: @auto_gen_106_logical(
3639 ; CHECK-NEXT:    ret i1 false
3641   %cmp = fcmp uno double %a, %b
3642   %cmp1 = fcmp oeq double %a, %b
3643   %retval = select i1 %cmp, i1 %cmp1, i1 false
3644   ret i1 %retval
3647 define i1 @auto_gen_106_logical_fmf(double %a, double %b) {
3648 ; CHECK-LABEL: @auto_gen_106_logical_fmf(
3649 ; CHECK-NEXT:    ret i1 false
3651   %cmp = fcmp uno double %a, %b
3652   %cmp1 = fcmp fast oeq double %a, %b
3653   %retval = select i1 %cmp, i1 %cmp1, i1 false
3654   ret i1 %retval
3657 define i1 @auto_gen_107(double %a, double %b) {
3658 ; CHECK-LABEL: @auto_gen_107(
3659 ; CHECK-NEXT:    ret i1 false
3661   %cmp = fcmp uno double %a, %b
3662   %cmp1 = fcmp ogt double %a, %b
3663   %retval = and i1 %cmp, %cmp1
3664   ret i1 %retval
3667 define i1 @auto_gen_107_logical(double %a, double %b) {
3668 ; CHECK-LABEL: @auto_gen_107_logical(
3669 ; CHECK-NEXT:    ret i1 false
3671   %cmp = fcmp uno double %a, %b
3672   %cmp1 = fcmp ogt double %a, %b
3673   %retval = select i1 %cmp, i1 %cmp1, i1 false
3674   ret i1 %retval
3677 define i1 @auto_gen_107_logical_fmf(double %a, double %b) {
3678 ; CHECK-LABEL: @auto_gen_107_logical_fmf(
3679 ; CHECK-NEXT:    ret i1 false
3681   %cmp = fcmp fast uno double %a, %b
3682   %cmp1 = fcmp fast ogt double %a, %b
3683   %retval = select i1 %cmp, i1 %cmp1, i1 false
3684   ret i1 %retval
3687 define i1 @auto_gen_108(double %a, double %b) {
3688 ; CHECK-LABEL: @auto_gen_108(
3689 ; CHECK-NEXT:    ret i1 false
3691   %cmp = fcmp uno double %a, %b
3692   %cmp1 = fcmp oge double %a, %b
3693   %retval = and i1 %cmp, %cmp1
3694   ret i1 %retval
3697 define i1 @auto_gen_108_logical(double %a, double %b) {
3698 ; CHECK-LABEL: @auto_gen_108_logical(
3699 ; CHECK-NEXT:    ret i1 false
3701   %cmp = fcmp uno double %a, %b
3702   %cmp1 = fcmp oge double %a, %b
3703   %retval = select i1 %cmp, i1 %cmp1, i1 false
3704   ret i1 %retval
3707 define i1 @auto_gen_108_logical_fmf(double %a, double %b) {
3708 ; CHECK-LABEL: @auto_gen_108_logical_fmf(
3709 ; CHECK-NEXT:    ret i1 false
3711   %cmp = fcmp uno double %a, %b
3712   %cmp1 = fcmp fast oge double %a, %b
3713   %retval = select i1 %cmp, i1 %cmp1, i1 false
3714   ret i1 %retval
3717 define i1 @auto_gen_109(double %a, double %b) {
3718 ; CHECK-LABEL: @auto_gen_109(
3719 ; CHECK-NEXT:    ret i1 false
3721   %cmp = fcmp uno double %a, %b
3722   %cmp1 = fcmp olt double %a, %b
3723   %retval = and i1 %cmp, %cmp1
3724   ret i1 %retval
3727 define i1 @auto_gen_109_logical(double %a, double %b) {
3728 ; CHECK-LABEL: @auto_gen_109_logical(
3729 ; CHECK-NEXT:    ret i1 false
3731   %cmp = fcmp uno double %a, %b
3732   %cmp1 = fcmp olt double %a, %b
3733   %retval = select i1 %cmp, i1 %cmp1, i1 false
3734   ret i1 %retval
3737 define i1 @auto_gen_109_logical_fmf(double %a, double %b) {
3738 ; CHECK-LABEL: @auto_gen_109_logical_fmf(
3739 ; CHECK-NEXT:    ret i1 false
3741   %cmp = fcmp fast uno double %a, %b
3742   %cmp1 = fcmp fast olt double %a, %b
3743   %retval = select i1 %cmp, i1 %cmp1, i1 false
3744   ret i1 %retval
3747 define i1 @auto_gen_110(double %a, double %b) {
3748 ; CHECK-LABEL: @auto_gen_110(
3749 ; CHECK-NEXT:    ret i1 false
3751   %cmp = fcmp uno double %a, %b
3752   %cmp1 = fcmp ole double %a, %b
3753   %retval = and i1 %cmp, %cmp1
3754   ret i1 %retval
3757 define i1 @auto_gen_110_logical(double %a, double %b) {
3758 ; CHECK-LABEL: @auto_gen_110_logical(
3759 ; CHECK-NEXT:    ret i1 false
3761   %cmp = fcmp uno double %a, %b
3762   %cmp1 = fcmp ole double %a, %b
3763   %retval = select i1 %cmp, i1 %cmp1, i1 false
3764   ret i1 %retval
3767 define i1 @auto_gen_110_logical_fmf(double %a, double %b) {
3768 ; CHECK-LABEL: @auto_gen_110_logical_fmf(
3769 ; CHECK-NEXT:    ret i1 false
3771   %cmp = fcmp uno double %a, %b
3772   %cmp1 = fcmp fast ole double %a, %b
3773   %retval = select i1 %cmp, i1 %cmp1, i1 false
3774   ret i1 %retval
3777 define i1 @auto_gen_111(double %a, double %b) {
3778 ; CHECK-LABEL: @auto_gen_111(
3779 ; CHECK-NEXT:    ret i1 false
3781   %cmp = fcmp uno double %a, %b
3782   %cmp1 = fcmp one double %a, %b
3783   %retval = and i1 %cmp, %cmp1
3784   ret i1 %retval
3787 define i1 @auto_gen_111_logical(double %a, double %b) {
3788 ; CHECK-LABEL: @auto_gen_111_logical(
3789 ; CHECK-NEXT:    ret i1 false
3791   %cmp = fcmp uno double %a, %b
3792   %cmp1 = fcmp one double %a, %b
3793   %retval = select i1 %cmp, i1 %cmp1, i1 false
3794   ret i1 %retval
3797 define i1 @auto_gen_111_logical_fmf(double %a, double %b) {
3798 ; CHECK-LABEL: @auto_gen_111_logical_fmf(
3799 ; CHECK-NEXT:    ret i1 false
3801   %cmp = fcmp fast uno double %a, %b
3802   %cmp1 = fcmp fast one double %a, %b
3803   %retval = select i1 %cmp, i1 %cmp1, i1 false
3804   ret i1 %retval
3807 define i1 @auto_gen_112(double %a, double %b) {
3808 ; CHECK-LABEL: @auto_gen_112(
3809 ; CHECK-NEXT:    ret i1 false
3811   %cmp = fcmp uno double %a, %b
3812   %cmp1 = fcmp ord double %a, %b
3813   %retval = and i1 %cmp, %cmp1
3814   ret i1 %retval
3817 define i1 @auto_gen_112_logical(double %a, double %b) {
3818 ; CHECK-LABEL: @auto_gen_112_logical(
3819 ; CHECK-NEXT:    ret i1 false
3821   %cmp = fcmp uno double %a, %b
3822   %cmp1 = fcmp ord double %a, %b
3823   %retval = select i1 %cmp, i1 %cmp1, i1 false
3824   ret i1 %retval
3827 define i1 @auto_gen_112_logical_fmf(double %a, double %b) {
3828 ; CHECK-LABEL: @auto_gen_112_logical_fmf(
3829 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3830 ; CHECK-NEXT:    ret i1 [[CMP]]
3832   %cmp = fcmp uno double %a, %b
3833   %cmp1 = fcmp fast ord double %a, %b
3834   %retval = select i1 %cmp, i1 %cmp1, i1 false
3835   ret i1 %retval
3838 define i1 @auto_gen_113(double %a, double %b) {
3839 ; CHECK-LABEL: @auto_gen_113(
3840 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3841 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3843   %cmp = fcmp uno double %a, %b
3844   %cmp1 = fcmp ueq double %a, %b
3845   %retval = and i1 %cmp, %cmp1
3846   ret i1 %retval
3849 define i1 @auto_gen_113_logical(double %a, double %b) {
3850 ; CHECK-LABEL: @auto_gen_113_logical(
3851 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3852 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3854   %cmp = fcmp uno double %a, %b
3855   %cmp1 = fcmp ueq double %a, %b
3856   %retval = select i1 %cmp, i1 %cmp1, i1 false
3857   ret i1 %retval
3860 define i1 @auto_gen_113_logical_fmf(double %a, double %b) {
3861 ; CHECK-LABEL: @auto_gen_113_logical_fmf(
3862 ; CHECK-NEXT:    ret i1 false
3864   %cmp = fcmp fast uno double %a, %b
3865   %cmp1 = fcmp fast ueq double %a, %b
3866   %retval = select i1 %cmp, i1 %cmp1, i1 false
3867   ret i1 %retval
3870 define i1 @auto_gen_114(double %a, double %b) {
3871 ; CHECK-LABEL: @auto_gen_114(
3872 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3873 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3875   %cmp = fcmp uno double %a, %b
3876   %cmp1 = fcmp ugt double %a, %b
3877   %retval = and i1 %cmp, %cmp1
3878   ret i1 %retval
3881 define i1 @auto_gen_114_logical(double %a, double %b) {
3882 ; CHECK-LABEL: @auto_gen_114_logical(
3883 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3884 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3886   %cmp = fcmp uno double %a, %b
3887   %cmp1 = fcmp ugt double %a, %b
3888   %retval = select i1 %cmp, i1 %cmp1, i1 false
3889   ret i1 %retval
3892 define i1 @auto_gen_114_logical_fmf(double %a, double %b) {
3893 ; CHECK-LABEL: @auto_gen_114_logical_fmf(
3894 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3895 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3897   %cmp = fcmp uno double %a, %b
3898   %cmp1 = fcmp fast ugt double %a, %b
3899   %retval = select i1 %cmp, i1 %cmp1, i1 false
3900   ret i1 %retval
3903 define i1 @auto_gen_115(double %a, double %b) {
3904 ; CHECK-LABEL: @auto_gen_115(
3905 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3906 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3908   %cmp = fcmp uno double %a, %b
3909   %cmp1 = fcmp uge double %a, %b
3910   %retval = and i1 %cmp, %cmp1
3911   ret i1 %retval
3914 define i1 @auto_gen_115_logical(double %a, double %b) {
3915 ; CHECK-LABEL: @auto_gen_115_logical(
3916 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3917 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3919   %cmp = fcmp uno double %a, %b
3920   %cmp1 = fcmp uge double %a, %b
3921   %retval = select i1 %cmp, i1 %cmp1, i1 false
3922   ret i1 %retval
3925 define i1 @auto_gen_115_logical_fmf(double %a, double %b) {
3926 ; CHECK-LABEL: @auto_gen_115_logical_fmf(
3927 ; CHECK-NEXT:    ret i1 false
3929   %cmp = fcmp fast uno double %a, %b
3930   %cmp1 = fcmp fast uge double %a, %b
3931   %retval = select i1 %cmp, i1 %cmp1, i1 false
3932   ret i1 %retval
3935 define i1 @auto_gen_116(double %a, double %b) {
3936 ; CHECK-LABEL: @auto_gen_116(
3937 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3938 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3940   %cmp = fcmp uno double %a, %b
3941   %cmp1 = fcmp ult double %a, %b
3942   %retval = and i1 %cmp, %cmp1
3943   ret i1 %retval
3946 define i1 @auto_gen_116_logical(double %a, double %b) {
3947 ; CHECK-LABEL: @auto_gen_116_logical(
3948 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3949 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3951   %cmp = fcmp uno double %a, %b
3952   %cmp1 = fcmp ult double %a, %b
3953   %retval = select i1 %cmp, i1 %cmp1, i1 false
3954   ret i1 %retval
3957 define i1 @auto_gen_116_logical_fmf(double %a, double %b) {
3958 ; CHECK-LABEL: @auto_gen_116_logical_fmf(
3959 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3960 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3962   %cmp = fcmp uno double %a, %b
3963   %cmp1 = fcmp fast ult double %a, %b
3964   %retval = select i1 %cmp, i1 %cmp1, i1 false
3965   ret i1 %retval
3968 define i1 @auto_gen_117(double %a, double %b) {
3969 ; CHECK-LABEL: @auto_gen_117(
3970 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3971 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3973   %cmp = fcmp uno double %a, %b
3974   %cmp1 = fcmp ule double %a, %b
3975   %retval = and i1 %cmp, %cmp1
3976   ret i1 %retval
3979 define i1 @auto_gen_117_logical(double %a, double %b) {
3980 ; CHECK-LABEL: @auto_gen_117_logical(
3981 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
3982 ; CHECK-NEXT:    ret i1 [[RETVAL]]
3984   %cmp = fcmp uno double %a, %b
3985   %cmp1 = fcmp ule double %a, %b
3986   %retval = select i1 %cmp, i1 %cmp1, i1 false
3987   ret i1 %retval
3990 define i1 @auto_gen_117_logical_fmf(double %a, double %b) {
3991 ; CHECK-LABEL: @auto_gen_117_logical_fmf(
3992 ; CHECK-NEXT:    ret i1 false
3994   %cmp = fcmp fast uno double %a, %b
3995   %cmp1 = fcmp fast ule double %a, %b
3996   %retval = select i1 %cmp, i1 %cmp1, i1 false
3997   ret i1 %retval
4000 define i1 @auto_gen_118(double %a, double %b) {
4001 ; CHECK-LABEL: @auto_gen_118(
4002 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4003 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4005   %cmp = fcmp uno double %a, %b
4006   %cmp1 = fcmp une double %a, %b
4007   %retval = and i1 %cmp, %cmp1
4008   ret i1 %retval
4011 define i1 @auto_gen_118_logical(double %a, double %b) {
4012 ; CHECK-LABEL: @auto_gen_118_logical(
4013 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4014 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4016   %cmp = fcmp uno double %a, %b
4017   %cmp1 = fcmp une double %a, %b
4018   %retval = select i1 %cmp, i1 %cmp1, i1 false
4019   ret i1 %retval
4022 define i1 @auto_gen_118_logical_fmf(double %a, double %b) {
4023 ; CHECK-LABEL: @auto_gen_118_logical_fmf(
4024 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4025 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4027   %cmp = fcmp uno double %a, %b
4028   %cmp1 = fcmp fast une double %a, %b
4029   %retval = select i1 %cmp, i1 %cmp1, i1 false
4030   ret i1 %retval
4033 define i1 @auto_gen_119(double %a, double %b) {
4034 ; CHECK-LABEL: @auto_gen_119(
4035 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4036 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4038   %cmp = fcmp uno double %a, %b
4039   %cmp1 = fcmp uno double %a, %b
4040   %retval = and i1 %cmp, %cmp1
4041   ret i1 %retval
4044 define i1 @auto_gen_119_logical(double %a, double %b) {
4045 ; CHECK-LABEL: @auto_gen_119_logical(
4046 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4047 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4049   %cmp = fcmp uno double %a, %b
4050   %cmp1 = fcmp uno double %a, %b
4051   %retval = select i1 %cmp, i1 %cmp1, i1 false
4052   ret i1 %retval
4055 define i1 @auto_gen_119_logical_fmf(double %a, double %b) {
4056 ; CHECK-LABEL: @auto_gen_119_logical_fmf(
4057 ; CHECK-NEXT:    ret i1 false
4059   %cmp = fcmp fast uno double %a, %b
4060   %cmp1 = fcmp fast uno double %a, %b
4061   %retval = select i1 %cmp, i1 %cmp1, i1 false
4062   ret i1 %retval
4065 define i1 @auto_gen_120(double %a, double %b) {
4066 ; CHECK-LABEL: @auto_gen_120(
4067 ; CHECK-NEXT:    ret i1 false
4069   %cmp = fcmp true double %a, %b
4070   %cmp1 = fcmp false double %a, %b
4071   %retval = and i1 %cmp, %cmp1
4072   ret i1 %retval
4075 define i1 @auto_gen_120_logical(double %a, double %b) {
4076 ; CHECK-LABEL: @auto_gen_120_logical(
4077 ; CHECK-NEXT:    ret i1 false
4079   %cmp = fcmp true double %a, %b
4080   %cmp1 = fcmp false double %a, %b
4081   %retval = select i1 %cmp, i1 %cmp1, i1 false
4082   ret i1 %retval
4085 define i1 @auto_gen_120_logical_fmf(double %a, double %b) {
4086 ; CHECK-LABEL: @auto_gen_120_logical_fmf(
4087 ; CHECK-NEXT:    ret i1 false
4089   %cmp = fcmp true double %a, %b
4090   %cmp1 = fcmp fast false double %a, %b
4091   %retval = select i1 %cmp, i1 %cmp1, i1 false
4092   ret i1 %retval
4095 define i1 @auto_gen_121(double %a, double %b) {
4096 ; CHECK-LABEL: @auto_gen_121(
4097 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
4098 ; CHECK-NEXT:    ret i1 [[CMP1]]
4100   %cmp = fcmp true double %a, %b
4101   %cmp1 = fcmp oeq double %a, %b
4102   %retval = and i1 %cmp, %cmp1
4103   ret i1 %retval
4106 define i1 @auto_gen_121_logical(double %a, double %b) {
4107 ; CHECK-LABEL: @auto_gen_121_logical(
4108 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
4109 ; CHECK-NEXT:    ret i1 [[CMP1]]
4111   %cmp = fcmp true double %a, %b
4112   %cmp1 = fcmp oeq double %a, %b
4113   %retval = select i1 %cmp, i1 %cmp1, i1 false
4114   ret i1 %retval
4117 define i1 @auto_gen_121_logical_fmf(double %a, double %b) {
4118 ; CHECK-LABEL: @auto_gen_121_logical_fmf(
4119 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
4120 ; CHECK-NEXT:    ret i1 [[CMP1]]
4122   %cmp = fcmp fast true double %a, %b
4123   %cmp1 = fcmp fast oeq double %a, %b
4124   %retval = select i1 %cmp, i1 %cmp1, i1 false
4125   ret i1 %retval
4128 define i1 @auto_gen_122(double %a, double %b) {
4129 ; CHECK-LABEL: @auto_gen_122(
4130 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
4131 ; CHECK-NEXT:    ret i1 [[CMP1]]
4133   %cmp = fcmp true double %a, %b
4134   %cmp1 = fcmp ogt double %a, %b
4135   %retval = and i1 %cmp, %cmp1
4136   ret i1 %retval
4139 define i1 @auto_gen_122_logical(double %a, double %b) {
4140 ; CHECK-LABEL: @auto_gen_122_logical(
4141 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
4142 ; CHECK-NEXT:    ret i1 [[CMP1]]
4144   %cmp = fcmp true double %a, %b
4145   %cmp1 = fcmp ogt double %a, %b
4146   %retval = select i1 %cmp, i1 %cmp1, i1 false
4147   ret i1 %retval
4150 define i1 @auto_gen_122_logical_fmf(double %a, double %b) {
4151 ; CHECK-LABEL: @auto_gen_122_logical_fmf(
4152 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
4153 ; CHECK-NEXT:    ret i1 [[CMP1]]
4155   %cmp = fcmp true double %a, %b
4156   %cmp1 = fcmp fast ogt double %a, %b
4157   %retval = select i1 %cmp, i1 %cmp1, i1 false
4158   ret i1 %retval
4161 define i1 @auto_gen_123(double %a, double %b) {
4162 ; CHECK-LABEL: @auto_gen_123(
4163 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
4164 ; CHECK-NEXT:    ret i1 [[CMP1]]
4166   %cmp = fcmp true double %a, %b
4167   %cmp1 = fcmp oge double %a, %b
4168   %retval = and i1 %cmp, %cmp1
4169   ret i1 %retval
4172 define i1 @auto_gen_123_logical(double %a, double %b) {
4173 ; CHECK-LABEL: @auto_gen_123_logical(
4174 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
4175 ; CHECK-NEXT:    ret i1 [[CMP1]]
4177   %cmp = fcmp true double %a, %b
4178   %cmp1 = fcmp oge double %a, %b
4179   %retval = select i1 %cmp, i1 %cmp1, i1 false
4180   ret i1 %retval
4183 define i1 @auto_gen_123_logical_fmf(double %a, double %b) {
4184 ; CHECK-LABEL: @auto_gen_123_logical_fmf(
4185 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
4186 ; CHECK-NEXT:    ret i1 [[CMP1]]
4188   %cmp = fcmp fast true double %a, %b
4189   %cmp1 = fcmp fast oge double %a, %b
4190   %retval = select i1 %cmp, i1 %cmp1, i1 false
4191   ret i1 %retval
4194 define i1 @auto_gen_124(double %a, double %b) {
4195 ; CHECK-LABEL: @auto_gen_124(
4196 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4197 ; CHECK-NEXT:    ret i1 [[CMP1]]
4199   %cmp = fcmp true double %a, %b
4200   %cmp1 = fcmp olt double %a, %b
4201   %retval = and i1 %cmp, %cmp1
4202   ret i1 %retval
4205 define i1 @auto_gen_124_logical(double %a, double %b) {
4206 ; CHECK-LABEL: @auto_gen_124_logical(
4207 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4208 ; CHECK-NEXT:    ret i1 [[CMP1]]
4210   %cmp = fcmp true double %a, %b
4211   %cmp1 = fcmp olt double %a, %b
4212   %retval = select i1 %cmp, i1 %cmp1, i1 false
4213   ret i1 %retval
4216 define i1 @auto_gen_124_logical_fmf(double %a, double %b) {
4217 ; CHECK-LABEL: @auto_gen_124_logical_fmf(
4218 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
4219 ; CHECK-NEXT:    ret i1 [[CMP1]]
4221   %cmp = fcmp true double %a, %b
4222   %cmp1 = fcmp fast olt double %a, %b
4223   %retval = select i1 %cmp, i1 %cmp1, i1 false
4224   ret i1 %retval
4227 define i1 @auto_gen_125(double %a, double %b) {
4228 ; CHECK-LABEL: @auto_gen_125(
4229 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
4230 ; CHECK-NEXT:    ret i1 [[CMP1]]
4232   %cmp = fcmp true double %a, %b
4233   %cmp1 = fcmp ole double %a, %b
4234   %retval = and i1 %cmp, %cmp1
4235   ret i1 %retval
4238 define i1 @auto_gen_125_logical(double %a, double %b) {
4239 ; CHECK-LABEL: @auto_gen_125_logical(
4240 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
4241 ; CHECK-NEXT:    ret i1 [[CMP1]]
4243   %cmp = fcmp true double %a, %b
4244   %cmp1 = fcmp ole double %a, %b
4245   %retval = select i1 %cmp, i1 %cmp1, i1 false
4246   ret i1 %retval
4249 define i1 @auto_gen_125_logical_fmf(double %a, double %b) {
4250 ; CHECK-LABEL: @auto_gen_125_logical_fmf(
4251 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
4252 ; CHECK-NEXT:    ret i1 [[CMP1]]
4254   %cmp = fcmp fast true double %a, %b
4255   %cmp1 = fcmp fast ole double %a, %b
4256   %retval = select i1 %cmp, i1 %cmp1, i1 false
4257   ret i1 %retval
4260 define i1 @auto_gen_126(double %a, double %b) {
4261 ; CHECK-LABEL: @auto_gen_126(
4262 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
4263 ; CHECK-NEXT:    ret i1 [[CMP1]]
4265   %cmp = fcmp true double %a, %b
4266   %cmp1 = fcmp one double %a, %b
4267   %retval = and i1 %cmp, %cmp1
4268   ret i1 %retval
4271 define i1 @auto_gen_126_logical(double %a, double %b) {
4272 ; CHECK-LABEL: @auto_gen_126_logical(
4273 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
4274 ; CHECK-NEXT:    ret i1 [[CMP1]]
4276   %cmp = fcmp true double %a, %b
4277   %cmp1 = fcmp one double %a, %b
4278   %retval = select i1 %cmp, i1 %cmp1, i1 false
4279   ret i1 %retval
4282 define i1 @auto_gen_126_logical_fmf(double %a, double %b) {
4283 ; CHECK-LABEL: @auto_gen_126_logical_fmf(
4284 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
4285 ; CHECK-NEXT:    ret i1 [[CMP1]]
4287   %cmp = fcmp true double %a, %b
4288   %cmp1 = fcmp fast one double %a, %b
4289   %retval = select i1 %cmp, i1 %cmp1, i1 false
4290   ret i1 %retval
4293 define i1 @auto_gen_127(double %a, double %b) {
4294 ; CHECK-LABEL: @auto_gen_127(
4295 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
4296 ; CHECK-NEXT:    ret i1 [[CMP1]]
4298   %cmp = fcmp true double %a, %b
4299   %cmp1 = fcmp ord double %a, %b
4300   %retval = and i1 %cmp, %cmp1
4301   ret i1 %retval
4304 define i1 @auto_gen_127_logical(double %a, double %b) {
4305 ; CHECK-LABEL: @auto_gen_127_logical(
4306 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
4307 ; CHECK-NEXT:    ret i1 [[CMP1]]
4309   %cmp = fcmp true double %a, %b
4310   %cmp1 = fcmp ord double %a, %b
4311   %retval = select i1 %cmp, i1 %cmp1, i1 false
4312   ret i1 %retval
4315 define i1 @auto_gen_127_logical_fmf(double %a, double %b) {
4316 ; CHECK-LABEL: @auto_gen_127_logical_fmf(
4317 ; CHECK-NEXT:    ret i1 true
4319   %cmp = fcmp fast true double %a, %b
4320   %cmp1 = fcmp fast ord double %a, %b
4321   %retval = select i1 %cmp, i1 %cmp1, i1 false
4322   ret i1 %retval
4325 define i1 @auto_gen_128(double %a, double %b) {
4326 ; CHECK-LABEL: @auto_gen_128(
4327 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
4328 ; CHECK-NEXT:    ret i1 [[CMP1]]
4330   %cmp = fcmp true double %a, %b
4331   %cmp1 = fcmp ueq double %a, %b
4332   %retval = and i1 %cmp, %cmp1
4333   ret i1 %retval
4336 define i1 @auto_gen_128_logical(double %a, double %b) {
4337 ; CHECK-LABEL: @auto_gen_128_logical(
4338 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
4339 ; CHECK-NEXT:    ret i1 [[CMP1]]
4341   %cmp = fcmp true double %a, %b
4342   %cmp1 = fcmp ueq double %a, %b
4343   %retval = select i1 %cmp, i1 %cmp1, i1 false
4344   ret i1 %retval
4347 define i1 @auto_gen_128_logical_fmf(double %a, double %b) {
4348 ; CHECK-LABEL: @auto_gen_128_logical_fmf(
4349 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
4350 ; CHECK-NEXT:    ret i1 [[CMP1]]
4352   %cmp = fcmp true double %a, %b
4353   %cmp1 = fcmp fast ueq double %a, %b
4354   %retval = select i1 %cmp, i1 %cmp1, i1 false
4355   ret i1 %retval
4358 define i1 @auto_gen_129(double %a, double %b) {
4359 ; CHECK-LABEL: @auto_gen_129(
4360 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
4361 ; CHECK-NEXT:    ret i1 [[CMP1]]
4363   %cmp = fcmp true double %a, %b
4364   %cmp1 = fcmp ugt double %a, %b
4365   %retval = and i1 %cmp, %cmp1
4366   ret i1 %retval
4369 define i1 @auto_gen_129_logical(double %a, double %b) {
4370 ; CHECK-LABEL: @auto_gen_129_logical(
4371 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
4372 ; CHECK-NEXT:    ret i1 [[CMP1]]
4374   %cmp = fcmp true double %a, %b
4375   %cmp1 = fcmp ugt double %a, %b
4376   %retval = select i1 %cmp, i1 %cmp1, i1 false
4377   ret i1 %retval
4380 define i1 @auto_gen_129_logical_fmf(double %a, double %b) {
4381 ; CHECK-LABEL: @auto_gen_129_logical_fmf(
4382 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
4383 ; CHECK-NEXT:    ret i1 [[CMP1]]
4385   %cmp = fcmp fast true double %a, %b
4386   %cmp1 = fcmp fast ugt double %a, %b
4387   %retval = select i1 %cmp, i1 %cmp1, i1 false
4388   ret i1 %retval
4391 define i1 @auto_gen_130(double %a, double %b) {
4392 ; CHECK-LABEL: @auto_gen_130(
4393 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
4394 ; CHECK-NEXT:    ret i1 [[CMP1]]
4396   %cmp = fcmp true double %a, %b
4397   %cmp1 = fcmp uge double %a, %b
4398   %retval = and i1 %cmp, %cmp1
4399   ret i1 %retval
4402 define i1 @auto_gen_130_logical(double %a, double %b) {
4403 ; CHECK-LABEL: @auto_gen_130_logical(
4404 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
4405 ; CHECK-NEXT:    ret i1 [[CMP1]]
4407   %cmp = fcmp true double %a, %b
4408   %cmp1 = fcmp uge double %a, %b
4409   %retval = select i1 %cmp, i1 %cmp1, i1 false
4410   ret i1 %retval
4413 define i1 @auto_gen_130_logical_fmf(double %a, double %b) {
4414 ; CHECK-LABEL: @auto_gen_130_logical_fmf(
4415 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
4416 ; CHECK-NEXT:    ret i1 [[CMP1]]
4418   %cmp = fcmp true double %a, %b
4419   %cmp1 = fcmp fast uge double %a, %b
4420   %retval = select i1 %cmp, i1 %cmp1, i1 false
4421   ret i1 %retval
4424 define i1 @auto_gen_131(double %a, double %b) {
4425 ; CHECK-LABEL: @auto_gen_131(
4426 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
4427 ; CHECK-NEXT:    ret i1 [[CMP1]]
4429   %cmp = fcmp true double %a, %b
4430   %cmp1 = fcmp ult double %a, %b
4431   %retval = and i1 %cmp, %cmp1
4432   ret i1 %retval
4435 define i1 @auto_gen_131_logical(double %a, double %b) {
4436 ; CHECK-LABEL: @auto_gen_131_logical(
4437 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
4438 ; CHECK-NEXT:    ret i1 [[CMP1]]
4440   %cmp = fcmp true double %a, %b
4441   %cmp1 = fcmp ult double %a, %b
4442   %retval = select i1 %cmp, i1 %cmp1, i1 false
4443   ret i1 %retval
4446 define i1 @auto_gen_131_logical_fmf(double %a, double %b) {
4447 ; CHECK-LABEL: @auto_gen_131_logical_fmf(
4448 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
4449 ; CHECK-NEXT:    ret i1 [[CMP1]]
4451   %cmp = fcmp fast true double %a, %b
4452   %cmp1 = fcmp fast ult double %a, %b
4453   %retval = select i1 %cmp, i1 %cmp1, i1 false
4454   ret i1 %retval
4457 define i1 @auto_gen_132(double %a, double %b) {
4458 ; CHECK-LABEL: @auto_gen_132(
4459 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
4460 ; CHECK-NEXT:    ret i1 [[CMP1]]
4462   %cmp = fcmp true double %a, %b
4463   %cmp1 = fcmp ule double %a, %b
4464   %retval = and i1 %cmp, %cmp1
4465   ret i1 %retval
4468 define i1 @auto_gen_132_logical(double %a, double %b) {
4469 ; CHECK-LABEL: @auto_gen_132_logical(
4470 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
4471 ; CHECK-NEXT:    ret i1 [[CMP1]]
4473   %cmp = fcmp true double %a, %b
4474   %cmp1 = fcmp ule double %a, %b
4475   %retval = select i1 %cmp, i1 %cmp1, i1 false
4476   ret i1 %retval
4479 define i1 @auto_gen_132_logical_fmf(double %a, double %b) {
4480 ; CHECK-LABEL: @auto_gen_132_logical_fmf(
4481 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
4482 ; CHECK-NEXT:    ret i1 [[CMP1]]
4484   %cmp = fcmp true double %a, %b
4485   %cmp1 = fcmp fast ule double %a, %b
4486   %retval = select i1 %cmp, i1 %cmp1, i1 false
4487   ret i1 %retval
4490 define i1 @auto_gen_133(double %a, double %b) {
4491 ; CHECK-LABEL: @auto_gen_133(
4492 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
4493 ; CHECK-NEXT:    ret i1 [[CMP1]]
4495   %cmp = fcmp true double %a, %b
4496   %cmp1 = fcmp une double %a, %b
4497   %retval = and i1 %cmp, %cmp1
4498   ret i1 %retval
4501 define i1 @auto_gen_133_logical(double %a, double %b) {
4502 ; CHECK-LABEL: @auto_gen_133_logical(
4503 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
4504 ; CHECK-NEXT:    ret i1 [[CMP1]]
4506   %cmp = fcmp true double %a, %b
4507   %cmp1 = fcmp une double %a, %b
4508   %retval = select i1 %cmp, i1 %cmp1, i1 false
4509   ret i1 %retval
4512 define i1 @auto_gen_133_logical_fmf(double %a, double %b) {
4513 ; CHECK-LABEL: @auto_gen_133_logical_fmf(
4514 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
4515 ; CHECK-NEXT:    ret i1 [[CMP1]]
4517   %cmp = fcmp fast true double %a, %b
4518   %cmp1 = fcmp fast une double %a, %b
4519   %retval = select i1 %cmp, i1 %cmp1, i1 false
4520   ret i1 %retval
4523 define i1 @auto_gen_134(double %a, double %b) {
4524 ; CHECK-LABEL: @auto_gen_134(
4525 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4526 ; CHECK-NEXT:    ret i1 [[CMP1]]
4528   %cmp = fcmp true double %a, %b
4529   %cmp1 = fcmp uno double %a, %b
4530   %retval = and i1 %cmp, %cmp1
4531   ret i1 %retval
4534 define i1 @auto_gen_134_logical(double %a, double %b) {
4535 ; CHECK-LABEL: @auto_gen_134_logical(
4536 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
4537 ; CHECK-NEXT:    ret i1 [[CMP1]]
4539   %cmp = fcmp true double %a, %b
4540   %cmp1 = fcmp uno double %a, %b
4541   %retval = select i1 %cmp, i1 %cmp1, i1 false
4542   ret i1 %retval
4545 define i1 @auto_gen_134_logical_fmf(double %a, double %b) {
4546 ; CHECK-LABEL: @auto_gen_134_logical_fmf(
4547 ; CHECK-NEXT:    ret i1 false
4549   %cmp = fcmp true double %a, %b
4550   %cmp1 = fcmp fast uno double %a, %b
4551   %retval = select i1 %cmp, i1 %cmp1, i1 false
4552   ret i1 %retval
4555 define i1 @auto_gen_135(double %a, double %b) {
4556 ; CHECK-LABEL: @auto_gen_135(
4557 ; CHECK-NEXT:    ret i1 true
4559   %cmp = fcmp true double %a, %b
4560   %cmp1 = fcmp true double %a, %b
4561   %retval = and i1 %cmp, %cmp1
4562   ret i1 %retval
4565 define i1 @auto_gen_135_logical(double %a, double %b) {
4566 ; CHECK-LABEL: @auto_gen_135_logical(
4567 ; CHECK-NEXT:    ret i1 true
4569   %cmp = fcmp true double %a, %b
4570   %cmp1 = fcmp true double %a, %b
4571   %retval = select i1 %cmp, i1 %cmp1, i1 false
4572   ret i1 %retval
4575 define i1 @auto_gen_135_logical_fmf(double %a, double %b) {
4576 ; CHECK-LABEL: @auto_gen_135_logical_fmf(
4577 ; CHECK-NEXT:    ret i1 true
4579   %cmp = fcmp fast true double %a, %b
4580   %cmp1 = fcmp fast true double %a, %b
4581   %retval = select i1 %cmp, i1 %cmp1, i1 false
4582   ret i1 %retval
4585 define i1 @intersect_fmf_1(double %a, double %b) {
4586 ; CHECK-LABEL: @intersect_fmf_1(
4587 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
4588 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4590   %cmp = fcmp fast ole double %a, %b
4591   %cmp1 = fcmp fast oge double %a, %b
4592   %retval = and i1 %cmp, %cmp1
4593   ret i1 %retval
4596 define i1 @intersect_fmf_2(double %a, double %b) {
4597 ; CHECK-LABEL: @intersect_fmf_2(
4598 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
4599 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4601   %cmp = fcmp fast ole double %a, %b
4602   %cmp1 = fcmp oge double %a, %b
4603   %retval = and i1 %cmp, %cmp1
4604   ret i1 %retval
4607 define i1 @intersect_fmf_3(double %a, double %b) {
4608 ; CHECK-LABEL: @intersect_fmf_3(
4609 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
4610 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4612   %cmp = fcmp ole double %a, %b
4613   %cmp1 = fcmp fast oge double %a, %b
4614   %retval = and i1 %cmp, %cmp1
4615   ret i1 %retval
4618 define i1 @intersect_fmf_4(double %a, double %b) {
4619 ; CHECK-LABEL: @intersect_fmf_4(
4620 ; CHECK-NEXT:    [[RETVAL:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
4621 ; CHECK-NEXT:    ret i1 [[RETVAL]]
4623   %cmp = fcmp ninf ole double %a, %b
4624   %cmp1 = fcmp nnan oge double %a, %b
4625   %retval = and i1 %cmp, %cmp1
4626   ret i1 %retval
4629 ; Clang used to emit this pattern in __builtin_isnormal
4630 ; https://alive2.llvm.org/ce/z/8sw9vi
4631 define i1 @clang_builtin_isnormal_inf_check(half %x) {
4632 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check(
4633 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4634 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4635 ; CHECK-NEXT:    ret i1 [[AND]]
4637   %fabs.x = call half @llvm.fabs.f16(half %x)
4638   %ord = fcmp ord half %fabs.x, 0.0
4639   %cmp = fcmp uge half %fabs.x, 0xH7C00
4640   %and = and i1 %ord, %cmp
4641   ret i1 %and
4644 define <2 x i1> @clang_builtin_isnormal_inf_check_vector(<2 x half> %x) {
4645 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_vector(
4646 ; CHECK-NEXT:    [[FABS_X:%.*]] = call <2 x half> @llvm.fabs.v2f16(<2 x half> [[X:%.*]])
4647 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq <2 x half> [[FABS_X]], splat (half 0xH7C00)
4648 ; CHECK-NEXT:    ret <2 x i1> [[AND]]
4650   %fabs.x = call <2 x half> @llvm.fabs.v2f16(<2 x half> %x)
4651   %ord = fcmp ord <2 x half> %fabs.x, zeroinitializer
4652   %cmp = fcmp uge <2 x half> %fabs.x, <half 0xH7C00, half 0xH7C00>
4653   %and = and <2 x i1> %ord, %cmp
4654   ret <2 x i1> %and
4657 define i1 @clang_builtin_isnormal_inf_check_commute(half %x) {
4658 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_commute(
4659 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4660 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4661 ; CHECK-NEXT:    ret i1 [[AND]]
4663   %fabs.x = call half @llvm.fabs.f16(half %x)
4664   %ord = fcmp ord half %fabs.x, 0.0
4665   %cmp = fcmp uge half %fabs.x, 0xH7C00
4666   %and = and i1 %cmp, %ord
4667   ret i1 %and
4670 define i1 @clang_builtin_isnormal_inf_check_commute_nsz_rhs(half %x) {
4671 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_commute_nsz_rhs(
4672 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4673 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4674 ; CHECK-NEXT:    ret i1 [[AND]]
4676   %fabs.x = call half @llvm.fabs.f16(half %x)
4677   %ord = fcmp nsz ord half %fabs.x, 0.0
4678   %cmp = fcmp uge half %fabs.x, 0xH7C00
4679   %and = and i1 %cmp, %ord
4680   ret i1 %and
4683 define i1 @clang_builtin_isnormal_inf_check_commute_nsz_lhs(half %x) {
4684 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_commute_nsz_lhs(
4685 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4686 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4687 ; CHECK-NEXT:    ret i1 [[AND]]
4689   %fabs.x = call half @llvm.fabs.f16(half %x)
4690   %ord = fcmp ord half %fabs.x, 0.0
4691   %cmp = fcmp nsz uge half %fabs.x, 0xH7C00
4692   %and = and i1 %cmp, %ord
4693   ret i1 %and
4696 define i1 @clang_builtin_isnormal_inf_check_commute_nofabs_ueq(half %x) {
4697 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_commute_nofabs_ueq(
4698 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[X:%.*]], 0xH7C00
4699 ; CHECK-NEXT:    ret i1 [[AND]]
4701   %ord = fcmp ord half %x, 0.0
4702   %cmp = fcmp ueq half %x, 0xH7C00
4703   %and = and i1 %cmp, %ord
4704   ret i1 %and
4707 define i1 @clang_builtin_isnormal_inf_check_commute_nsz(half %x) {
4708 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_commute_nsz(
4709 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4710 ; CHECK-NEXT:    [[AND:%.*]] = fcmp nsz oeq half [[FABS_X]], 0xH7C00
4711 ; CHECK-NEXT:    ret i1 [[AND]]
4713   %fabs.x = call half @llvm.fabs.f16(half %x)
4714   %ord = fcmp nsz ord half %fabs.x, 0.0
4715   %cmp = fcmp nsz uge half %fabs.x, 0xH7C00
4716   %and = and i1 %cmp, %ord
4717   ret i1 %and
4720 ; ugt -> ogt
4721 define i1 @clang_builtin_isnormal_inf_check_ugt(half %x) {
4722 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ugt(
4723 ; CHECK-NEXT:    ret i1 false
4725   %fabs.x = call half @llvm.fabs.f16(half %x)
4726   %ord = fcmp ord half %fabs.x, 0.0
4727   %cmp = fcmp ugt half %fabs.x, 0xH7C00
4728   %and = and i1 %ord, %cmp
4729   ret i1 %and
4732 ; ult -> olt
4733 define i1 @clang_builtin_isnormal_inf_check_ult(half %x) {
4734 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ult(
4735 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4736 ; CHECK-NEXT:    [[AND:%.*]] = fcmp one half [[FABS_X]], 0xH7C00
4737 ; CHECK-NEXT:    ret i1 [[AND]]
4739   %fabs.x = call half @llvm.fabs.f16(half %x)
4740   %ord = fcmp ord half %fabs.x, 0.0
4741   %cmp = fcmp ult half %fabs.x, 0xH7C00
4742   %and = and i1 %ord, %cmp
4743   ret i1 %and
4746 ; ule -> ole
4747 define i1 @clang_builtin_isnormal_inf_check_ule(half %x) {
4748 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ule(
4749 ; CHECK-NEXT:    [[ORD:%.*]] = fcmp ord half [[X:%.*]], 0xH0000
4750 ; CHECK-NEXT:    ret i1 [[ORD]]
4752   %fabs.x = call half @llvm.fabs.f16(half %x)
4753   %ord = fcmp ord half %fabs.x, 0.0
4754   %cmp = fcmp ule half %fabs.x, 0xH7C00
4755   %and = and i1 %ord, %cmp
4756   ret i1 %and
4759 ; ueq -> oeq
4760 define i1 @clang_builtin_isnormal_inf_check_ueq(half %x) {
4761 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ueq(
4762 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4763 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4764 ; CHECK-NEXT:    ret i1 [[AND]]
4766   %fabs.x = call half @llvm.fabs.f16(half %x)
4767   %ord = fcmp ord half %fabs.x, 0.0
4768   %cmp = fcmp ueq half %fabs.x, 0xH7C00
4769   %and = and i1 %ord, %cmp
4770   ret i1 %and
4773 ; une -> ole
4774 define i1 @clang_builtin_isnormal_inf_check_une(half %x) {
4775 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_une(
4776 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4777 ; CHECK-NEXT:    [[AND:%.*]] = fcmp one half [[FABS_X]], 0xH7C00
4778 ; CHECK-NEXT:    ret i1 [[AND]]
4780   %fabs.x = call half @llvm.fabs.f16(half %x)
4781   %ord = fcmp ord half %fabs.x, 0.0
4782   %cmp = fcmp une half %fabs.x, 0xH7C00
4783   %and = and i1 %ord, %cmp
4784   ret i1 %and
4787 ; uno -> ord
4788 define i1 @clang_builtin_isnormal_inf_check_uno(half %x) {
4789 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_uno(
4790 ; CHECK-NEXT:    ret i1 false
4792   %fabs.x = call half @llvm.fabs.f16(half %x)
4793   %ord = fcmp ord half %fabs.x, 0.0
4794   %cmp = fcmp uno half %fabs.x, 0xH7C00
4795   %and = and i1 %ord, %cmp
4796   ret i1 %and
4799 ; ord -> ord
4800 define i1 @clang_builtin_isnormal_inf_check_ord(half %x) {
4801 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ord(
4802 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord half [[X:%.*]], 0xH0000
4803 ; CHECK-NEXT:    ret i1 [[CMP]]
4805   %fabs.x = call half @llvm.fabs.f16(half %x)
4806   %ord = fcmp ord half %fabs.x, 0.0
4807   %cmp = fcmp ord half %fabs.x, 0xH7C00
4808   %and = and i1 %ord, %cmp
4809   ret i1 %and
4812 define i1 @clang_builtin_isnormal_inf_check_oge(half %x) {
4813 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_oge(
4814 ; CHECK-NEXT:    [[TMP1:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4815 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[TMP1]], 0xH7C00
4816 ; CHECK-NEXT:    ret i1 [[AND]]
4818   %fabs.x = call half @llvm.fabs.f16(half %x)
4819   %ord = fcmp ord half %fabs.x, 0.0
4820   %cmp = fcmp oge half %fabs.x, 0xH7C00
4821   %and = and i1 %ord, %cmp
4822   ret i1 %and
4825 define i1 @clang_builtin_isnormal_inf_check_olt(half %x) {
4826 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_olt(
4827 ; CHECK-NEXT:    [[TMP1:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4828 ; CHECK-NEXT:    [[AND:%.*]] = fcmp one half [[TMP1]], 0xH7C00
4829 ; CHECK-NEXT:    ret i1 [[AND]]
4831   %fabs.x = call half @llvm.fabs.f16(half %x)
4832   %ord = fcmp ord half %fabs.x, 0.0
4833   %cmp = fcmp olt half %fabs.x, 0xH7C00
4834   %and = and i1 %ord, %cmp
4835   ret i1 %and
4838 define i1 @clang_builtin_isnormal_inf_check_ole(half %x) {
4839 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ole(
4840 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord half [[X:%.*]], 0xH0000
4841 ; CHECK-NEXT:    ret i1 [[CMP]]
4843   %fabs.x = call half @llvm.fabs.f16(half %x)
4844   %ord = fcmp ord half %fabs.x, 0.0
4845   %cmp = fcmp ole half %fabs.x, 0xH7C00
4846   %and = and i1 %ord, %cmp
4847   ret i1 %and
4850 define i1 @clang_builtin_isnormal_inf_check_oeq(half %x) {
4851 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_oeq(
4852 ; CHECK-NEXT:    [[TMP1:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4853 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[TMP1]], 0xH7C00
4854 ; CHECK-NEXT:    ret i1 [[AND]]
4856   %fabs.x = call half @llvm.fabs.f16(half %x)
4857   %ord = fcmp ord half %fabs.x, 0.0
4858   %cmp = fcmp oeq half %fabs.x, 0xH7C00
4859   %and = and i1 %ord, %cmp
4860   ret i1 %and
4863 define i1 @clang_builtin_isnormal_inf_check_unnececcary_fabs(half %x) {
4864 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_unnececcary_fabs(
4865 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4866 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4867 ; CHECK-NEXT:    ret i1 [[AND]]
4869   %fabs.x = call half @llvm.fabs.f16(half %x)
4870   %ord = fcmp ord half %x, 0.0
4871   %ueq = fcmp uge half %fabs.x, 0xH7C00
4872   %and = and i1 %ord, %ueq
4873   ret i1 %and
4876 ; Negative test
4877 define i1 @clang_builtin_isnormal_inf_check_not_ord(half %x) {
4878 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_not_ord(
4879 ; CHECK-NEXT:    [[AND:%.*]] = fcmp uno half [[X:%.*]], 0xH0000
4880 ; CHECK-NEXT:    ret i1 [[AND]]
4882   %fabs.x = call half @llvm.fabs.f16(half %x)
4883   %ord = fcmp uno half %fabs.x, 0.0
4884   %ueq = fcmp uge half %fabs.x, 0xH7C00
4885   %and = and i1 %ord, %ueq
4886   ret i1 %and
4889 define i1 @clang_builtin_isnormal_inf_check_missing_fabs(half %x) {
4890 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_missing_fabs(
4891 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[X:%.*]], 0xH7C00
4892 ; CHECK-NEXT:    ret i1 [[AND]]
4894   %fabs.x = call half @llvm.fabs.f16(half %x)
4895   %ord = fcmp ord half %x, 0.0
4896   %ueq = fcmp uge half %x, 0xH7C00
4897   %and = and i1 %ord, %ueq
4898   ret i1 %and
4901 define i1 @clang_builtin_isnormal_inf_check_neg_inf(half %x) {
4902 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_neg_inf(
4903 ; CHECK-NEXT:    [[ORD:%.*]] = fcmp ord half [[X:%.*]], 0xH0000
4904 ; CHECK-NEXT:    ret i1 [[ORD]]
4906   %fabs.x = call half @llvm.fabs.f16(half %x)
4907   %ord = fcmp ord half %fabs.x, 0.0
4908   %ueq = fcmp uge half %fabs.x, 0xHFC00
4909   %and = and i1 %ord, %ueq
4910   ret i1 %and
4913 ; Negative test
4914 define i1 @clang_builtin_isnormal_inf_check_not_inf(half %x) {
4915 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_not_inf(
4916 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4917 ; CHECK-NEXT:    [[ORD:%.*]] = fcmp ord half [[X]], 0xH0000
4918 ; CHECK-NEXT:    [[UEQ:%.*]] = fcmp uge half [[FABS_X]], 0xH7BFF
4919 ; CHECK-NEXT:    [[AND:%.*]] = and i1 [[ORD]], [[UEQ]]
4920 ; CHECK-NEXT:    ret i1 [[AND]]
4922   %fabs.x = call half @llvm.fabs.f16(half %x)
4923   %ord = fcmp ord half %fabs.x, 0.0
4924   %ueq = fcmp uge half %fabs.x, 0xH7BFF
4925   %and = and i1 %ord, %ueq
4926   ret i1 %and
4929 define i1 @clang_builtin_isnormal_inf_check_nsz_lhs(half %x) {
4930 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_nsz_lhs(
4931 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4932 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4933 ; CHECK-NEXT:    ret i1 [[AND]]
4935   %fabs.x = call half @llvm.fabs.f16(half %x)
4936   %ord = fcmp nsz ord half %fabs.x, 0.0
4937   %ueq = fcmp uge half %fabs.x, 0xH7C00
4938   %and = and i1 %ord, %ueq
4939   ret i1 %and
4942 define i1 @clang_builtin_isnormal_inf_check_nsz_rhs(half %x) {
4943 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_nsz_rhs(
4944 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4945 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4946 ; CHECK-NEXT:    ret i1 [[AND]]
4948   %fabs.x = call half @llvm.fabs.f16(half %x)
4949   %ord = fcmp ord half %fabs.x, 0.0
4950   %ueq = fcmp nsz uge half %fabs.x, 0xH7C00
4951   %and = and i1 %ord, %ueq
4952   ret i1 %and
4955 define i1 @clang_builtin_isnormal_inf_check_nsz(half %x) {
4956 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_nsz(
4957 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4958 ; CHECK-NEXT:    [[AND:%.*]] = fcmp nsz oeq half [[FABS_X]], 0xH7C00
4959 ; CHECK-NEXT:    ret i1 [[AND]]
4961   %fabs.x = call half @llvm.fabs.f16(half %x)
4962   %ord = fcmp nsz ord half %fabs.x, 0.0
4963   %ueq = fcmp nsz uge half %fabs.x, 0xH7C00
4964   %and = and i1 %ord, %ueq
4965   ret i1 %and
4968 define i1 @clang_builtin_isnormal_inf_check_fneg(half %x) {
4969 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_fneg(
4970 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[X:%.*]], 0xH7C00
4971 ; CHECK-NEXT:    ret i1 [[AND]]
4973   %fneg.x = fneg half %x
4974   %ord = fcmp ord half %fneg.x, 0.0
4975   %cmp = fcmp uge half %x, 0xH7C00
4976   %and = and i1 %ord, %cmp
4977   ret i1 %and
4980 define i1 @clang_builtin_isnormal_inf_check_copysign(half %x, half %y) {
4981 ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_copysign(
4982 ; CHECK-NEXT:    [[COPYSIGN_X:%.*]] = call half @llvm.copysign.f16(half [[X:%.*]], half [[Y:%.*]])
4983 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[COPYSIGN_X]], 0xH7C00
4984 ; CHECK-NEXT:    ret i1 [[AND]]
4986   %copysign.x = call half @llvm.copysign.f16(half %x, half %y)
4987   %ord = fcmp ord half %x, 0.0
4988   %cmp = fcmp uge half %copysign.x, 0xH7C00
4989   %and = and i1 %ord, %cmp
4990   ret i1 %and
4993 define i1 @isnormal_logical_select_0(half %x) {
4994 ; CHECK-LABEL: @isnormal_logical_select_0(
4995 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
4996 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
4997 ; CHECK-NEXT:    ret i1 [[AND]]
4999   %fabs.x = call half @llvm.fabs.f16(half %x)
5000   %ord = fcmp ord half %fabs.x, 0.0
5001   %cmp.inf = fcmp uge half %fabs.x, 0xH7C00
5002   %and = select i1 %ord, i1 %cmp.inf, i1 false
5003   ret i1 %and
5006 define i1 @isnormal_logical_select_1(half %x) {
5007 ; CHECK-LABEL: @isnormal_logical_select_1(
5008 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
5009 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
5010 ; CHECK-NEXT:    ret i1 [[AND]]
5012   %fabs.x = call half @llvm.fabs.f16(half %x)
5013   %ord = fcmp ord half %fabs.x, 0.0
5014   %cmp.inf = fcmp uge half %fabs.x, 0xH7C00
5015   %and = select i1 %cmp.inf, i1 %ord, i1 false
5016   ret i1 %and
5019 define i1 @isnormal_logical_select_0_fmf0(half %x) {
5020 ; CHECK-LABEL: @isnormal_logical_select_0_fmf0(
5021 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
5022 ; CHECK-NEXT:    [[AND:%.*]] = fcmp reassoc nsz arcp oeq half [[FABS_X]], 0xH7C00
5023 ; CHECK-NEXT:    ret i1 [[AND]]
5025   %fabs.x = call half @llvm.fabs.f16(half %x)
5026   %ord = fcmp nsz arcp reassoc ord half %fabs.x, 0.0
5027   %cmp.inf = fcmp nsz arcp reassoc uge half %fabs.x, 0xH7C00
5028   %and = select i1 %ord, i1 %cmp.inf, i1 false
5029   ret i1 %and
5032 define i1 @isnormal_logical_select_0_fmf1(half %x) {
5033 ; CHECK-LABEL: @isnormal_logical_select_0_fmf1(
5034 ; CHECK-NEXT:    [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
5035 ; CHECK-NEXT:    [[AND:%.*]] = fcmp oeq half [[FABS_X]], 0xH7C00
5036 ; CHECK-NEXT:    ret i1 [[AND]]
5038   %fabs.x = call half @llvm.fabs.f16(half %x)
5039   %ord = fcmp ord half %fabs.x, 0.0
5040   %cmp.inf = fcmp nsz arcp reassoc uge half %fabs.x, 0xH7C00
5041   %and = select i1 %ord, i1 %cmp.inf, i1 false
5042   ret i1 %and
5045 define i1 @and_fcmp_reassoc1(i1 %x, double %a, double %b) {
5046 ; CHECK-LABEL: @and_fcmp_reassoc1(
5047 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
5048 ; CHECK-NEXT:    [[RETVAL:%.*]] = and i1 [[TMP1]], [[X:%.*]]
5049 ; CHECK-NEXT:    ret i1 [[RETVAL]]
5051   %cmp = fcmp ult double %a, %b
5052   %cmp1 = fcmp ugt double %a, %b
5053   %and = and i1 %cmp, %x
5054   %retval = and i1 %and, %cmp1
5055   ret i1 %retval
5058 define i1 @and_fcmp_reassoc2(i1 %x, double %a, double %b) {
5059 ; CHECK-LABEL: @and_fcmp_reassoc2(
5060 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
5061 ; CHECK-NEXT:    [[RETVAL:%.*]] = and i1 [[X:%.*]], [[TMP1]]
5062 ; CHECK-NEXT:    ret i1 [[RETVAL]]
5064   %cmp = fcmp ult double %a, %b
5065   %cmp1 = fcmp ugt double %a, %b
5066   %and = and i1 %x, %cmp
5067   %retval = and i1 %and, %cmp1
5068   ret i1 %retval
5071 define i1 @and_fcmp_reassoc3(i1 %x, double %a, double %b) {
5072 ; CHECK-LABEL: @and_fcmp_reassoc3(
5073 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
5074 ; CHECK-NEXT:    [[RETVAL:%.*]] = and i1 [[TMP1]], [[X:%.*]]
5075 ; CHECK-NEXT:    ret i1 [[RETVAL]]
5077   %cmp = fcmp ult double %a, %b
5078   %cmp1 = fcmp ugt double %a, %b
5079   %and = and i1 %cmp, %x
5080   %retval = and i1 %cmp1, %and
5081   ret i1 %retval
5084 define i1 @and_fcmp_reassoc4(i1 %x, double %a, double %b) {
5085 ; CHECK-LABEL: @and_fcmp_reassoc4(
5086 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
5087 ; CHECK-NEXT:    [[RETVAL:%.*]] = and i1 [[X:%.*]], [[TMP1]]
5088 ; CHECK-NEXT:    ret i1 [[RETVAL]]
5090   %cmp = fcmp ult double %a, %b
5091   %cmp1 = fcmp ugt double %a, %b
5092   %and = and i1 %x, %cmp
5093   %retval = and i1 %cmp1, %and
5094   ret i1 %retval
5097 declare half @llvm.fabs.f16(half)
5098 declare <2 x half> @llvm.fabs.v2f16(<2 x half>)
5099 declare half @llvm.copysign.f16(half, half)