1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instcombine -S | FileCheck %s
3
4define i1 @PR1738(double %x, double %y) {
5; CHECK-LABEL: @PR1738(
6; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[X:%.*]], [[Y:%.*]]
7; CHECK-NEXT:    ret i1 [[TMP1]]
8;
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
13}
14
15define <2 x i1> @PR1738_vec_undef(<2 x double> %x, <2 x double> %y) {
16; CHECK-LABEL: @PR1738_vec_undef(
17; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[X:%.*]], [[Y:%.*]]
18; CHECK-NEXT:    ret <2 x i1> [[TMP1]]
19;
20  %cmp1 = fcmp ord <2 x double> %x, <double 0.0, double undef>
21  %cmp2 = fcmp ord <2 x double> %y, <double undef, double 0.0>
22  %or = and <2 x i1> %cmp1, %cmp2
23  ret <2 x i1> %or
24}
25
26define i1 @PR41069(i1 %z, float %c, float %d) {
27; CHECK-LABEL: @PR41069(
28; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord float [[D:%.*]], [[C:%.*]]
29; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
30; CHECK-NEXT:    ret i1 [[R]]
31;
32  %ord1 = fcmp arcp ord float %c, 0.0
33  %and = and i1 %ord1, %z
34  %ord2 = fcmp afn ord float %d, 0.0
35  %r = and i1 %and, %ord2
36  ret i1 %r
37}
38
39define i1 @PR41069_commute(i1 %z, float %c, float %d) {
40; CHECK-LABEL: @PR41069_commute(
41; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ninf ord float [[D:%.*]], [[C:%.*]]
42; CHECK-NEXT:    [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]]
43; CHECK-NEXT:    ret i1 [[R]]
44;
45  %ord1 = fcmp ninf ord float %c, 0.0
46  %and = and i1 %ord1, %z
47  %ord2 = fcmp ninf reassoc ord float %d, 0.0
48  %r = and i1 %ord2, %and
49  ret i1 %r
50}
51
52; Commute differently and make sure vectors work.
53
54define <2 x i1> @PR41069_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
55; CHECK-LABEL: @PR41069_vec(
56; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
57; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]]
58; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]]
59; CHECK-NEXT:    ret <2 x i1> [[R]]
60;
61  %ord1 = fcmp ord <2 x double> %a, %b
62  %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
63  %and = and <2 x i1> %ord1, %ord2
64  %ord3 = fcmp ord <2 x double> %d, zeroinitializer
65  %r = and <2 x i1> %and, %ord3
66  ret <2 x i1> %r
67}
68
69define <2 x i1> @PR41069_vec_commute(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
70; CHECK-LABEL: @PR41069_vec_commute(
71; CHECK-NEXT:    [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]]
72; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]]
73; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]]
74; CHECK-NEXT:    ret <2 x i1> [[R]]
75;
76  %ord1 = fcmp ord <2 x double> %a, %b
77  %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef>
78  %and = and <2 x i1> %ord1, %ord2
79  %ord3 = fcmp ord <2 x double> %d, zeroinitializer
80  %r = and <2 x i1> %ord3, %and
81  ret <2 x i1> %r
82}
83
84define i1 @PR15737(float %a, double %b) {
85; CHECK-LABEL: @PR15737(
86; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord float [[A:%.*]], 0.000000e+00
87; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[B:%.*]], 0.000000e+00
88; CHECK-NEXT:    [[AND:%.*]] = and i1 [[CMP]], [[CMP1]]
89; CHECK-NEXT:    ret i1 [[AND]]
90;
91  %cmp = fcmp ord float %a, 0.000000e+00
92  %cmp1 = fcmp ord double %b, 0.000000e+00
93  %and = and i1 %cmp, %cmp1
94  ret i1 %and
95}
96
97define <2 x i1> @t9(<2 x float> %a, <2 x double> %b) {
98; CHECK-LABEL: @t9(
99; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord <2 x float> [[A:%.*]], zeroinitializer
100; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord <2 x double> [[B:%.*]], zeroinitializer
101; CHECK-NEXT:    [[AND:%.*]] = and <2 x i1> [[CMP]], [[CMP1]]
102; CHECK-NEXT:    ret <2 x i1> [[AND]]
103;
104  %cmp = fcmp ord <2 x float> %a, zeroinitializer
105  %cmp1 = fcmp ord <2 x double> %b, zeroinitializer
106  %and = and <2 x i1> %cmp, %cmp1
107  ret <2 x i1> %and
108}
109
110define i1 @fcmp_ord_nonzero(float %x, float %y) {
111; CHECK-LABEL: @fcmp_ord_nonzero(
112; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord float [[X:%.*]], [[Y:%.*]]
113; CHECK-NEXT:    ret i1 [[TMP1]]
114;
115  %cmp1 = fcmp ord float %x, 1.0
116  %cmp2 = fcmp ord float %y, 2.0
117  %and = and i1 %cmp1, %cmp2
118  ret i1 %and
119}
120
121define <3 x i1> @fcmp_ord_nonzero_vec(<3 x float> %x, <3 x float> %y) {
122; CHECK-LABEL: @fcmp_ord_nonzero_vec(
123; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord <3 x float> [[X:%.*]], [[Y:%.*]]
124; CHECK-NEXT:    ret <3 x i1> [[TMP1]]
125;
126  %cmp1 = fcmp ord <3 x float> %x, <float 1.0, float 2.0, float 3.0>
127  %cmp2 = fcmp ord <3 x float> %y, <float 3.0, float 2.0, float 1.0>
128  %and = and <3 x i1> %cmp1, %cmp2
129  ret <3 x i1> %and
130}
131
132define i1 @auto_gen_0(double %a, double %b) {
133; CHECK-LABEL: @auto_gen_0(
134; CHECK-NEXT:    ret i1 false
135;
136  %cmp = fcmp false double %a, %b
137  %cmp1 = fcmp false double %a, %b
138  %retval = and i1 %cmp, %cmp1
139  ret i1 %retval
140}
141
142define i1 @auto_gen_1(double %a, double %b) {
143; CHECK-LABEL: @auto_gen_1(
144; CHECK-NEXT:    ret i1 false
145;
146  %cmp = fcmp oeq double %a, %b
147  %cmp1 = fcmp false double %a, %b
148  %retval = and i1 %cmp, %cmp1
149  ret i1 %retval
150}
151
152define i1 @auto_gen_2(double %a, double %b) {
153; CHECK-LABEL: @auto_gen_2(
154; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
155; CHECK-NEXT:    ret i1 [[TMP1]]
156;
157  %cmp = fcmp oeq double %a, %b
158  %cmp1 = fcmp oeq double %a, %b
159  %retval = and i1 %cmp, %cmp1
160  ret i1 %retval
161}
162
163define i1 @auto_gen_3(double %a, double %b) {
164; CHECK-LABEL: @auto_gen_3(
165; CHECK-NEXT:    ret i1 false
166;
167  %cmp = fcmp ogt double %a, %b
168  %cmp1 = fcmp false double %a, %b
169  %retval = and i1 %cmp, %cmp1
170  ret i1 %retval
171}
172
173define i1 @auto_gen_4(double %a, double %b) {
174; CHECK-LABEL: @auto_gen_4(
175; CHECK-NEXT:    ret i1 false
176;
177  %cmp = fcmp ogt double %a, %b
178  %cmp1 = fcmp oeq double %a, %b
179  %retval = and i1 %cmp, %cmp1
180  ret i1 %retval
181}
182
183define i1 @auto_gen_5(double %a, double %b) {
184; CHECK-LABEL: @auto_gen_5(
185; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
186; CHECK-NEXT:    ret i1 [[TMP1]]
187;
188  %cmp = fcmp ogt double %a, %b
189  %cmp1 = fcmp ogt double %a, %b
190  %retval = and i1 %cmp, %cmp1
191  ret i1 %retval
192}
193
194define i1 @auto_gen_6(double %a, double %b) {
195; CHECK-LABEL: @auto_gen_6(
196; CHECK-NEXT:    ret i1 false
197;
198  %cmp = fcmp oge double %a, %b
199  %cmp1 = fcmp false double %a, %b
200  %retval = and i1 %cmp, %cmp1
201  ret i1 %retval
202}
203
204define i1 @auto_gen_7(double %a, double %b) {
205; CHECK-LABEL: @auto_gen_7(
206; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
207; CHECK-NEXT:    ret i1 [[TMP1]]
208;
209  %cmp = fcmp oge double %a, %b
210  %cmp1 = fcmp oeq double %a, %b
211  %retval = and i1 %cmp, %cmp1
212  ret i1 %retval
213}
214
215define i1 @auto_gen_8(double %a, double %b) {
216; CHECK-LABEL: @auto_gen_8(
217; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
218; CHECK-NEXT:    ret i1 [[TMP1]]
219;
220  %cmp = fcmp oge double %a, %b
221  %cmp1 = fcmp ogt double %a, %b
222  %retval = and i1 %cmp, %cmp1
223  ret i1 %retval
224}
225
226define i1 @auto_gen_9(double %a, double %b) {
227; CHECK-LABEL: @auto_gen_9(
228; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
229; CHECK-NEXT:    ret i1 [[TMP1]]
230;
231  %cmp = fcmp oge double %a, %b
232  %cmp1 = fcmp oge double %a, %b
233  %retval = and i1 %cmp, %cmp1
234  ret i1 %retval
235}
236
237define i1 @auto_gen_10(double %a, double %b) {
238; CHECK-LABEL: @auto_gen_10(
239; CHECK-NEXT:    ret i1 false
240;
241  %cmp = fcmp olt double %a, %b
242  %cmp1 = fcmp false double %a, %b
243  %retval = and i1 %cmp, %cmp1
244  ret i1 %retval
245}
246
247define i1 @auto_gen_11(double %a, double %b) {
248; CHECK-LABEL: @auto_gen_11(
249; CHECK-NEXT:    ret i1 false
250;
251  %cmp = fcmp olt double %a, %b
252  %cmp1 = fcmp oeq double %a, %b
253  %retval = and i1 %cmp, %cmp1
254  ret i1 %retval
255}
256
257define i1 @auto_gen_12(double %a, double %b) {
258; CHECK-LABEL: @auto_gen_12(
259; CHECK-NEXT:    ret i1 false
260;
261  %cmp = fcmp olt double %a, %b
262  %cmp1 = fcmp ogt double %a, %b
263  %retval = and i1 %cmp, %cmp1
264  ret i1 %retval
265}
266
267define i1 @auto_gen_13(double %a, double %b) {
268; CHECK-LABEL: @auto_gen_13(
269; CHECK-NEXT:    ret i1 false
270;
271  %cmp = fcmp olt double %a, %b
272  %cmp1 = fcmp oge double %a, %b
273  %retval = and i1 %cmp, %cmp1
274  ret i1 %retval
275}
276
277define i1 @auto_gen_14(double %a, double %b) {
278; CHECK-LABEL: @auto_gen_14(
279; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
280; CHECK-NEXT:    ret i1 [[TMP1]]
281;
282  %cmp = fcmp olt double %a, %b
283  %cmp1 = fcmp olt double %a, %b
284  %retval = and i1 %cmp, %cmp1
285  ret i1 %retval
286}
287
288define i1 @auto_gen_15(double %a, double %b) {
289; CHECK-LABEL: @auto_gen_15(
290; CHECK-NEXT:    ret i1 false
291;
292  %cmp = fcmp ole double %a, %b
293  %cmp1 = fcmp false double %a, %b
294  %retval = and i1 %cmp, %cmp1
295  ret i1 %retval
296}
297
298define i1 @auto_gen_16(double %a, double %b) {
299; CHECK-LABEL: @auto_gen_16(
300; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
301; CHECK-NEXT:    ret i1 [[TMP1]]
302;
303  %cmp = fcmp ole double %a, %b
304  %cmp1 = fcmp oeq double %a, %b
305  %retval = and i1 %cmp, %cmp1
306  ret i1 %retval
307}
308
309define i1 @auto_gen_17(double %a, double %b) {
310; CHECK-LABEL: @auto_gen_17(
311; CHECK-NEXT:    ret i1 false
312;
313  %cmp = fcmp ole double %a, %b
314  %cmp1 = fcmp ogt double %a, %b
315  %retval = and i1 %cmp, %cmp1
316  ret i1 %retval
317}
318
319define i1 @auto_gen_18(double %a, double %b) {
320; CHECK-LABEL: @auto_gen_18(
321; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
322; CHECK-NEXT:    ret i1 [[TMP1]]
323;
324  %cmp = fcmp ole double %a, %b
325  %cmp1 = fcmp oge double %a, %b
326  %retval = and i1 %cmp, %cmp1
327  ret i1 %retval
328}
329
330define i1 @auto_gen_19(double %a, double %b) {
331; CHECK-LABEL: @auto_gen_19(
332; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
333; CHECK-NEXT:    ret i1 [[TMP1]]
334;
335  %cmp = fcmp ole double %a, %b
336  %cmp1 = fcmp olt double %a, %b
337  %retval = and i1 %cmp, %cmp1
338  ret i1 %retval
339}
340
341define i1 @auto_gen_20(double %a, double %b) {
342; CHECK-LABEL: @auto_gen_20(
343; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
344; CHECK-NEXT:    ret i1 [[TMP1]]
345;
346  %cmp = fcmp ole double %a, %b
347  %cmp1 = fcmp ole double %a, %b
348  %retval = and i1 %cmp, %cmp1
349  ret i1 %retval
350}
351
352define i1 @auto_gen_21(double %a, double %b) {
353; CHECK-LABEL: @auto_gen_21(
354; CHECK-NEXT:    ret i1 false
355;
356  %cmp = fcmp one double %a, %b
357  %cmp1 = fcmp false double %a, %b
358  %retval = and i1 %cmp, %cmp1
359  ret i1 %retval
360}
361
362define i1 @auto_gen_22(double %a, double %b) {
363; CHECK-LABEL: @auto_gen_22(
364; CHECK-NEXT:    ret i1 false
365;
366  %cmp = fcmp one double %a, %b
367  %cmp1 = fcmp oeq double %a, %b
368  %retval = and i1 %cmp, %cmp1
369  ret i1 %retval
370}
371
372define i1 @auto_gen_23(double %a, double %b) {
373; CHECK-LABEL: @auto_gen_23(
374; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
375; CHECK-NEXT:    ret i1 [[TMP1]]
376;
377  %cmp = fcmp one double %a, %b
378  %cmp1 = fcmp ogt double %a, %b
379  %retval = and i1 %cmp, %cmp1
380  ret i1 %retval
381}
382
383define i1 @auto_gen_24(double %a, double %b) {
384; CHECK-LABEL: @auto_gen_24(
385; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
386; CHECK-NEXT:    ret i1 [[TMP1]]
387;
388  %cmp = fcmp one double %a, %b
389  %cmp1 = fcmp oge double %a, %b
390  %retval = and i1 %cmp, %cmp1
391  ret i1 %retval
392}
393
394define i1 @auto_gen_25(double %a, double %b) {
395; CHECK-LABEL: @auto_gen_25(
396; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
397; CHECK-NEXT:    ret i1 [[TMP1]]
398;
399  %cmp = fcmp one double %a, %b
400  %cmp1 = fcmp olt double %a, %b
401  %retval = and i1 %cmp, %cmp1
402  ret i1 %retval
403}
404
405define i1 @auto_gen_26(double %a, double %b) {
406; CHECK-LABEL: @auto_gen_26(
407; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
408; CHECK-NEXT:    ret i1 [[TMP1]]
409;
410  %cmp = fcmp one double %a, %b
411  %cmp1 = fcmp ole double %a, %b
412  %retval = and i1 %cmp, %cmp1
413  ret i1 %retval
414}
415
416define i1 @auto_gen_27(double %a, double %b) {
417; CHECK-LABEL: @auto_gen_27(
418; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
419; CHECK-NEXT:    ret i1 [[TMP1]]
420;
421  %cmp = fcmp one double %a, %b
422  %cmp1 = fcmp one double %a, %b
423  %retval = and i1 %cmp, %cmp1
424  ret i1 %retval
425}
426
427define i1 @auto_gen_28(double %a, double %b) {
428; CHECK-LABEL: @auto_gen_28(
429; CHECK-NEXT:    ret i1 false
430;
431  %cmp = fcmp ord double %a, %b
432  %cmp1 = fcmp false double %a, %b
433  %retval = and i1 %cmp, %cmp1
434  ret i1 %retval
435}
436
437define i1 @auto_gen_29(double %a, double %b) {
438; CHECK-LABEL: @auto_gen_29(
439; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
440; CHECK-NEXT:    ret i1 [[TMP1]]
441;
442  %cmp = fcmp ord double %a, %b
443  %cmp1 = fcmp oeq double %a, %b
444  %retval = and i1 %cmp, %cmp1
445  ret i1 %retval
446}
447
448define i1 @auto_gen_30(double %a, double %b) {
449; CHECK-LABEL: @auto_gen_30(
450; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
451; CHECK-NEXT:    ret i1 [[TMP1]]
452;
453  %cmp = fcmp ord double %a, %b
454  %cmp1 = fcmp ogt double %a, %b
455  %retval = and i1 %cmp, %cmp1
456  ret i1 %retval
457}
458
459define i1 @auto_gen_31(double %a, double %b) {
460; CHECK-LABEL: @auto_gen_31(
461; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
462; CHECK-NEXT:    ret i1 [[TMP1]]
463;
464  %cmp = fcmp ord double %a, %b
465  %cmp1 = fcmp oge double %a, %b
466  %retval = and i1 %cmp, %cmp1
467  ret i1 %retval
468}
469
470define i1 @auto_gen_32(double %a, double %b) {
471; CHECK-LABEL: @auto_gen_32(
472; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
473; CHECK-NEXT:    ret i1 [[TMP1]]
474;
475  %cmp = fcmp ord double %a, %b
476  %cmp1 = fcmp olt double %a, %b
477  %retval = and i1 %cmp, %cmp1
478  ret i1 %retval
479}
480
481define i1 @auto_gen_33(double %a, double %b) {
482; CHECK-LABEL: @auto_gen_33(
483; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
484; CHECK-NEXT:    ret i1 [[TMP1]]
485;
486  %cmp = fcmp ord double %a, %b
487  %cmp1 = fcmp ole double %a, %b
488  %retval = and i1 %cmp, %cmp1
489  ret i1 %retval
490}
491
492define i1 @auto_gen_34(double %a, double %b) {
493; CHECK-LABEL: @auto_gen_34(
494; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
495; CHECK-NEXT:    ret i1 [[TMP1]]
496;
497  %cmp = fcmp ord double %a, %b
498  %cmp1 = fcmp one double %a, %b
499  %retval = and i1 %cmp, %cmp1
500  ret i1 %retval
501}
502
503define i1 @auto_gen_35(double %a, double %b) {
504; CHECK-LABEL: @auto_gen_35(
505; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
506; CHECK-NEXT:    ret i1 [[TMP1]]
507;
508  %cmp = fcmp ord double %a, %b
509  %cmp1 = fcmp ord double %a, %b
510  %retval = and i1 %cmp, %cmp1
511  ret i1 %retval
512}
513
514define i1 @auto_gen_36(double %a, double %b) {
515; CHECK-LABEL: @auto_gen_36(
516; CHECK-NEXT:    ret i1 false
517;
518  %cmp = fcmp ueq double %a, %b
519  %cmp1 = fcmp false double %a, %b
520  %retval = and i1 %cmp, %cmp1
521  ret i1 %retval
522}
523
524define i1 @auto_gen_37(double %a, double %b) {
525; CHECK-LABEL: @auto_gen_37(
526; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
527; CHECK-NEXT:    ret i1 [[TMP1]]
528;
529  %cmp = fcmp ueq double %a, %b
530  %cmp1 = fcmp oeq double %a, %b
531  %retval = and i1 %cmp, %cmp1
532  ret i1 %retval
533}
534
535define i1 @auto_gen_38(double %a, double %b) {
536; CHECK-LABEL: @auto_gen_38(
537; CHECK-NEXT:    ret i1 false
538;
539  %cmp = fcmp ueq double %a, %b
540  %cmp1 = fcmp ogt double %a, %b
541  %retval = and i1 %cmp, %cmp1
542  ret i1 %retval
543}
544
545define i1 @auto_gen_39(double %a, double %b) {
546; CHECK-LABEL: @auto_gen_39(
547; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
548; CHECK-NEXT:    ret i1 [[TMP1]]
549;
550  %cmp = fcmp ueq double %a, %b
551  %cmp1 = fcmp oge double %a, %b
552  %retval = and i1 %cmp, %cmp1
553  ret i1 %retval
554}
555
556define i1 @auto_gen_40(double %a, double %b) {
557; CHECK-LABEL: @auto_gen_40(
558; CHECK-NEXT:    ret i1 false
559;
560  %cmp = fcmp ueq double %a, %b
561  %cmp1 = fcmp olt double %a, %b
562  %retval = and i1 %cmp, %cmp1
563  ret i1 %retval
564}
565
566define i1 @auto_gen_41(double %a, double %b) {
567; CHECK-LABEL: @auto_gen_41(
568; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
569; CHECK-NEXT:    ret i1 [[TMP1]]
570;
571  %cmp = fcmp ueq double %a, %b
572  %cmp1 = fcmp ole double %a, %b
573  %retval = and i1 %cmp, %cmp1
574  ret i1 %retval
575}
576
577define i1 @auto_gen_42(double %a, double %b) {
578; CHECK-LABEL: @auto_gen_42(
579; CHECK-NEXT:    ret i1 false
580;
581  %cmp = fcmp ueq double %a, %b
582  %cmp1 = fcmp one double %a, %b
583  %retval = and i1 %cmp, %cmp1
584  ret i1 %retval
585}
586
587define i1 @auto_gen_43(double %a, double %b) {
588; CHECK-LABEL: @auto_gen_43(
589; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
590; CHECK-NEXT:    ret i1 [[TMP1]]
591;
592  %cmp = fcmp ueq double %a, %b
593  %cmp1 = fcmp ord double %a, %b
594  %retval = and i1 %cmp, %cmp1
595  ret i1 %retval
596}
597
598define i1 @auto_gen_44(double %a, double %b) {
599; CHECK-LABEL: @auto_gen_44(
600; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
601; CHECK-NEXT:    ret i1 [[TMP1]]
602;
603  %cmp = fcmp ueq double %a, %b
604  %cmp1 = fcmp ueq double %a, %b
605  %retval = and i1 %cmp, %cmp1
606  ret i1 %retval
607}
608
609define i1 @auto_gen_45(double %a, double %b) {
610; CHECK-LABEL: @auto_gen_45(
611; CHECK-NEXT:    ret i1 false
612;
613  %cmp = fcmp ugt double %a, %b
614  %cmp1 = fcmp false double %a, %b
615  %retval = and i1 %cmp, %cmp1
616  ret i1 %retval
617}
618
619define i1 @auto_gen_46(double %a, double %b) {
620; CHECK-LABEL: @auto_gen_46(
621; CHECK-NEXT:    ret i1 false
622;
623  %cmp = fcmp ugt double %a, %b
624  %cmp1 = fcmp oeq double %a, %b
625  %retval = and i1 %cmp, %cmp1
626  ret i1 %retval
627}
628
629define i1 @auto_gen_47(double %a, double %b) {
630; CHECK-LABEL: @auto_gen_47(
631; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
632; CHECK-NEXT:    ret i1 [[TMP1]]
633;
634  %cmp = fcmp ugt double %a, %b
635  %cmp1 = fcmp ogt double %a, %b
636  %retval = and i1 %cmp, %cmp1
637  ret i1 %retval
638}
639
640define i1 @auto_gen_48(double %a, double %b) {
641; CHECK-LABEL: @auto_gen_48(
642; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
643; CHECK-NEXT:    ret i1 [[TMP1]]
644;
645  %cmp = fcmp ugt double %a, %b
646  %cmp1 = fcmp oge double %a, %b
647  %retval = and i1 %cmp, %cmp1
648  ret i1 %retval
649}
650
651define i1 @auto_gen_49(double %a, double %b) {
652; CHECK-LABEL: @auto_gen_49(
653; CHECK-NEXT:    ret i1 false
654;
655  %cmp = fcmp ugt double %a, %b
656  %cmp1 = fcmp olt double %a, %b
657  %retval = and i1 %cmp, %cmp1
658  ret i1 %retval
659}
660
661define i1 @auto_gen_50(double %a, double %b) {
662; CHECK-LABEL: @auto_gen_50(
663; CHECK-NEXT:    ret i1 false
664;
665  %cmp = fcmp ugt double %a, %b
666  %cmp1 = fcmp ole double %a, %b
667  %retval = and i1 %cmp, %cmp1
668  ret i1 %retval
669}
670
671define i1 @auto_gen_51(double %a, double %b) {
672; CHECK-LABEL: @auto_gen_51(
673; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
674; CHECK-NEXT:    ret i1 [[TMP1]]
675;
676  %cmp = fcmp ugt double %a, %b
677  %cmp1 = fcmp one double %a, %b
678  %retval = and i1 %cmp, %cmp1
679  ret i1 %retval
680}
681
682define i1 @auto_gen_52(double %a, double %b) {
683; CHECK-LABEL: @auto_gen_52(
684; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
685; CHECK-NEXT:    ret i1 [[TMP1]]
686;
687  %cmp = fcmp ugt double %a, %b
688  %cmp1 = fcmp ord double %a, %b
689  %retval = and i1 %cmp, %cmp1
690  ret i1 %retval
691}
692
693define i1 @auto_gen_53(double %a, double %b) {
694; CHECK-LABEL: @auto_gen_53(
695; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
696; CHECK-NEXT:    ret i1 [[TMP1]]
697;
698  %cmp = fcmp ugt double %a, %b
699  %cmp1 = fcmp ueq double %a, %b
700  %retval = and i1 %cmp, %cmp1
701  ret i1 %retval
702}
703
704define i1 @auto_gen_54(double %a, double %b) {
705; CHECK-LABEL: @auto_gen_54(
706; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
707; CHECK-NEXT:    ret i1 [[TMP1]]
708;
709  %cmp = fcmp ugt double %a, %b
710  %cmp1 = fcmp ugt double %a, %b
711  %retval = and i1 %cmp, %cmp1
712  ret i1 %retval
713}
714
715define i1 @auto_gen_55(double %a, double %b) {
716; CHECK-LABEL: @auto_gen_55(
717; CHECK-NEXT:    ret i1 false
718;
719  %cmp = fcmp uge double %a, %b
720  %cmp1 = fcmp false double %a, %b
721  %retval = and i1 %cmp, %cmp1
722  ret i1 %retval
723}
724
725define i1 @auto_gen_56(double %a, double %b) {
726; CHECK-LABEL: @auto_gen_56(
727; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
728; CHECK-NEXT:    ret i1 [[TMP1]]
729;
730  %cmp = fcmp uge double %a, %b
731  %cmp1 = fcmp oeq double %a, %b
732  %retval = and i1 %cmp, %cmp1
733  ret i1 %retval
734}
735
736define i1 @auto_gen_57(double %a, double %b) {
737; CHECK-LABEL: @auto_gen_57(
738; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
739; CHECK-NEXT:    ret i1 [[TMP1]]
740;
741  %cmp = fcmp uge double %a, %b
742  %cmp1 = fcmp ogt double %a, %b
743  %retval = and i1 %cmp, %cmp1
744  ret i1 %retval
745}
746
747define i1 @auto_gen_58(double %a, double %b) {
748; CHECK-LABEL: @auto_gen_58(
749; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
750; CHECK-NEXT:    ret i1 [[TMP1]]
751;
752  %cmp = fcmp uge double %a, %b
753  %cmp1 = fcmp oge double %a, %b
754  %retval = and i1 %cmp, %cmp1
755  ret i1 %retval
756}
757
758define i1 @auto_gen_59(double %a, double %b) {
759; CHECK-LABEL: @auto_gen_59(
760; CHECK-NEXT:    ret i1 false
761;
762  %cmp = fcmp uge double %a, %b
763  %cmp1 = fcmp olt double %a, %b
764  %retval = and i1 %cmp, %cmp1
765  ret i1 %retval
766}
767
768define i1 @auto_gen_60(double %a, double %b) {
769; CHECK-LABEL: @auto_gen_60(
770; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
771; CHECK-NEXT:    ret i1 [[TMP1]]
772;
773  %cmp = fcmp uge double %a, %b
774  %cmp1 = fcmp ole double %a, %b
775  %retval = and i1 %cmp, %cmp1
776  ret i1 %retval
777}
778
779define i1 @auto_gen_61(double %a, double %b) {
780; CHECK-LABEL: @auto_gen_61(
781; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
782; CHECK-NEXT:    ret i1 [[TMP1]]
783;
784  %cmp = fcmp uge double %a, %b
785  %cmp1 = fcmp one double %a, %b
786  %retval = and i1 %cmp, %cmp1
787  ret i1 %retval
788}
789
790define i1 @auto_gen_62(double %a, double %b) {
791; CHECK-LABEL: @auto_gen_62(
792; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
793; CHECK-NEXT:    ret i1 [[TMP1]]
794;
795  %cmp = fcmp uge double %a, %b
796  %cmp1 = fcmp ord double %a, %b
797  %retval = and i1 %cmp, %cmp1
798  ret i1 %retval
799}
800
801define i1 @auto_gen_63(double %a, double %b) {
802; CHECK-LABEL: @auto_gen_63(
803; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
804; CHECK-NEXT:    ret i1 [[TMP1]]
805;
806  %cmp = fcmp uge double %a, %b
807  %cmp1 = fcmp ueq double %a, %b
808  %retval = and i1 %cmp, %cmp1
809  ret i1 %retval
810}
811
812define i1 @auto_gen_64(double %a, double %b) {
813; CHECK-LABEL: @auto_gen_64(
814; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
815; CHECK-NEXT:    ret i1 [[TMP1]]
816;
817  %cmp = fcmp uge double %a, %b
818  %cmp1 = fcmp ugt double %a, %b
819  %retval = and i1 %cmp, %cmp1
820  ret i1 %retval
821}
822
823define i1 @auto_gen_65(double %a, double %b) {
824; CHECK-LABEL: @auto_gen_65(
825; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
826; CHECK-NEXT:    ret i1 [[TMP1]]
827;
828  %cmp = fcmp uge double %a, %b
829  %cmp1 = fcmp uge double %a, %b
830  %retval = and i1 %cmp, %cmp1
831  ret i1 %retval
832}
833
834define i1 @auto_gen_66(double %a, double %b) {
835; CHECK-LABEL: @auto_gen_66(
836; CHECK-NEXT:    ret i1 false
837;
838  %cmp = fcmp ult double %a, %b
839  %cmp1 = fcmp false double %a, %b
840  %retval = and i1 %cmp, %cmp1
841  ret i1 %retval
842}
843
844define i1 @auto_gen_67(double %a, double %b) {
845; CHECK-LABEL: @auto_gen_67(
846; CHECK-NEXT:    ret i1 false
847;
848  %cmp = fcmp ult double %a, %b
849  %cmp1 = fcmp oeq double %a, %b
850  %retval = and i1 %cmp, %cmp1
851  ret i1 %retval
852}
853
854define i1 @auto_gen_68(double %a, double %b) {
855; CHECK-LABEL: @auto_gen_68(
856; CHECK-NEXT:    ret i1 false
857;
858  %cmp = fcmp ult double %a, %b
859  %cmp1 = fcmp ogt double %a, %b
860  %retval = and i1 %cmp, %cmp1
861  ret i1 %retval
862}
863
864define i1 @auto_gen_69(double %a, double %b) {
865; CHECK-LABEL: @auto_gen_69(
866; CHECK-NEXT:    ret i1 false
867;
868  %cmp = fcmp ult double %a, %b
869  %cmp1 = fcmp oge double %a, %b
870  %retval = and i1 %cmp, %cmp1
871  ret i1 %retval
872}
873
874define i1 @auto_gen_70(double %a, double %b) {
875; CHECK-LABEL: @auto_gen_70(
876; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
877; CHECK-NEXT:    ret i1 [[TMP1]]
878;
879  %cmp = fcmp ult double %a, %b
880  %cmp1 = fcmp olt double %a, %b
881  %retval = and i1 %cmp, %cmp1
882  ret i1 %retval
883}
884
885define i1 @auto_gen_71(double %a, double %b) {
886; CHECK-LABEL: @auto_gen_71(
887; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
888; CHECK-NEXT:    ret i1 [[TMP1]]
889;
890  %cmp = fcmp ult double %a, %b
891  %cmp1 = fcmp ole double %a, %b
892  %retval = and i1 %cmp, %cmp1
893  ret i1 %retval
894}
895
896define i1 @auto_gen_72(double %a, double %b) {
897; CHECK-LABEL: @auto_gen_72(
898; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
899; CHECK-NEXT:    ret i1 [[TMP1]]
900;
901  %cmp = fcmp ult double %a, %b
902  %cmp1 = fcmp one double %a, %b
903  %retval = and i1 %cmp, %cmp1
904  ret i1 %retval
905}
906
907define i1 @auto_gen_73(double %a, double %b) {
908; CHECK-LABEL: @auto_gen_73(
909; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
910; CHECK-NEXT:    ret i1 [[TMP1]]
911;
912  %cmp = fcmp ult double %a, %b
913  %cmp1 = fcmp ord double %a, %b
914  %retval = and i1 %cmp, %cmp1
915  ret i1 %retval
916}
917
918define i1 @auto_gen_74(double %a, double %b) {
919; CHECK-LABEL: @auto_gen_74(
920; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
921; CHECK-NEXT:    ret i1 [[TMP1]]
922;
923  %cmp = fcmp ult double %a, %b
924  %cmp1 = fcmp ueq double %a, %b
925  %retval = and i1 %cmp, %cmp1
926  ret i1 %retval
927}
928
929define i1 @auto_gen_75(double %a, double %b) {
930; CHECK-LABEL: @auto_gen_75(
931; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
932; CHECK-NEXT:    ret i1 [[TMP1]]
933;
934  %cmp = fcmp ult double %a, %b
935  %cmp1 = fcmp ugt double %a, %b
936  %retval = and i1 %cmp, %cmp1
937  ret i1 %retval
938}
939
940define i1 @auto_gen_76(double %a, double %b) {
941; CHECK-LABEL: @auto_gen_76(
942; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
943; CHECK-NEXT:    ret i1 [[TMP1]]
944;
945  %cmp = fcmp ult double %a, %b
946  %cmp1 = fcmp uge double %a, %b
947  %retval = and i1 %cmp, %cmp1
948  ret i1 %retval
949}
950
951define i1 @auto_gen_77(double %a, double %b) {
952; CHECK-LABEL: @auto_gen_77(
953; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
954; CHECK-NEXT:    ret i1 [[TMP1]]
955;
956  %cmp = fcmp ult double %a, %b
957  %cmp1 = fcmp ult double %a, %b
958  %retval = and i1 %cmp, %cmp1
959  ret i1 %retval
960}
961
962define i1 @auto_gen_78(double %a, double %b) {
963; CHECK-LABEL: @auto_gen_78(
964; CHECK-NEXT:    ret i1 false
965;
966  %cmp = fcmp ule double %a, %b
967  %cmp1 = fcmp false double %a, %b
968  %retval = and i1 %cmp, %cmp1
969  ret i1 %retval
970}
971
972define i1 @auto_gen_79(double %a, double %b) {
973; CHECK-LABEL: @auto_gen_79(
974; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
975; CHECK-NEXT:    ret i1 [[TMP1]]
976;
977  %cmp = fcmp ule double %a, %b
978  %cmp1 = fcmp oeq double %a, %b
979  %retval = and i1 %cmp, %cmp1
980  ret i1 %retval
981}
982
983define i1 @auto_gen_80(double %a, double %b) {
984; CHECK-LABEL: @auto_gen_80(
985; CHECK-NEXT:    ret i1 false
986;
987  %cmp = fcmp ule double %a, %b
988  %cmp1 = fcmp ogt double %a, %b
989  %retval = and i1 %cmp, %cmp1
990  ret i1 %retval
991}
992
993define i1 @auto_gen_81(double %a, double %b) {
994; CHECK-LABEL: @auto_gen_81(
995; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
996; CHECK-NEXT:    ret i1 [[TMP1]]
997;
998  %cmp = fcmp ule double %a, %b
999  %cmp1 = fcmp oge double %a, %b
1000  %retval = and i1 %cmp, %cmp1
1001  ret i1 %retval
1002}
1003
1004define i1 @auto_gen_82(double %a, double %b) {
1005; CHECK-LABEL: @auto_gen_82(
1006; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1007; CHECK-NEXT:    ret i1 [[TMP1]]
1008;
1009  %cmp = fcmp ule double %a, %b
1010  %cmp1 = fcmp olt double %a, %b
1011  %retval = and i1 %cmp, %cmp1
1012  ret i1 %retval
1013}
1014
1015define i1 @auto_gen_83(double %a, double %b) {
1016; CHECK-LABEL: @auto_gen_83(
1017; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1018; CHECK-NEXT:    ret i1 [[TMP1]]
1019;
1020  %cmp = fcmp ule double %a, %b
1021  %cmp1 = fcmp ole double %a, %b
1022  %retval = and i1 %cmp, %cmp1
1023  ret i1 %retval
1024}
1025
1026define i1 @auto_gen_84(double %a, double %b) {
1027; CHECK-LABEL: @auto_gen_84(
1028; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1029; CHECK-NEXT:    ret i1 [[TMP1]]
1030;
1031  %cmp = fcmp ule double %a, %b
1032  %cmp1 = fcmp one double %a, %b
1033  %retval = and i1 %cmp, %cmp1
1034  ret i1 %retval
1035}
1036
1037define i1 @auto_gen_85(double %a, double %b) {
1038; CHECK-LABEL: @auto_gen_85(
1039; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1040; CHECK-NEXT:    ret i1 [[TMP1]]
1041;
1042  %cmp = fcmp ule double %a, %b
1043  %cmp1 = fcmp ord double %a, %b
1044  %retval = and i1 %cmp, %cmp1
1045  ret i1 %retval
1046}
1047
1048define i1 @auto_gen_86(double %a, double %b) {
1049; CHECK-LABEL: @auto_gen_86(
1050; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1051; CHECK-NEXT:    ret i1 [[TMP1]]
1052;
1053  %cmp = fcmp ule double %a, %b
1054  %cmp1 = fcmp ueq double %a, %b
1055  %retval = and i1 %cmp, %cmp1
1056  ret i1 %retval
1057}
1058
1059define i1 @auto_gen_87(double %a, double %b) {
1060; CHECK-LABEL: @auto_gen_87(
1061; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1062; CHECK-NEXT:    ret i1 [[TMP1]]
1063;
1064  %cmp = fcmp ule double %a, %b
1065  %cmp1 = fcmp ugt double %a, %b
1066  %retval = and i1 %cmp, %cmp1
1067  ret i1 %retval
1068}
1069
1070define i1 @auto_gen_88(double %a, double %b) {
1071; CHECK-LABEL: @auto_gen_88(
1072; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1073; CHECK-NEXT:    ret i1 [[TMP1]]
1074;
1075  %cmp = fcmp ule double %a, %b
1076  %cmp1 = fcmp uge double %a, %b
1077  %retval = and i1 %cmp, %cmp1
1078  ret i1 %retval
1079}
1080
1081define i1 @auto_gen_89(double %a, double %b) {
1082; CHECK-LABEL: @auto_gen_89(
1083; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1084; CHECK-NEXT:    ret i1 [[TMP1]]
1085;
1086  %cmp = fcmp ule double %a, %b
1087  %cmp1 = fcmp ult double %a, %b
1088  %retval = and i1 %cmp, %cmp1
1089  ret i1 %retval
1090}
1091
1092define i1 @auto_gen_90(double %a, double %b) {
1093; CHECK-LABEL: @auto_gen_90(
1094; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
1095; CHECK-NEXT:    ret i1 [[TMP1]]
1096;
1097  %cmp = fcmp ule double %a, %b
1098  %cmp1 = fcmp ule double %a, %b
1099  %retval = and i1 %cmp, %cmp1
1100  ret i1 %retval
1101}
1102
1103define i1 @auto_gen_91(double %a, double %b) {
1104; CHECK-LABEL: @auto_gen_91(
1105; CHECK-NEXT:    ret i1 false
1106;
1107  %cmp = fcmp une double %a, %b
1108  %cmp1 = fcmp false double %a, %b
1109  %retval = and i1 %cmp, %cmp1
1110  ret i1 %retval
1111}
1112
1113define i1 @auto_gen_92(double %a, double %b) {
1114; CHECK-LABEL: @auto_gen_92(
1115; CHECK-NEXT:    ret i1 false
1116;
1117  %cmp = fcmp une double %a, %b
1118  %cmp1 = fcmp oeq double %a, %b
1119  %retval = and i1 %cmp, %cmp1
1120  ret i1 %retval
1121}
1122
1123define i1 @auto_gen_93(double %a, double %b) {
1124; CHECK-LABEL: @auto_gen_93(
1125; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1126; CHECK-NEXT:    ret i1 [[TMP1]]
1127;
1128  %cmp = fcmp une double %a, %b
1129  %cmp1 = fcmp ogt double %a, %b
1130  %retval = and i1 %cmp, %cmp1
1131  ret i1 %retval
1132}
1133
1134define i1 @auto_gen_94(double %a, double %b) {
1135; CHECK-LABEL: @auto_gen_94(
1136; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1137; CHECK-NEXT:    ret i1 [[TMP1]]
1138;
1139  %cmp = fcmp une double %a, %b
1140  %cmp1 = fcmp oge double %a, %b
1141  %retval = and i1 %cmp, %cmp1
1142  ret i1 %retval
1143}
1144
1145define i1 @auto_gen_95(double %a, double %b) {
1146; CHECK-LABEL: @auto_gen_95(
1147; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1148; CHECK-NEXT:    ret i1 [[TMP1]]
1149;
1150  %cmp = fcmp une double %a, %b
1151  %cmp1 = fcmp olt double %a, %b
1152  %retval = and i1 %cmp, %cmp1
1153  ret i1 %retval
1154}
1155
1156define i1 @auto_gen_96(double %a, double %b) {
1157; CHECK-LABEL: @auto_gen_96(
1158; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1159; CHECK-NEXT:    ret i1 [[TMP1]]
1160;
1161  %cmp = fcmp une double %a, %b
1162  %cmp1 = fcmp ole double %a, %b
1163  %retval = and i1 %cmp, %cmp1
1164  ret i1 %retval
1165}
1166
1167define i1 @auto_gen_97(double %a, double %b) {
1168; CHECK-LABEL: @auto_gen_97(
1169; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1170; CHECK-NEXT:    ret i1 [[TMP1]]
1171;
1172  %cmp = fcmp une double %a, %b
1173  %cmp1 = fcmp one double %a, %b
1174  %retval = and i1 %cmp, %cmp1
1175  ret i1 %retval
1176}
1177
1178define i1 @auto_gen_98(double %a, double %b) {
1179; CHECK-LABEL: @auto_gen_98(
1180; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1181; CHECK-NEXT:    ret i1 [[TMP1]]
1182;
1183  %cmp = fcmp une double %a, %b
1184  %cmp1 = fcmp ord double %a, %b
1185  %retval = and i1 %cmp, %cmp1
1186  ret i1 %retval
1187}
1188
1189define i1 @auto_gen_99(double %a, double %b) {
1190; CHECK-LABEL: @auto_gen_99(
1191; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1192; CHECK-NEXT:    ret i1 [[TMP1]]
1193;
1194  %cmp = fcmp une double %a, %b
1195  %cmp1 = fcmp ueq double %a, %b
1196  %retval = and i1 %cmp, %cmp1
1197  ret i1 %retval
1198}
1199
1200define i1 @auto_gen_100(double %a, double %b) {
1201; CHECK-LABEL: @auto_gen_100(
1202; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1203; CHECK-NEXT:    ret i1 [[TMP1]]
1204;
1205  %cmp = fcmp une double %a, %b
1206  %cmp1 = fcmp ugt double %a, %b
1207  %retval = and i1 %cmp, %cmp1
1208  ret i1 %retval
1209}
1210
1211define i1 @auto_gen_101(double %a, double %b) {
1212; CHECK-LABEL: @auto_gen_101(
1213; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1214; CHECK-NEXT:    ret i1 [[TMP1]]
1215;
1216  %cmp = fcmp une double %a, %b
1217  %cmp1 = fcmp uge double %a, %b
1218  %retval = and i1 %cmp, %cmp1
1219  ret i1 %retval
1220}
1221
1222define i1 @auto_gen_102(double %a, double %b) {
1223; CHECK-LABEL: @auto_gen_102(
1224; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1225; CHECK-NEXT:    ret i1 [[TMP1]]
1226;
1227  %cmp = fcmp une double %a, %b
1228  %cmp1 = fcmp ult double %a, %b
1229  %retval = and i1 %cmp, %cmp1
1230  ret i1 %retval
1231}
1232
1233define i1 @auto_gen_103(double %a, double %b) {
1234; CHECK-LABEL: @auto_gen_103(
1235; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1236; CHECK-NEXT:    ret i1 [[TMP1]]
1237;
1238  %cmp = fcmp une double %a, %b
1239  %cmp1 = fcmp ule double %a, %b
1240  %retval = and i1 %cmp, %cmp1
1241  ret i1 %retval
1242}
1243
1244define i1 @auto_gen_104(double %a, double %b) {
1245; CHECK-LABEL: @auto_gen_104(
1246; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
1247; CHECK-NEXT:    ret i1 [[TMP1]]
1248;
1249  %cmp = fcmp une double %a, %b
1250  %cmp1 = fcmp une double %a, %b
1251  %retval = and i1 %cmp, %cmp1
1252  ret i1 %retval
1253}
1254
1255define i1 @auto_gen_105(double %a, double %b) {
1256; CHECK-LABEL: @auto_gen_105(
1257; CHECK-NEXT:    ret i1 false
1258;
1259  %cmp = fcmp uno double %a, %b
1260  %cmp1 = fcmp false double %a, %b
1261  %retval = and i1 %cmp, %cmp1
1262  ret i1 %retval
1263}
1264
1265define i1 @auto_gen_106(double %a, double %b) {
1266; CHECK-LABEL: @auto_gen_106(
1267; CHECK-NEXT:    ret i1 false
1268;
1269  %cmp = fcmp uno double %a, %b
1270  %cmp1 = fcmp oeq double %a, %b
1271  %retval = and i1 %cmp, %cmp1
1272  ret i1 %retval
1273}
1274
1275define i1 @auto_gen_107(double %a, double %b) {
1276; CHECK-LABEL: @auto_gen_107(
1277; CHECK-NEXT:    ret i1 false
1278;
1279  %cmp = fcmp uno double %a, %b
1280  %cmp1 = fcmp ogt double %a, %b
1281  %retval = and i1 %cmp, %cmp1
1282  ret i1 %retval
1283}
1284
1285define i1 @auto_gen_108(double %a, double %b) {
1286; CHECK-LABEL: @auto_gen_108(
1287; CHECK-NEXT:    ret i1 false
1288;
1289  %cmp = fcmp uno double %a, %b
1290  %cmp1 = fcmp oge double %a, %b
1291  %retval = and i1 %cmp, %cmp1
1292  ret i1 %retval
1293}
1294
1295define i1 @auto_gen_109(double %a, double %b) {
1296; CHECK-LABEL: @auto_gen_109(
1297; CHECK-NEXT:    ret i1 false
1298;
1299  %cmp = fcmp uno double %a, %b
1300  %cmp1 = fcmp olt double %a, %b
1301  %retval = and i1 %cmp, %cmp1
1302  ret i1 %retval
1303}
1304
1305define i1 @auto_gen_110(double %a, double %b) {
1306; CHECK-LABEL: @auto_gen_110(
1307; CHECK-NEXT:    ret i1 false
1308;
1309  %cmp = fcmp uno double %a, %b
1310  %cmp1 = fcmp ole double %a, %b
1311  %retval = and i1 %cmp, %cmp1
1312  ret i1 %retval
1313}
1314
1315define i1 @auto_gen_111(double %a, double %b) {
1316; CHECK-LABEL: @auto_gen_111(
1317; CHECK-NEXT:    ret i1 false
1318;
1319  %cmp = fcmp uno double %a, %b
1320  %cmp1 = fcmp one double %a, %b
1321  %retval = and i1 %cmp, %cmp1
1322  ret i1 %retval
1323}
1324
1325define i1 @auto_gen_112(double %a, double %b) {
1326; CHECK-LABEL: @auto_gen_112(
1327; CHECK-NEXT:    ret i1 false
1328;
1329  %cmp = fcmp uno double %a, %b
1330  %cmp1 = fcmp ord double %a, %b
1331  %retval = and i1 %cmp, %cmp1
1332  ret i1 %retval
1333}
1334
1335define i1 @auto_gen_113(double %a, double %b) {
1336; CHECK-LABEL: @auto_gen_113(
1337; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1338; CHECK-NEXT:    ret i1 [[TMP1]]
1339;
1340  %cmp = fcmp uno double %a, %b
1341  %cmp1 = fcmp ueq double %a, %b
1342  %retval = and i1 %cmp, %cmp1
1343  ret i1 %retval
1344}
1345
1346define i1 @auto_gen_114(double %a, double %b) {
1347; CHECK-LABEL: @auto_gen_114(
1348; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1349; CHECK-NEXT:    ret i1 [[TMP1]]
1350;
1351  %cmp = fcmp uno double %a, %b
1352  %cmp1 = fcmp ugt double %a, %b
1353  %retval = and i1 %cmp, %cmp1
1354  ret i1 %retval
1355}
1356
1357define i1 @auto_gen_115(double %a, double %b) {
1358; CHECK-LABEL: @auto_gen_115(
1359; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1360; CHECK-NEXT:    ret i1 [[TMP1]]
1361;
1362  %cmp = fcmp uno double %a, %b
1363  %cmp1 = fcmp uge double %a, %b
1364  %retval = and i1 %cmp, %cmp1
1365  ret i1 %retval
1366}
1367
1368define i1 @auto_gen_116(double %a, double %b) {
1369; CHECK-LABEL: @auto_gen_116(
1370; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1371; CHECK-NEXT:    ret i1 [[TMP1]]
1372;
1373  %cmp = fcmp uno double %a, %b
1374  %cmp1 = fcmp ult double %a, %b
1375  %retval = and i1 %cmp, %cmp1
1376  ret i1 %retval
1377}
1378
1379define i1 @auto_gen_117(double %a, double %b) {
1380; CHECK-LABEL: @auto_gen_117(
1381; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1382; CHECK-NEXT:    ret i1 [[TMP1]]
1383;
1384  %cmp = fcmp uno double %a, %b
1385  %cmp1 = fcmp ule double %a, %b
1386  %retval = and i1 %cmp, %cmp1
1387  ret i1 %retval
1388}
1389
1390define i1 @auto_gen_118(double %a, double %b) {
1391; CHECK-LABEL: @auto_gen_118(
1392; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1393; CHECK-NEXT:    ret i1 [[TMP1]]
1394;
1395  %cmp = fcmp uno double %a, %b
1396  %cmp1 = fcmp une double %a, %b
1397  %retval = and i1 %cmp, %cmp1
1398  ret i1 %retval
1399}
1400
1401define i1 @auto_gen_119(double %a, double %b) {
1402; CHECK-LABEL: @auto_gen_119(
1403; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1404; CHECK-NEXT:    ret i1 [[TMP1]]
1405;
1406  %cmp = fcmp uno double %a, %b
1407  %cmp1 = fcmp uno double %a, %b
1408  %retval = and i1 %cmp, %cmp1
1409  ret i1 %retval
1410}
1411
1412define i1 @auto_gen_120(double %a, double %b) {
1413; CHECK-LABEL: @auto_gen_120(
1414; CHECK-NEXT:    ret i1 false
1415;
1416  %cmp = fcmp true double %a, %b
1417  %cmp1 = fcmp false double %a, %b
1418  %retval = and i1 %cmp, %cmp1
1419  ret i1 %retval
1420}
1421
1422define i1 @auto_gen_121(double %a, double %b) {
1423; CHECK-LABEL: @auto_gen_121(
1424; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
1425; CHECK-NEXT:    ret i1 [[CMP1]]
1426;
1427  %cmp = fcmp true double %a, %b
1428  %cmp1 = fcmp oeq double %a, %b
1429  %retval = and i1 %cmp, %cmp1
1430  ret i1 %retval
1431}
1432
1433define i1 @auto_gen_122(double %a, double %b) {
1434; CHECK-LABEL: @auto_gen_122(
1435; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
1436; CHECK-NEXT:    ret i1 [[CMP1]]
1437;
1438  %cmp = fcmp true double %a, %b
1439  %cmp1 = fcmp ogt double %a, %b
1440  %retval = and i1 %cmp, %cmp1
1441  ret i1 %retval
1442}
1443
1444define i1 @auto_gen_123(double %a, double %b) {
1445; CHECK-LABEL: @auto_gen_123(
1446; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
1447; CHECK-NEXT:    ret i1 [[CMP1]]
1448;
1449  %cmp = fcmp true double %a, %b
1450  %cmp1 = fcmp oge double %a, %b
1451  %retval = and i1 %cmp, %cmp1
1452  ret i1 %retval
1453}
1454
1455define i1 @auto_gen_124(double %a, double %b) {
1456; CHECK-LABEL: @auto_gen_124(
1457; CHECK-NEXT:    [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
1458; CHECK-NEXT:    ret i1 [[CMP1]]
1459;
1460  %cmp = fcmp true double %a, %b
1461  %cmp1 = fcmp olt double %a, %b
1462  %retval = and i1 %cmp, %cmp1
1463  ret i1 %retval
1464}
1465
1466define i1 @auto_gen_125(double %a, double %b) {
1467; CHECK-LABEL: @auto_gen_125(
1468; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
1469; CHECK-NEXT:    ret i1 [[CMP1]]
1470;
1471  %cmp = fcmp true double %a, %b
1472  %cmp1 = fcmp ole double %a, %b
1473  %retval = and i1 %cmp, %cmp1
1474  ret i1 %retval
1475}
1476
1477define i1 @auto_gen_126(double %a, double %b) {
1478; CHECK-LABEL: @auto_gen_126(
1479; CHECK-NEXT:    [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
1480; CHECK-NEXT:    ret i1 [[CMP1]]
1481;
1482  %cmp = fcmp true double %a, %b
1483  %cmp1 = fcmp one double %a, %b
1484  %retval = and i1 %cmp, %cmp1
1485  ret i1 %retval
1486}
1487
1488define i1 @auto_gen_127(double %a, double %b) {
1489; CHECK-LABEL: @auto_gen_127(
1490; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
1491; CHECK-NEXT:    ret i1 [[CMP1]]
1492;
1493  %cmp = fcmp true double %a, %b
1494  %cmp1 = fcmp ord double %a, %b
1495  %retval = and i1 %cmp, %cmp1
1496  ret i1 %retval
1497}
1498
1499define i1 @auto_gen_128(double %a, double %b) {
1500; CHECK-LABEL: @auto_gen_128(
1501; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
1502; CHECK-NEXT:    ret i1 [[CMP1]]
1503;
1504  %cmp = fcmp true double %a, %b
1505  %cmp1 = fcmp ueq double %a, %b
1506  %retval = and i1 %cmp, %cmp1
1507  ret i1 %retval
1508}
1509
1510define i1 @auto_gen_129(double %a, double %b) {
1511; CHECK-LABEL: @auto_gen_129(
1512; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
1513; CHECK-NEXT:    ret i1 [[CMP1]]
1514;
1515  %cmp = fcmp true double %a, %b
1516  %cmp1 = fcmp ugt double %a, %b
1517  %retval = and i1 %cmp, %cmp1
1518  ret i1 %retval
1519}
1520
1521define i1 @auto_gen_130(double %a, double %b) {
1522; CHECK-LABEL: @auto_gen_130(
1523; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
1524; CHECK-NEXT:    ret i1 [[CMP1]]
1525;
1526  %cmp = fcmp true double %a, %b
1527  %cmp1 = fcmp uge double %a, %b
1528  %retval = and i1 %cmp, %cmp1
1529  ret i1 %retval
1530}
1531
1532define i1 @auto_gen_131(double %a, double %b) {
1533; CHECK-LABEL: @auto_gen_131(
1534; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
1535; CHECK-NEXT:    ret i1 [[CMP1]]
1536;
1537  %cmp = fcmp true double %a, %b
1538  %cmp1 = fcmp ult double %a, %b
1539  %retval = and i1 %cmp, %cmp1
1540  ret i1 %retval
1541}
1542
1543define i1 @auto_gen_132(double %a, double %b) {
1544; CHECK-LABEL: @auto_gen_132(
1545; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
1546; CHECK-NEXT:    ret i1 [[CMP1]]
1547;
1548  %cmp = fcmp true double %a, %b
1549  %cmp1 = fcmp ule double %a, %b
1550  %retval = and i1 %cmp, %cmp1
1551  ret i1 %retval
1552}
1553
1554define i1 @auto_gen_133(double %a, double %b) {
1555; CHECK-LABEL: @auto_gen_133(
1556; CHECK-NEXT:    [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
1557; CHECK-NEXT:    ret i1 [[CMP1]]
1558;
1559  %cmp = fcmp true double %a, %b
1560  %cmp1 = fcmp une double %a, %b
1561  %retval = and i1 %cmp, %cmp1
1562  ret i1 %retval
1563}
1564
1565define i1 @auto_gen_134(double %a, double %b) {
1566; CHECK-LABEL: @auto_gen_134(
1567; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
1568; CHECK-NEXT:    ret i1 [[CMP1]]
1569;
1570  %cmp = fcmp true double %a, %b
1571  %cmp1 = fcmp uno double %a, %b
1572  %retval = and i1 %cmp, %cmp1
1573  ret i1 %retval
1574}
1575
1576define i1 @auto_gen_135(double %a, double %b) {
1577; CHECK-LABEL: @auto_gen_135(
1578; CHECK-NEXT:    ret i1 true
1579;
1580  %cmp = fcmp true double %a, %b
1581  %cmp1 = fcmp true double %a, %b
1582  %retval = and i1 %cmp, %cmp1
1583  ret i1 %retval
1584}
1585