xref: /llvm-project/llvm/test/Transforms/InstCombine/and-fcmp.ll (revision e5faeb69fbb87722ee315884eeef2089b10b0cee)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4define 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]]
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
15; TODO: this can be supported by freezing %y
16define 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]]
22;
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
27}
28
29define 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]]
33;
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
38}
39
40define <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]]
46;
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
51}
52
53define <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]]
57;
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
62}
63
64define 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]]
69;
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
75}
76
77; FIXME: this can be supported by freezing %d
78define 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]]
85;
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
91}
92
93define 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]]
98;
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
104}
105
106; TODO: this should be fixed using freeze
107define 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]]
114;
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
120}
121
122; Commute differently and make sure vectors work.
123
124define <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]]
132;
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
139}
140
141define <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]]
149;
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
156}
157
158define 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]]
164;
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
169}
170
171define 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]]
177;
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
182}
183
184define <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]]
190;
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
195}
196
197define 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]]
201;
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
206}
207
208; TODO: this can be supported by freezing %y
209define 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]]
215;
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
220}
221
222define <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]]
226;
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
231}
232
233define i1 @auto_gen_0(double %a, double %b) {
234; CHECK-LABEL: @auto_gen_0(
235; CHECK-NEXT:    ret i1 false
236;
237  %cmp = fcmp false double %a, %b
238  %cmp1 = fcmp false double %a, %b
239  %retval = and i1 %cmp, %cmp1
240  ret i1 %retval
241}
242
243define i1 @auto_gen_0_logical(double %a, double %b) {
244; CHECK-LABEL: @auto_gen_0_logical(
245; CHECK-NEXT:    ret i1 false
246;
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
251}
252
253define i1 @auto_gen_0_logical_fmf(double %a, double %b) {
254; CHECK-LABEL: @auto_gen_0_logical_fmf(
255; CHECK-NEXT:    ret i1 false
256;
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
261}
262
263define i1 @auto_gen_1(double %a, double %b) {
264; CHECK-LABEL: @auto_gen_1(
265; CHECK-NEXT:    ret i1 false
266;
267  %cmp = fcmp oeq double %a, %b
268  %cmp1 = fcmp false double %a, %b
269  %retval = and i1 %cmp, %cmp1
270  ret i1 %retval
271}
272
273define i1 @auto_gen_1_logical(double %a, double %b) {
274; CHECK-LABEL: @auto_gen_1_logical(
275; CHECK-NEXT:    ret i1 false
276;
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
281}
282
283define i1 @auto_gen_1_logical_fmf(double %a, double %b) {
284; CHECK-LABEL: @auto_gen_1_logical_fmf(
285; CHECK-NEXT:    ret i1 false
286;
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
291}
292
293define 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]]
297;
298  %cmp = fcmp oeq double %a, %b
299  %cmp1 = fcmp oeq double %a, %b
300  %retval = and i1 %cmp, %cmp1
301  ret i1 %retval
302}
303
304define 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]]
308;
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
313}
314
315define 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]]
319;
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
324}
325
326define i1 @auto_gen_3(double %a, double %b) {
327; CHECK-LABEL: @auto_gen_3(
328; CHECK-NEXT:    ret i1 false
329;
330  %cmp = fcmp ogt double %a, %b
331  %cmp1 = fcmp false double %a, %b
332  %retval = and i1 %cmp, %cmp1
333  ret i1 %retval
334}
335
336define i1 @auto_gen_3_logical(double %a, double %b) {
337; CHECK-LABEL: @auto_gen_3_logical(
338; CHECK-NEXT:    ret i1 false
339;
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
344}
345
346define i1 @auto_gen_3_logical_fmf(double %a, double %b) {
347; CHECK-LABEL: @auto_gen_3_logical_fmf(
348; CHECK-NEXT:    ret i1 false
349;
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
354}
355
356define i1 @auto_gen_4(double %a, double %b) {
357; CHECK-LABEL: @auto_gen_4(
358; CHECK-NEXT:    ret i1 false
359;
360  %cmp = fcmp ogt double %a, %b
361  %cmp1 = fcmp oeq double %a, %b
362  %retval = and i1 %cmp, %cmp1
363  ret i1 %retval
364}
365
366define i1 @auto_gen_4_logical(double %a, double %b) {
367; CHECK-LABEL: @auto_gen_4_logical(
368; CHECK-NEXT:    ret i1 false
369;
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
374}
375
376define i1 @auto_gen_4_logical_fmf(double %a, double %b) {
377; CHECK-LABEL: @auto_gen_4_logical_fmf(
378; CHECK-NEXT:    ret i1 false
379;
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
384}
385
386define 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]]
390;
391  %cmp = fcmp ogt double %a, %b
392  %cmp1 = fcmp ogt double %a, %b
393  %retval = and i1 %cmp, %cmp1
394  ret i1 %retval
395}
396
397define 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]]
401;
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
406}
407
408define 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]]
412;
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
417}
418
419define i1 @auto_gen_6(double %a, double %b) {
420; CHECK-LABEL: @auto_gen_6(
421; CHECK-NEXT:    ret i1 false
422;
423  %cmp = fcmp oge double %a, %b
424  %cmp1 = fcmp false double %a, %b
425  %retval = and i1 %cmp, %cmp1
426  ret i1 %retval
427}
428
429define i1 @auto_gen_6_logical(double %a, double %b) {
430; CHECK-LABEL: @auto_gen_6_logical(
431; CHECK-NEXT:    ret i1 false
432;
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
437}
438
439define i1 @auto_gen_6_logical_fmf(double %a, double %b) {
440; CHECK-LABEL: @auto_gen_6_logical_fmf(
441; CHECK-NEXT:    ret i1 false
442;
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
447}
448
449define 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]]
453;
454  %cmp = fcmp oge double %a, %b
455  %cmp1 = fcmp oeq double %a, %b
456  %retval = and i1 %cmp, %cmp1
457  ret i1 %retval
458}
459
460define 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]]
464;
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
469}
470
471define 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]]
475;
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
480}
481
482define 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]]
486;
487  %cmp = fcmp oge double %a, %b
488  %cmp1 = fcmp ogt double %a, %b
489  %retval = and i1 %cmp, %cmp1
490  ret i1 %retval
491}
492
493define 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]]
497;
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
502}
503
504define 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]]
508;
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
513}
514
515define 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]]
519;
520  %cmp = fcmp oge double %a, %b
521  %cmp1 = fcmp oge double %a, %b
522  %retval = and i1 %cmp, %cmp1
523  ret i1 %retval
524}
525
526define 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]]
530;
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
535}
536
537define 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]]
541;
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
546}
547
548define i1 @auto_gen_10(double %a, double %b) {
549; CHECK-LABEL: @auto_gen_10(
550; CHECK-NEXT:    ret i1 false
551;
552  %cmp = fcmp olt double %a, %b
553  %cmp1 = fcmp false double %a, %b
554  %retval = and i1 %cmp, %cmp1
555  ret i1 %retval
556}
557
558define i1 @auto_gen_10_logical(double %a, double %b) {
559; CHECK-LABEL: @auto_gen_10_logical(
560; CHECK-NEXT:    ret i1 false
561;
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
566}
567
568define i1 @auto_gen_10_logical_fmf(double %a, double %b) {
569; CHECK-LABEL: @auto_gen_10_logical_fmf(
570; CHECK-NEXT:    ret i1 false
571;
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
576}
577
578define i1 @auto_gen_11(double %a, double %b) {
579; CHECK-LABEL: @auto_gen_11(
580; CHECK-NEXT:    ret i1 false
581;
582  %cmp = fcmp olt double %a, %b
583  %cmp1 = fcmp oeq double %a, %b
584  %retval = and i1 %cmp, %cmp1
585  ret i1 %retval
586}
587
588define i1 @auto_gen_11_logical(double %a, double %b) {
589; CHECK-LABEL: @auto_gen_11_logical(
590; CHECK-NEXT:    ret i1 false
591;
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
596}
597
598define i1 @auto_gen_11_logical_fmf(double %a, double %b) {
599; CHECK-LABEL: @auto_gen_11_logical_fmf(
600; CHECK-NEXT:    ret i1 false
601;
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
606}
607
608define i1 @auto_gen_12(double %a, double %b) {
609; CHECK-LABEL: @auto_gen_12(
610; CHECK-NEXT:    ret i1 false
611;
612  %cmp = fcmp olt double %a, %b
613  %cmp1 = fcmp ogt double %a, %b
614  %retval = and i1 %cmp, %cmp1
615  ret i1 %retval
616}
617
618define i1 @auto_gen_12_logical(double %a, double %b) {
619; CHECK-LABEL: @auto_gen_12_logical(
620; CHECK-NEXT:    ret i1 false
621;
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
626}
627
628define i1 @auto_gen_12_logical_fmf(double %a, double %b) {
629; CHECK-LABEL: @auto_gen_12_logical_fmf(
630; CHECK-NEXT:    ret i1 false
631;
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
636}
637
638define i1 @auto_gen_13(double %a, double %b) {
639; CHECK-LABEL: @auto_gen_13(
640; CHECK-NEXT:    ret i1 false
641;
642  %cmp = fcmp olt double %a, %b
643  %cmp1 = fcmp oge double %a, %b
644  %retval = and i1 %cmp, %cmp1
645  ret i1 %retval
646}
647
648define i1 @auto_gen_13_logical(double %a, double %b) {
649; CHECK-LABEL: @auto_gen_13_logical(
650; CHECK-NEXT:    ret i1 false
651;
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
656}
657
658define i1 @auto_gen_13_logical_fmf(double %a, double %b) {
659; CHECK-LABEL: @auto_gen_13_logical_fmf(
660; CHECK-NEXT:    ret i1 false
661;
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
666}
667
668define 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]]
672;
673  %cmp = fcmp olt double %a, %b
674  %cmp1 = fcmp olt double %a, %b
675  %retval = and i1 %cmp, %cmp1
676  ret i1 %retval
677}
678
679define 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]]
683;
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
688}
689
690define 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]]
694;
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
699}
700
701define i1 @auto_gen_15(double %a, double %b) {
702; CHECK-LABEL: @auto_gen_15(
703; CHECK-NEXT:    ret i1 false
704;
705  %cmp = fcmp ole double %a, %b
706  %cmp1 = fcmp false double %a, %b
707  %retval = and i1 %cmp, %cmp1
708  ret i1 %retval
709}
710
711define i1 @auto_gen_15_logical(double %a, double %b) {
712; CHECK-LABEL: @auto_gen_15_logical(
713; CHECK-NEXT:    ret i1 false
714;
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
719}
720
721define i1 @auto_gen_15_logical_fmf(double %a, double %b) {
722; CHECK-LABEL: @auto_gen_15_logical_fmf(
723; CHECK-NEXT:    ret i1 false
724;
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
729}
730
731define 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]]
735;
736  %cmp = fcmp ole double %a, %b
737  %cmp1 = fcmp oeq double %a, %b
738  %retval = and i1 %cmp, %cmp1
739  ret i1 %retval
740}
741
742define 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]]
746;
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
751}
752
753define 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]]
757;
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
762}
763
764define i1 @auto_gen_17(double %a, double %b) {
765; CHECK-LABEL: @auto_gen_17(
766; CHECK-NEXT:    ret i1 false
767;
768  %cmp = fcmp ole double %a, %b
769  %cmp1 = fcmp ogt double %a, %b
770  %retval = and i1 %cmp, %cmp1
771  ret i1 %retval
772}
773
774define i1 @auto_gen_17_logical(double %a, double %b) {
775; CHECK-LABEL: @auto_gen_17_logical(
776; CHECK-NEXT:    ret i1 false
777;
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
782}
783
784define i1 @auto_gen_17_logical_fmf(double %a, double %b) {
785; CHECK-LABEL: @auto_gen_17_logical_fmf(
786; CHECK-NEXT:    ret i1 false
787;
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
792}
793
794define 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]]
798;
799  %cmp = fcmp ole double %a, %b
800  %cmp1 = fcmp oge double %a, %b
801  %retval = and i1 %cmp, %cmp1
802  ret i1 %retval
803}
804
805define 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]]
809;
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
814}
815
816define 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]]
820;
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
825}
826
827define 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]]
831;
832  %cmp = fcmp ole double %a, %b
833  %cmp1 = fcmp olt double %a, %b
834  %retval = and i1 %cmp, %cmp1
835  ret i1 %retval
836}
837
838define 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]]
842;
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
847}
848
849define 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]]
853;
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
858}
859
860define 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]]
864;
865  %cmp = fcmp ole double %a, %b
866  %cmp1 = fcmp ole double %a, %b
867  %retval = and i1 %cmp, %cmp1
868  ret i1 %retval
869}
870
871define 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]]
875;
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
880}
881
882define 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]]
886;
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
891}
892
893define i1 @auto_gen_21(double %a, double %b) {
894; CHECK-LABEL: @auto_gen_21(
895; CHECK-NEXT:    ret i1 false
896;
897  %cmp = fcmp one double %a, %b
898  %cmp1 = fcmp false double %a, %b
899  %retval = and i1 %cmp, %cmp1
900  ret i1 %retval
901}
902
903define i1 @auto_gen_21_logical(double %a, double %b) {
904; CHECK-LABEL: @auto_gen_21_logical(
905; CHECK-NEXT:    ret i1 false
906;
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
911}
912
913define i1 @auto_gen_21_logical_fmf(double %a, double %b) {
914; CHECK-LABEL: @auto_gen_21_logical_fmf(
915; CHECK-NEXT:    ret i1 false
916;
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
921}
922
923define i1 @auto_gen_22(double %a, double %b) {
924; CHECK-LABEL: @auto_gen_22(
925; CHECK-NEXT:    ret i1 false
926;
927  %cmp = fcmp one double %a, %b
928  %cmp1 = fcmp oeq double %a, %b
929  %retval = and i1 %cmp, %cmp1
930  ret i1 %retval
931}
932
933define i1 @auto_gen_22_logical(double %a, double %b) {
934; CHECK-LABEL: @auto_gen_22_logical(
935; CHECK-NEXT:    ret i1 false
936;
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
941}
942
943define i1 @auto_gen_22_logical_fmf(double %a, double %b) {
944; CHECK-LABEL: @auto_gen_22_logical_fmf(
945; CHECK-NEXT:    ret i1 false
946;
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
951}
952
953define 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]]
957;
958  %cmp = fcmp one double %a, %b
959  %cmp1 = fcmp ogt double %a, %b
960  %retval = and i1 %cmp, %cmp1
961  ret i1 %retval
962}
963
964define 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]]
968;
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
973}
974
975define 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]]
979;
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
984}
985
986define 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]]
990;
991  %cmp = fcmp one double %a, %b
992  %cmp1 = fcmp oge double %a, %b
993  %retval = and i1 %cmp, %cmp1
994  ret i1 %retval
995}
996
997define 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]]
1001;
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
1006}
1007
1008define 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]]
1012;
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
1017}
1018
1019define 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]]
1023;
1024  %cmp = fcmp one double %a, %b
1025  %cmp1 = fcmp olt double %a, %b
1026  %retval = and i1 %cmp, %cmp1
1027  ret i1 %retval
1028}
1029
1030define 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]]
1034;
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
1039}
1040
1041define 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]]
1045;
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
1050}
1051
1052define 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]]
1056;
1057  %cmp = fcmp one double %a, %b
1058  %cmp1 = fcmp ole double %a, %b
1059  %retval = and i1 %cmp, %cmp1
1060  ret i1 %retval
1061}
1062
1063define 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]]
1067;
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
1072}
1073
1074define 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]]
1078;
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
1083}
1084
1085define 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]]
1089;
1090  %cmp = fcmp one double %a, %b
1091  %cmp1 = fcmp one double %a, %b
1092  %retval = and i1 %cmp, %cmp1
1093  ret i1 %retval
1094}
1095
1096define 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]]
1100;
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
1105}
1106
1107define 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]]
1111;
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
1116}
1117
1118define i1 @auto_gen_28(double %a, double %b) {
1119; CHECK-LABEL: @auto_gen_28(
1120; CHECK-NEXT:    ret i1 false
1121;
1122  %cmp = fcmp ord double %a, %b
1123  %cmp1 = fcmp false double %a, %b
1124  %retval = and i1 %cmp, %cmp1
1125  ret i1 %retval
1126}
1127
1128define i1 @auto_gen_28_logical(double %a, double %b) {
1129; CHECK-LABEL: @auto_gen_28_logical(
1130; CHECK-NEXT:    ret i1 false
1131;
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
1136}
1137
1138define i1 @auto_gen_28_logical_fmf(double %a, double %b) {
1139; CHECK-LABEL: @auto_gen_28_logical_fmf(
1140; CHECK-NEXT:    ret i1 false
1141;
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
1146}
1147
1148define 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]]
1152;
1153  %cmp = fcmp ord double %a, %b
1154  %cmp1 = fcmp oeq double %a, %b
1155  %retval = and i1 %cmp, %cmp1
1156  ret i1 %retval
1157}
1158
1159define 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]]
1163;
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
1168}
1169
1170define 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]]
1174;
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
1179}
1180
1181define 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]]
1185;
1186  %cmp = fcmp ord double %a, %b
1187  %cmp1 = fcmp ogt double %a, %b
1188  %retval = and i1 %cmp, %cmp1
1189  ret i1 %retval
1190}
1191
1192define 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]]
1196;
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
1201}
1202
1203define 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]]
1207;
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
1212}
1213
1214define 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]]
1218;
1219  %cmp = fcmp ord double %a, %b
1220  %cmp1 = fcmp oge double %a, %b
1221  %retval = and i1 %cmp, %cmp1
1222  ret i1 %retval
1223}
1224
1225define 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]]
1229;
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
1234}
1235
1236define 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]]
1240;
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
1245}
1246
1247define 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]]
1251;
1252  %cmp = fcmp ord double %a, %b
1253  %cmp1 = fcmp olt double %a, %b
1254  %retval = and i1 %cmp, %cmp1
1255  ret i1 %retval
1256}
1257
1258define 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]]
1262;
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
1267}
1268
1269define 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]]
1273;
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
1278}
1279
1280define 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]]
1284;
1285  %cmp = fcmp ord double %a, %b
1286  %cmp1 = fcmp ole double %a, %b
1287  %retval = and i1 %cmp, %cmp1
1288  ret i1 %retval
1289}
1290
1291define 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]]
1295;
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
1300}
1301
1302define 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]]
1306;
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
1311}
1312
1313define 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]]
1317;
1318  %cmp = fcmp ord double %a, %b
1319  %cmp1 = fcmp one double %a, %b
1320  %retval = and i1 %cmp, %cmp1
1321  ret i1 %retval
1322}
1323
1324define 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]]
1328;
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
1333}
1334
1335define 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]]
1339;
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
1344}
1345
1346define 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]]
1350;
1351  %cmp = fcmp ord double %a, %b
1352  %cmp1 = fcmp ord double %a, %b
1353  %retval = and i1 %cmp, %cmp1
1354  ret i1 %retval
1355}
1356
1357define 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]]
1361;
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
1366}
1367
1368define i1 @auto_gen_35_logical_fmf(double %a, double %b) {
1369; CHECK-LABEL: @auto_gen_35_logical_fmf(
1370; CHECK-NEXT:    ret i1 true
1371;
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
1376}
1377
1378define i1 @auto_gen_36(double %a, double %b) {
1379; CHECK-LABEL: @auto_gen_36(
1380; CHECK-NEXT:    ret i1 false
1381;
1382  %cmp = fcmp ueq double %a, %b
1383  %cmp1 = fcmp false double %a, %b
1384  %retval = and i1 %cmp, %cmp1
1385  ret i1 %retval
1386}
1387
1388define i1 @auto_gen_36_logical(double %a, double %b) {
1389; CHECK-LABEL: @auto_gen_36_logical(
1390; CHECK-NEXT:    ret i1 false
1391;
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
1396}
1397
1398define i1 @auto_gen_36_logical_fmf(double %a, double %b) {
1399; CHECK-LABEL: @auto_gen_36_logical_fmf(
1400; CHECK-NEXT:    ret i1 false
1401;
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
1406}
1407
1408define 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]]
1412;
1413  %cmp = fcmp ueq double %a, %b
1414  %cmp1 = fcmp oeq double %a, %b
1415  %retval = and i1 %cmp, %cmp1
1416  ret i1 %retval
1417}
1418
1419define 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]]
1423;
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
1428}
1429
1430define 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]]
1434;
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
1439}
1440
1441define i1 @auto_gen_38(double %a, double %b) {
1442; CHECK-LABEL: @auto_gen_38(
1443; CHECK-NEXT:    ret i1 false
1444;
1445  %cmp = fcmp ueq double %a, %b
1446  %cmp1 = fcmp ogt double %a, %b
1447  %retval = and i1 %cmp, %cmp1
1448  ret i1 %retval
1449}
1450
1451define i1 @auto_gen_38_logical(double %a, double %b) {
1452; CHECK-LABEL: @auto_gen_38_logical(
1453; CHECK-NEXT:    ret i1 false
1454;
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
1459}
1460
1461define i1 @auto_gen_38_logical_fmf(double %a, double %b) {
1462; CHECK-LABEL: @auto_gen_38_logical_fmf(
1463; CHECK-NEXT:    ret i1 false
1464;
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
1469}
1470
1471define 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]]
1475;
1476  %cmp = fcmp ueq double %a, %b
1477  %cmp1 = fcmp oge double %a, %b
1478  %retval = and i1 %cmp, %cmp1
1479  ret i1 %retval
1480}
1481
1482define 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]]
1486;
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
1491}
1492
1493define 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]]
1497;
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
1502}
1503
1504define i1 @auto_gen_40(double %a, double %b) {
1505; CHECK-LABEL: @auto_gen_40(
1506; CHECK-NEXT:    ret i1 false
1507;
1508  %cmp = fcmp ueq double %a, %b
1509  %cmp1 = fcmp olt double %a, %b
1510  %retval = and i1 %cmp, %cmp1
1511  ret i1 %retval
1512}
1513
1514define i1 @auto_gen_40_logical(double %a, double %b) {
1515; CHECK-LABEL: @auto_gen_40_logical(
1516; CHECK-NEXT:    ret i1 false
1517;
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
1522}
1523
1524define i1 @auto_gen_40_logical_fmf(double %a, double %b) {
1525; CHECK-LABEL: @auto_gen_40_logical_fmf(
1526; CHECK-NEXT:    ret i1 false
1527;
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
1532}
1533
1534define 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]]
1538;
1539  %cmp = fcmp ueq double %a, %b
1540  %cmp1 = fcmp ole double %a, %b
1541  %retval = and i1 %cmp, %cmp1
1542  ret i1 %retval
1543}
1544
1545define 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]]
1549;
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
1554}
1555
1556define 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]]
1560;
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
1565}
1566
1567define i1 @auto_gen_42(double %a, double %b) {
1568; CHECK-LABEL: @auto_gen_42(
1569; CHECK-NEXT:    ret i1 false
1570;
1571  %cmp = fcmp ueq double %a, %b
1572  %cmp1 = fcmp one double %a, %b
1573  %retval = and i1 %cmp, %cmp1
1574  ret i1 %retval
1575}
1576
1577define i1 @auto_gen_42_logical(double %a, double %b) {
1578; CHECK-LABEL: @auto_gen_42_logical(
1579; CHECK-NEXT:    ret i1 false
1580;
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
1585}
1586
1587define i1 @auto_gen_42_logical_fmf(double %a, double %b) {
1588; CHECK-LABEL: @auto_gen_42_logical_fmf(
1589; CHECK-NEXT:    ret i1 false
1590;
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
1595}
1596
1597define 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]]
1601;
1602  %cmp = fcmp ueq double %a, %b
1603  %cmp1 = fcmp ord double %a, %b
1604  %retval = and i1 %cmp, %cmp1
1605  ret i1 %retval
1606}
1607
1608define 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]]
1612;
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
1617}
1618
1619define 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]]
1623;
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
1628}
1629
1630define 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]]
1634;
1635  %cmp = fcmp ueq double %a, %b
1636  %cmp1 = fcmp ueq double %a, %b
1637  %retval = and i1 %cmp, %cmp1
1638  ret i1 %retval
1639}
1640
1641define 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]]
1645;
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
1650}
1651
1652define 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]]
1656;
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
1661}
1662
1663define i1 @auto_gen_45(double %a, double %b) {
1664; CHECK-LABEL: @auto_gen_45(
1665; CHECK-NEXT:    ret i1 false
1666;
1667  %cmp = fcmp ugt double %a, %b
1668  %cmp1 = fcmp false double %a, %b
1669  %retval = and i1 %cmp, %cmp1
1670  ret i1 %retval
1671}
1672
1673define i1 @auto_gen_45_logical(double %a, double %b) {
1674; CHECK-LABEL: @auto_gen_45_logical(
1675; CHECK-NEXT:    ret i1 false
1676;
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
1681}
1682
1683define i1 @auto_gen_45_logical_fmf(double %a, double %b) {
1684; CHECK-LABEL: @auto_gen_45_logical_fmf(
1685; CHECK-NEXT:    ret i1 false
1686;
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
1691}
1692
1693define i1 @auto_gen_46(double %a, double %b) {
1694; CHECK-LABEL: @auto_gen_46(
1695; CHECK-NEXT:    ret i1 false
1696;
1697  %cmp = fcmp ugt double %a, %b
1698  %cmp1 = fcmp oeq double %a, %b
1699  %retval = and i1 %cmp, %cmp1
1700  ret i1 %retval
1701}
1702
1703define i1 @auto_gen_46_logical(double %a, double %b) {
1704; CHECK-LABEL: @auto_gen_46_logical(
1705; CHECK-NEXT:    ret i1 false
1706;
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
1711}
1712
1713define i1 @auto_gen_46_logical_fmf(double %a, double %b) {
1714; CHECK-LABEL: @auto_gen_46_logical_fmf(
1715; CHECK-NEXT:    ret i1 false
1716;
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
1721}
1722
1723define 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]]
1727;
1728  %cmp = fcmp ugt double %a, %b
1729  %cmp1 = fcmp ogt double %a, %b
1730  %retval = and i1 %cmp, %cmp1
1731  ret i1 %retval
1732}
1733
1734define 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]]
1738;
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
1743}
1744
1745define 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]]
1749;
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
1754}
1755
1756define 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]]
1760;
1761  %cmp = fcmp ugt double %a, %b
1762  %cmp1 = fcmp oge double %a, %b
1763  %retval = and i1 %cmp, %cmp1
1764  ret i1 %retval
1765}
1766
1767define 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]]
1771;
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
1776}
1777
1778define 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]]
1782;
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
1787}
1788
1789define i1 @auto_gen_49(double %a, double %b) {
1790; CHECK-LABEL: @auto_gen_49(
1791; CHECK-NEXT:    ret i1 false
1792;
1793  %cmp = fcmp ugt double %a, %b
1794  %cmp1 = fcmp olt double %a, %b
1795  %retval = and i1 %cmp, %cmp1
1796  ret i1 %retval
1797}
1798
1799define i1 @auto_gen_49_logical(double %a, double %b) {
1800; CHECK-LABEL: @auto_gen_49_logical(
1801; CHECK-NEXT:    ret i1 false
1802;
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
1807}
1808
1809define i1 @auto_gen_49_logical_fmf(double %a, double %b) {
1810; CHECK-LABEL: @auto_gen_49_logical_fmf(
1811; CHECK-NEXT:    ret i1 false
1812;
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
1817}
1818
1819define i1 @auto_gen_50(double %a, double %b) {
1820; CHECK-LABEL: @auto_gen_50(
1821; CHECK-NEXT:    ret i1 false
1822;
1823  %cmp = fcmp ugt double %a, %b
1824  %cmp1 = fcmp ole double %a, %b
1825  %retval = and i1 %cmp, %cmp1
1826  ret i1 %retval
1827}
1828
1829define i1 @auto_gen_50_logical(double %a, double %b) {
1830; CHECK-LABEL: @auto_gen_50_logical(
1831; CHECK-NEXT:    ret i1 false
1832;
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
1837}
1838
1839define i1 @auto_gen_50_logical_fmf(double %a, double %b) {
1840; CHECK-LABEL: @auto_gen_50_logical_fmf(
1841; CHECK-NEXT:    ret i1 false
1842;
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
1847}
1848
1849define 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]]
1853;
1854  %cmp = fcmp ugt double %a, %b
1855  %cmp1 = fcmp one double %a, %b
1856  %retval = and i1 %cmp, %cmp1
1857  ret i1 %retval
1858}
1859
1860define 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]]
1864;
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
1869}
1870
1871define 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]]
1875;
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
1880}
1881
1882define 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]]
1886;
1887  %cmp = fcmp ugt double %a, %b
1888  %cmp1 = fcmp ord double %a, %b
1889  %retval = and i1 %cmp, %cmp1
1890  ret i1 %retval
1891}
1892
1893define 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]]
1897;
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
1902}
1903
1904define 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]]
1908;
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
1913}
1914
1915define 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]]
1919;
1920  %cmp = fcmp ugt double %a, %b
1921  %cmp1 = fcmp ueq double %a, %b
1922  %retval = and i1 %cmp, %cmp1
1923  ret i1 %retval
1924}
1925
1926define 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]]
1930;
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
1935}
1936
1937define i1 @auto_gen_53_logical_fmf(double %a, double %b) {
1938; CHECK-LABEL: @auto_gen_53_logical_fmf(
1939; CHECK-NEXT:    ret i1 false
1940;
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
1945}
1946
1947define 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]]
1951;
1952  %cmp = fcmp ugt double %a, %b
1953  %cmp1 = fcmp ugt double %a, %b
1954  %retval = and i1 %cmp, %cmp1
1955  ret i1 %retval
1956}
1957
1958define 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]]
1962;
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
1967}
1968
1969define 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]]
1973;
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
1978}
1979
1980define i1 @auto_gen_55(double %a, double %b) {
1981; CHECK-LABEL: @auto_gen_55(
1982; CHECK-NEXT:    ret i1 false
1983;
1984  %cmp = fcmp uge double %a, %b
1985  %cmp1 = fcmp false double %a, %b
1986  %retval = and i1 %cmp, %cmp1
1987  ret i1 %retval
1988}
1989
1990define i1 @auto_gen_55_logical(double %a, double %b) {
1991; CHECK-LABEL: @auto_gen_55_logical(
1992; CHECK-NEXT:    ret i1 false
1993;
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
1998}
1999
2000define i1 @auto_gen_55_logical_fmf(double %a, double %b) {
2001; CHECK-LABEL: @auto_gen_55_logical_fmf(
2002; CHECK-NEXT:    ret i1 false
2003;
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
2008}
2009
2010define 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]]
2014;
2015  %cmp = fcmp uge double %a, %b
2016  %cmp1 = fcmp oeq double %a, %b
2017  %retval = and i1 %cmp, %cmp1
2018  ret i1 %retval
2019}
2020
2021define 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]]
2025;
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
2030}
2031
2032define 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]]
2036;
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
2041}
2042
2043define 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]]
2047;
2048  %cmp = fcmp uge double %a, %b
2049  %cmp1 = fcmp ogt double %a, %b
2050  %retval = and i1 %cmp, %cmp1
2051  ret i1 %retval
2052}
2053
2054define 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]]
2058;
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
2063}
2064
2065define 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]]
2069;
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
2074}
2075
2076define 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]]
2080;
2081  %cmp = fcmp uge double %a, %b
2082  %cmp1 = fcmp oge double %a, %b
2083  %retval = and i1 %cmp, %cmp1
2084  ret i1 %retval
2085}
2086
2087define 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]]
2091;
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
2096}
2097
2098define 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]]
2102;
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
2107}
2108
2109define i1 @auto_gen_59(double %a, double %b) {
2110; CHECK-LABEL: @auto_gen_59(
2111; CHECK-NEXT:    ret i1 false
2112;
2113  %cmp = fcmp uge double %a, %b
2114  %cmp1 = fcmp olt double %a, %b
2115  %retval = and i1 %cmp, %cmp1
2116  ret i1 %retval
2117}
2118
2119define i1 @auto_gen_59_logical(double %a, double %b) {
2120; CHECK-LABEL: @auto_gen_59_logical(
2121; CHECK-NEXT:    ret i1 false
2122;
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
2127}
2128
2129define i1 @auto_gen_59_logical_fmf(double %a, double %b) {
2130; CHECK-LABEL: @auto_gen_59_logical_fmf(
2131; CHECK-NEXT:    ret i1 false
2132;
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
2137}
2138
2139define 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]]
2143;
2144  %cmp = fcmp uge double %a, %b
2145  %cmp1 = fcmp ole double %a, %b
2146  %retval = and i1 %cmp, %cmp1
2147  ret i1 %retval
2148}
2149
2150define 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]]
2154;
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
2159}
2160
2161define 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]]
2165;
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
2170}
2171
2172define 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]]
2176;
2177  %cmp = fcmp uge double %a, %b
2178  %cmp1 = fcmp one double %a, %b
2179  %retval = and i1 %cmp, %cmp1
2180  ret i1 %retval
2181}
2182
2183define 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]]
2187;
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
2192}
2193
2194define 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]]
2198;
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
2203}
2204
2205define 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]]
2209;
2210  %cmp = fcmp uge double %a, %b
2211  %cmp1 = fcmp ord double %a, %b
2212  %retval = and i1 %cmp, %cmp1
2213  ret i1 %retval
2214}
2215
2216define 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]]
2220;
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
2225}
2226
2227define 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]]
2231;
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
2236}
2237
2238define 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]]
2242;
2243  %cmp = fcmp uge double %a, %b
2244  %cmp1 = fcmp ueq double %a, %b
2245  %retval = and i1 %cmp, %cmp1
2246  ret i1 %retval
2247}
2248
2249define 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]]
2253;
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
2258}
2259
2260define 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]]
2264;
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
2269}
2270
2271define 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]]
2275;
2276  %cmp = fcmp uge double %a, %b
2277  %cmp1 = fcmp ugt double %a, %b
2278  %retval = and i1 %cmp, %cmp1
2279  ret i1 %retval
2280}
2281
2282define 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]]
2286;
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
2291}
2292
2293define 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]]
2297;
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
2302}
2303
2304define 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]]
2308;
2309  %cmp = fcmp uge double %a, %b
2310  %cmp1 = fcmp uge double %a, %b
2311  %retval = and i1 %cmp, %cmp1
2312  ret i1 %retval
2313}
2314
2315define 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]]
2319;
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
2324}
2325
2326define 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]]
2330;
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
2335}
2336
2337define i1 @auto_gen_66(double %a, double %b) {
2338; CHECK-LABEL: @auto_gen_66(
2339; CHECK-NEXT:    ret i1 false
2340;
2341  %cmp = fcmp ult double %a, %b
2342  %cmp1 = fcmp false double %a, %b
2343  %retval = and i1 %cmp, %cmp1
2344  ret i1 %retval
2345}
2346
2347define i1 @auto_gen_66_logical(double %a, double %b) {
2348; CHECK-LABEL: @auto_gen_66_logical(
2349; CHECK-NEXT:    ret i1 false
2350;
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
2355}
2356
2357define i1 @auto_gen_66_logical_fmf(double %a, double %b) {
2358; CHECK-LABEL: @auto_gen_66_logical_fmf(
2359; CHECK-NEXT:    ret i1 false
2360;
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
2365}
2366
2367define i1 @auto_gen_67(double %a, double %b) {
2368; CHECK-LABEL: @auto_gen_67(
2369; CHECK-NEXT:    ret i1 false
2370;
2371  %cmp = fcmp ult double %a, %b
2372  %cmp1 = fcmp oeq double %a, %b
2373  %retval = and i1 %cmp, %cmp1
2374  ret i1 %retval
2375}
2376
2377define i1 @auto_gen_67_logical(double %a, double %b) {
2378; CHECK-LABEL: @auto_gen_67_logical(
2379; CHECK-NEXT:    ret i1 false
2380;
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
2385}
2386
2387define i1 @auto_gen_67_logical_fmf(double %a, double %b) {
2388; CHECK-LABEL: @auto_gen_67_logical_fmf(
2389; CHECK-NEXT:    ret i1 false
2390;
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
2395}
2396
2397define i1 @auto_gen_68(double %a, double %b) {
2398; CHECK-LABEL: @auto_gen_68(
2399; CHECK-NEXT:    ret i1 false
2400;
2401  %cmp = fcmp ult double %a, %b
2402  %cmp1 = fcmp ogt double %a, %b
2403  %retval = and i1 %cmp, %cmp1
2404  ret i1 %retval
2405}
2406
2407define i1 @auto_gen_68_logical(double %a, double %b) {
2408; CHECK-LABEL: @auto_gen_68_logical(
2409; CHECK-NEXT:    ret i1 false
2410;
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
2415}
2416
2417define i1 @auto_gen_68_logical_fmf(double %a, double %b) {
2418; CHECK-LABEL: @auto_gen_68_logical_fmf(
2419; CHECK-NEXT:    ret i1 false
2420;
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
2425}
2426
2427define i1 @auto_gen_69(double %a, double %b) {
2428; CHECK-LABEL: @auto_gen_69(
2429; CHECK-NEXT:    ret i1 false
2430;
2431  %cmp = fcmp ult double %a, %b
2432  %cmp1 = fcmp oge double %a, %b
2433  %retval = and i1 %cmp, %cmp1
2434  ret i1 %retval
2435}
2436
2437define i1 @auto_gen_69_logical(double %a, double %b) {
2438; CHECK-LABEL: @auto_gen_69_logical(
2439; CHECK-NEXT:    ret i1 false
2440;
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
2445}
2446
2447define i1 @auto_gen_69_logical_fmf(double %a, double %b) {
2448; CHECK-LABEL: @auto_gen_69_logical_fmf(
2449; CHECK-NEXT:    ret i1 false
2450;
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
2455}
2456
2457define 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]]
2461;
2462  %cmp = fcmp ult double %a, %b
2463  %cmp1 = fcmp olt double %a, %b
2464  %retval = and i1 %cmp, %cmp1
2465  ret i1 %retval
2466}
2467
2468define 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]]
2472;
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
2477}
2478
2479define 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]]
2483;
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
2488}
2489
2490define 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]]
2494;
2495  %cmp = fcmp ult double %a, %b
2496  %cmp1 = fcmp ole double %a, %b
2497  %retval = and i1 %cmp, %cmp1
2498  ret i1 %retval
2499}
2500
2501define 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]]
2505;
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
2510}
2511
2512define 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]]
2516;
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
2521}
2522
2523define 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]]
2527;
2528  %cmp = fcmp ult double %a, %b
2529  %cmp1 = fcmp one double %a, %b
2530  %retval = and i1 %cmp, %cmp1
2531  ret i1 %retval
2532}
2533
2534define 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]]
2538;
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
2543}
2544
2545define 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]]
2549;
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
2554}
2555
2556define 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]]
2560;
2561  %cmp = fcmp ult double %a, %b
2562  %cmp1 = fcmp ord double %a, %b
2563  %retval = and i1 %cmp, %cmp1
2564  ret i1 %retval
2565}
2566
2567define 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]]
2571;
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
2576}
2577
2578define 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]]
2582;
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
2587}
2588
2589define 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]]
2593;
2594  %cmp = fcmp ult double %a, %b
2595  %cmp1 = fcmp ueq double %a, %b
2596  %retval = and i1 %cmp, %cmp1
2597  ret i1 %retval
2598}
2599
2600define 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]]
2604;
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
2609}
2610
2611define 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]]
2615;
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
2620}
2621
2622define 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]]
2626;
2627  %cmp = fcmp ult double %a, %b
2628  %cmp1 = fcmp ugt double %a, %b
2629  %retval = and i1 %cmp, %cmp1
2630  ret i1 %retval
2631}
2632
2633define 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]]
2637;
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
2642}
2643
2644define i1 @auto_gen_75_logical_fmf(double %a, double %b) {
2645; CHECK-LABEL: @auto_gen_75_logical_fmf(
2646; CHECK-NEXT:    ret i1 false
2647;
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
2652}
2653
2654define 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]]
2658;
2659  %cmp = fcmp ult double %a, %b
2660  %cmp1 = fcmp uge double %a, %b
2661  %retval = and i1 %cmp, %cmp1
2662  ret i1 %retval
2663}
2664
2665define 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]]
2669;
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
2674}
2675
2676define 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]]
2680;
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
2685}
2686
2687define 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]]
2691;
2692  %cmp = fcmp ult double %a, %b
2693  %cmp1 = fcmp ult double %a, %b
2694  %retval = and i1 %cmp, %cmp1
2695  ret i1 %retval
2696}
2697
2698define 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]]
2702;
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
2707}
2708
2709define 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]]
2713;
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
2718}
2719
2720define i1 @auto_gen_78(double %a, double %b) {
2721; CHECK-LABEL: @auto_gen_78(
2722; CHECK-NEXT:    ret i1 false
2723;
2724  %cmp = fcmp ule double %a, %b
2725  %cmp1 = fcmp false double %a, %b
2726  %retval = and i1 %cmp, %cmp1
2727  ret i1 %retval
2728}
2729
2730define i1 @auto_gen_78_logical(double %a, double %b) {
2731; CHECK-LABEL: @auto_gen_78_logical(
2732; CHECK-NEXT:    ret i1 false
2733;
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
2738}
2739
2740define i1 @auto_gen_78_logical_fmf(double %a, double %b) {
2741; CHECK-LABEL: @auto_gen_78_logical_fmf(
2742; CHECK-NEXT:    ret i1 false
2743;
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
2748}
2749
2750define 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]]
2754;
2755  %cmp = fcmp ule double %a, %b
2756  %cmp1 = fcmp oeq double %a, %b
2757  %retval = and i1 %cmp, %cmp1
2758  ret i1 %retval
2759}
2760
2761define 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]]
2765;
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
2770}
2771
2772define 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]]
2776;
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
2781}
2782
2783define i1 @auto_gen_80(double %a, double %b) {
2784; CHECK-LABEL: @auto_gen_80(
2785; CHECK-NEXT:    ret i1 false
2786;
2787  %cmp = fcmp ule double %a, %b
2788  %cmp1 = fcmp ogt double %a, %b
2789  %retval = and i1 %cmp, %cmp1
2790  ret i1 %retval
2791}
2792
2793define i1 @auto_gen_80_logical(double %a, double %b) {
2794; CHECK-LABEL: @auto_gen_80_logical(
2795; CHECK-NEXT:    ret i1 false
2796;
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
2801}
2802
2803define i1 @auto_gen_80_logical_fmf(double %a, double %b) {
2804; CHECK-LABEL: @auto_gen_80_logical_fmf(
2805; CHECK-NEXT:    ret i1 false
2806;
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
2811}
2812
2813define 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]]
2817;
2818  %cmp = fcmp ule double %a, %b
2819  %cmp1 = fcmp oge double %a, %b
2820  %retval = and i1 %cmp, %cmp1
2821  ret i1 %retval
2822}
2823
2824define 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]]
2828;
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
2833}
2834
2835define 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]]
2839;
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
2844}
2845
2846define 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]]
2850;
2851  %cmp = fcmp ule double %a, %b
2852  %cmp1 = fcmp olt double %a, %b
2853  %retval = and i1 %cmp, %cmp1
2854  ret i1 %retval
2855}
2856
2857define 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]]
2861;
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
2866}
2867
2868define 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]]
2872;
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
2877}
2878
2879define 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]]
2883;
2884  %cmp = fcmp ule double %a, %b
2885  %cmp1 = fcmp ole double %a, %b
2886  %retval = and i1 %cmp, %cmp1
2887  ret i1 %retval
2888}
2889
2890define 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]]
2894;
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
2899}
2900
2901define 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]]
2905;
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
2910}
2911
2912define 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]]
2916;
2917  %cmp = fcmp ule double %a, %b
2918  %cmp1 = fcmp one double %a, %b
2919  %retval = and i1 %cmp, %cmp1
2920  ret i1 %retval
2921}
2922
2923define 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]]
2927;
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
2932}
2933
2934define 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]]
2938;
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
2943}
2944
2945define 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]]
2949;
2950  %cmp = fcmp ule double %a, %b
2951  %cmp1 = fcmp ord double %a, %b
2952  %retval = and i1 %cmp, %cmp1
2953  ret i1 %retval
2954}
2955
2956define 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]]
2960;
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
2965}
2966
2967define 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]]
2971;
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
2976}
2977
2978define 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]]
2982;
2983  %cmp = fcmp ule double %a, %b
2984  %cmp1 = fcmp ueq double %a, %b
2985  %retval = and i1 %cmp, %cmp1
2986  ret i1 %retval
2987}
2988
2989define 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]]
2993;
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
2998}
2999
3000define 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]]
3004;
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
3009}
3010
3011define 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]]
3015;
3016  %cmp = fcmp ule double %a, %b
3017  %cmp1 = fcmp ugt double %a, %b
3018  %retval = and i1 %cmp, %cmp1
3019  ret i1 %retval
3020}
3021
3022define 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]]
3026;
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
3031}
3032
3033define i1 @auto_gen_87_logical_fmf(double %a, double %b) {
3034; CHECK-LABEL: @auto_gen_87_logical_fmf(
3035; CHECK-NEXT:    ret i1 false
3036;
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
3041}
3042
3043define 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]]
3047;
3048  %cmp = fcmp ule double %a, %b
3049  %cmp1 = fcmp uge double %a, %b
3050  %retval = and i1 %cmp, %cmp1
3051  ret i1 %retval
3052}
3053
3054define 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]]
3058;
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
3063}
3064
3065define 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]]
3069;
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
3074}
3075
3076define 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]]
3080;
3081  %cmp = fcmp ule double %a, %b
3082  %cmp1 = fcmp ult double %a, %b
3083  %retval = and i1 %cmp, %cmp1
3084  ret i1 %retval
3085}
3086
3087define 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]]
3091;
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
3096}
3097
3098define 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]]
3102;
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
3107}
3108
3109define 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]]
3113;
3114  %cmp = fcmp ule double %a, %b
3115  %cmp1 = fcmp ule double %a, %b
3116  %retval = and i1 %cmp, %cmp1
3117  ret i1 %retval
3118}
3119
3120define 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]]
3124;
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
3129}
3130
3131define 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]]
3135;
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
3140}
3141
3142define i1 @auto_gen_91(double %a, double %b) {
3143; CHECK-LABEL: @auto_gen_91(
3144; CHECK-NEXT:    ret i1 false
3145;
3146  %cmp = fcmp une double %a, %b
3147  %cmp1 = fcmp false double %a, %b
3148  %retval = and i1 %cmp, %cmp1
3149  ret i1 %retval
3150}
3151
3152define i1 @auto_gen_91_logical(double %a, double %b) {
3153; CHECK-LABEL: @auto_gen_91_logical(
3154; CHECK-NEXT:    ret i1 false
3155;
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
3160}
3161
3162define i1 @auto_gen_91_logical_fmf(double %a, double %b) {
3163; CHECK-LABEL: @auto_gen_91_logical_fmf(
3164; CHECK-NEXT:    ret i1 false
3165;
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
3170}
3171
3172define i1 @auto_gen_92(double %a, double %b) {
3173; CHECK-LABEL: @auto_gen_92(
3174; CHECK-NEXT:    ret i1 false
3175;
3176  %cmp = fcmp une double %a, %b
3177  %cmp1 = fcmp oeq double %a, %b
3178  %retval = and i1 %cmp, %cmp1
3179  ret i1 %retval
3180}
3181
3182define i1 @auto_gen_92_logical(double %a, double %b) {
3183; CHECK-LABEL: @auto_gen_92_logical(
3184; CHECK-NEXT:    ret i1 false
3185;
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
3190}
3191
3192define i1 @auto_gen_92_logical_fmf(double %a, double %b) {
3193; CHECK-LABEL: @auto_gen_92_logical_fmf(
3194; CHECK-NEXT:    ret i1 false
3195;
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
3200}
3201
3202define 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]]
3206;
3207  %cmp = fcmp une double %a, %b
3208  %cmp1 = fcmp ogt double %a, %b
3209  %retval = and i1 %cmp, %cmp1
3210  ret i1 %retval
3211}
3212
3213define 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]]
3217;
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
3222}
3223
3224define 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]]
3228;
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
3233}
3234
3235define 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]]
3239;
3240  %cmp = fcmp une double %a, %b
3241  %cmp1 = fcmp oge double %a, %b
3242  %retval = and i1 %cmp, %cmp1
3243  ret i1 %retval
3244}
3245
3246define 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]]
3250;
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
3255}
3256
3257define 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]]
3261;
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
3266}
3267
3268define 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]]
3272;
3273  %cmp = fcmp une double %a, %b
3274  %cmp1 = fcmp olt double %a, %b
3275  %retval = and i1 %cmp, %cmp1
3276  ret i1 %retval
3277}
3278
3279define 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]]
3283;
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
3288}
3289
3290define 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]]
3294;
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
3299}
3300
3301define 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]]
3305;
3306  %cmp = fcmp une double %a, %b
3307  %cmp1 = fcmp ole double %a, %b
3308  %retval = and i1 %cmp, %cmp1
3309  ret i1 %retval
3310}
3311
3312define 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]]
3316;
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
3321}
3322
3323define 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]]
3327;
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
3332}
3333
3334define 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]]
3338;
3339  %cmp = fcmp une double %a, %b
3340  %cmp1 = fcmp one double %a, %b
3341  %retval = and i1 %cmp, %cmp1
3342  ret i1 %retval
3343}
3344
3345define 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]]
3349;
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
3354}
3355
3356define 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]]
3360;
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
3365}
3366
3367define 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]]
3371;
3372  %cmp = fcmp une double %a, %b
3373  %cmp1 = fcmp ord double %a, %b
3374  %retval = and i1 %cmp, %cmp1
3375  ret i1 %retval
3376}
3377
3378define 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]]
3382;
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
3387}
3388
3389define 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]]
3393;
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
3398}
3399
3400define 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]]
3404;
3405  %cmp = fcmp une double %a, %b
3406  %cmp1 = fcmp ueq double %a, %b
3407  %retval = and i1 %cmp, %cmp1
3408  ret i1 %retval
3409}
3410
3411define 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]]
3415;
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
3420}
3421
3422define i1 @auto_gen_99_logical_fmf(double %a, double %b) {
3423; CHECK-LABEL: @auto_gen_99_logical_fmf(
3424; CHECK-NEXT:    ret i1 false
3425;
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
3430}
3431
3432define 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]]
3436;
3437  %cmp = fcmp une double %a, %b
3438  %cmp1 = fcmp ugt double %a, %b
3439  %retval = and i1 %cmp, %cmp1
3440  ret i1 %retval
3441}
3442
3443define 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]]
3447;
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
3452}
3453
3454define 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]]
3458;
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
3463}
3464
3465define 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]]
3469;
3470  %cmp = fcmp une double %a, %b
3471  %cmp1 = fcmp uge double %a, %b
3472  %retval = and i1 %cmp, %cmp1
3473  ret i1 %retval
3474}
3475
3476define 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]]
3480;
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
3485}
3486
3487define 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]]
3491;
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
3496}
3497
3498define 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]]
3502;
3503  %cmp = fcmp une double %a, %b
3504  %cmp1 = fcmp ult double %a, %b
3505  %retval = and i1 %cmp, %cmp1
3506  ret i1 %retval
3507}
3508
3509define 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]]
3513;
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
3518}
3519
3520define 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]]
3524;
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
3529}
3530
3531define 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]]
3535;
3536  %cmp = fcmp une double %a, %b
3537  %cmp1 = fcmp ule double %a, %b
3538  %retval = and i1 %cmp, %cmp1
3539  ret i1 %retval
3540}
3541
3542define 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]]
3546;
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
3551}
3552
3553define 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]]
3557;
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
3562}
3563
3564define 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]]
3568;
3569  %cmp = fcmp une double %a, %b
3570  %cmp1 = fcmp une double %a, %b
3571  %retval = and i1 %cmp, %cmp1
3572  ret i1 %retval
3573}
3574
3575define 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]]
3579;
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
3584}
3585
3586define 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]]
3590;
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
3595}
3596
3597define i1 @auto_gen_105(double %a, double %b) {
3598; CHECK-LABEL: @auto_gen_105(
3599; CHECK-NEXT:    ret i1 false
3600;
3601  %cmp = fcmp uno double %a, %b
3602  %cmp1 = fcmp false double %a, %b
3603  %retval = and i1 %cmp, %cmp1
3604  ret i1 %retval
3605}
3606
3607define i1 @auto_gen_105_logical(double %a, double %b) {
3608; CHECK-LABEL: @auto_gen_105_logical(
3609; CHECK-NEXT:    ret i1 false
3610;
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
3615}
3616
3617define i1 @auto_gen_105_logical_fmf(double %a, double %b) {
3618; CHECK-LABEL: @auto_gen_105_logical_fmf(
3619; CHECK-NEXT:    ret i1 false
3620;
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
3625}
3626
3627define i1 @auto_gen_106(double %a, double %b) {
3628; CHECK-LABEL: @auto_gen_106(
3629; CHECK-NEXT:    ret i1 false
3630;
3631  %cmp = fcmp uno double %a, %b
3632  %cmp1 = fcmp oeq double %a, %b
3633  %retval = and i1 %cmp, %cmp1
3634  ret i1 %retval
3635}
3636
3637define i1 @auto_gen_106_logical(double %a, double %b) {
3638; CHECK-LABEL: @auto_gen_106_logical(
3639; CHECK-NEXT:    ret i1 false
3640;
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
3645}
3646
3647define i1 @auto_gen_106_logical_fmf(double %a, double %b) {
3648; CHECK-LABEL: @auto_gen_106_logical_fmf(
3649; CHECK-NEXT:    ret i1 false
3650;
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
3655}
3656
3657define i1 @auto_gen_107(double %a, double %b) {
3658; CHECK-LABEL: @auto_gen_107(
3659; CHECK-NEXT:    ret i1 false
3660;
3661  %cmp = fcmp uno double %a, %b
3662  %cmp1 = fcmp ogt double %a, %b
3663  %retval = and i1 %cmp, %cmp1
3664  ret i1 %retval
3665}
3666
3667define i1 @auto_gen_107_logical(double %a, double %b) {
3668; CHECK-LABEL: @auto_gen_107_logical(
3669; CHECK-NEXT:    ret i1 false
3670;
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
3675}
3676
3677define i1 @auto_gen_107_logical_fmf(double %a, double %b) {
3678; CHECK-LABEL: @auto_gen_107_logical_fmf(
3679; CHECK-NEXT:    ret i1 false
3680;
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
3685}
3686
3687define i1 @auto_gen_108(double %a, double %b) {
3688; CHECK-LABEL: @auto_gen_108(
3689; CHECK-NEXT:    ret i1 false
3690;
3691  %cmp = fcmp uno double %a, %b
3692  %cmp1 = fcmp oge double %a, %b
3693  %retval = and i1 %cmp, %cmp1
3694  ret i1 %retval
3695}
3696
3697define i1 @auto_gen_108_logical(double %a, double %b) {
3698; CHECK-LABEL: @auto_gen_108_logical(
3699; CHECK-NEXT:    ret i1 false
3700;
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
3705}
3706
3707define i1 @auto_gen_108_logical_fmf(double %a, double %b) {
3708; CHECK-LABEL: @auto_gen_108_logical_fmf(
3709; CHECK-NEXT:    ret i1 false
3710;
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
3715}
3716
3717define i1 @auto_gen_109(double %a, double %b) {
3718; CHECK-LABEL: @auto_gen_109(
3719; CHECK-NEXT:    ret i1 false
3720;
3721  %cmp = fcmp uno double %a, %b
3722  %cmp1 = fcmp olt double %a, %b
3723  %retval = and i1 %cmp, %cmp1
3724  ret i1 %retval
3725}
3726
3727define i1 @auto_gen_109_logical(double %a, double %b) {
3728; CHECK-LABEL: @auto_gen_109_logical(
3729; CHECK-NEXT:    ret i1 false
3730;
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
3735}
3736
3737define i1 @auto_gen_109_logical_fmf(double %a, double %b) {
3738; CHECK-LABEL: @auto_gen_109_logical_fmf(
3739; CHECK-NEXT:    ret i1 false
3740;
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
3745}
3746
3747define i1 @auto_gen_110(double %a, double %b) {
3748; CHECK-LABEL: @auto_gen_110(
3749; CHECK-NEXT:    ret i1 false
3750;
3751  %cmp = fcmp uno double %a, %b
3752  %cmp1 = fcmp ole double %a, %b
3753  %retval = and i1 %cmp, %cmp1
3754  ret i1 %retval
3755}
3756
3757define i1 @auto_gen_110_logical(double %a, double %b) {
3758; CHECK-LABEL: @auto_gen_110_logical(
3759; CHECK-NEXT:    ret i1 false
3760;
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
3765}
3766
3767define i1 @auto_gen_110_logical_fmf(double %a, double %b) {
3768; CHECK-LABEL: @auto_gen_110_logical_fmf(
3769; CHECK-NEXT:    ret i1 false
3770;
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
3775}
3776
3777define i1 @auto_gen_111(double %a, double %b) {
3778; CHECK-LABEL: @auto_gen_111(
3779; CHECK-NEXT:    ret i1 false
3780;
3781  %cmp = fcmp uno double %a, %b
3782  %cmp1 = fcmp one double %a, %b
3783  %retval = and i1 %cmp, %cmp1
3784  ret i1 %retval
3785}
3786
3787define i1 @auto_gen_111_logical(double %a, double %b) {
3788; CHECK-LABEL: @auto_gen_111_logical(
3789; CHECK-NEXT:    ret i1 false
3790;
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
3795}
3796
3797define i1 @auto_gen_111_logical_fmf(double %a, double %b) {
3798; CHECK-LABEL: @auto_gen_111_logical_fmf(
3799; CHECK-NEXT:    ret i1 false
3800;
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
3805}
3806
3807define i1 @auto_gen_112(double %a, double %b) {
3808; CHECK-LABEL: @auto_gen_112(
3809; CHECK-NEXT:    ret i1 false
3810;
3811  %cmp = fcmp uno double %a, %b
3812  %cmp1 = fcmp ord double %a, %b
3813  %retval = and i1 %cmp, %cmp1
3814  ret i1 %retval
3815}
3816
3817define i1 @auto_gen_112_logical(double %a, double %b) {
3818; CHECK-LABEL: @auto_gen_112_logical(
3819; CHECK-NEXT:    ret i1 false
3820;
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
3825}
3826
3827define 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]]
3831;
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
3836}
3837
3838define 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]]
3842;
3843  %cmp = fcmp uno double %a, %b
3844  %cmp1 = fcmp ueq double %a, %b
3845  %retval = and i1 %cmp, %cmp1
3846  ret i1 %retval
3847}
3848
3849define 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]]
3853;
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
3858}
3859
3860define i1 @auto_gen_113_logical_fmf(double %a, double %b) {
3861; CHECK-LABEL: @auto_gen_113_logical_fmf(
3862; CHECK-NEXT:    ret i1 false
3863;
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
3868}
3869
3870define 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]]
3874;
3875  %cmp = fcmp uno double %a, %b
3876  %cmp1 = fcmp ugt double %a, %b
3877  %retval = and i1 %cmp, %cmp1
3878  ret i1 %retval
3879}
3880
3881define 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]]
3885;
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
3890}
3891
3892define 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]]
3896;
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
3901}
3902
3903define 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]]
3907;
3908  %cmp = fcmp uno double %a, %b
3909  %cmp1 = fcmp uge double %a, %b
3910  %retval = and i1 %cmp, %cmp1
3911  ret i1 %retval
3912}
3913
3914define 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]]
3918;
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
3923}
3924
3925define i1 @auto_gen_115_logical_fmf(double %a, double %b) {
3926; CHECK-LABEL: @auto_gen_115_logical_fmf(
3927; CHECK-NEXT:    ret i1 false
3928;
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
3933}
3934
3935define 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]]
3939;
3940  %cmp = fcmp uno double %a, %b
3941  %cmp1 = fcmp ult double %a, %b
3942  %retval = and i1 %cmp, %cmp1
3943  ret i1 %retval
3944}
3945
3946define 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]]
3950;
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
3955}
3956
3957define 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]]
3961;
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
3966}
3967
3968define 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]]
3972;
3973  %cmp = fcmp uno double %a, %b
3974  %cmp1 = fcmp ule double %a, %b
3975  %retval = and i1 %cmp, %cmp1
3976  ret i1 %retval
3977}
3978
3979define 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]]
3983;
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
3988}
3989
3990define i1 @auto_gen_117_logical_fmf(double %a, double %b) {
3991; CHECK-LABEL: @auto_gen_117_logical_fmf(
3992; CHECK-NEXT:    ret i1 false
3993;
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
3998}
3999
4000define 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]]
4004;
4005  %cmp = fcmp uno double %a, %b
4006  %cmp1 = fcmp une double %a, %b
4007  %retval = and i1 %cmp, %cmp1
4008  ret i1 %retval
4009}
4010
4011define 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]]
4015;
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
4020}
4021
4022define 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]]
4026;
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
4031}
4032
4033define 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]]
4037;
4038  %cmp = fcmp uno double %a, %b
4039  %cmp1 = fcmp uno double %a, %b
4040  %retval = and i1 %cmp, %cmp1
4041  ret i1 %retval
4042}
4043
4044define 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]]
4048;
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
4053}
4054
4055define i1 @auto_gen_119_logical_fmf(double %a, double %b) {
4056; CHECK-LABEL: @auto_gen_119_logical_fmf(
4057; CHECK-NEXT:    ret i1 false
4058;
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
4063}
4064
4065define i1 @auto_gen_120(double %a, double %b) {
4066; CHECK-LABEL: @auto_gen_120(
4067; CHECK-NEXT:    ret i1 false
4068;
4069  %cmp = fcmp true double %a, %b
4070  %cmp1 = fcmp false double %a, %b
4071  %retval = and i1 %cmp, %cmp1
4072  ret i1 %retval
4073}
4074
4075define i1 @auto_gen_120_logical(double %a, double %b) {
4076; CHECK-LABEL: @auto_gen_120_logical(
4077; CHECK-NEXT:    ret i1 false
4078;
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
4083}
4084
4085define i1 @auto_gen_120_logical_fmf(double %a, double %b) {
4086; CHECK-LABEL: @auto_gen_120_logical_fmf(
4087; CHECK-NEXT:    ret i1 false
4088;
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
4093}
4094
4095define 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]]
4099;
4100  %cmp = fcmp true double %a, %b
4101  %cmp1 = fcmp oeq double %a, %b
4102  %retval = and i1 %cmp, %cmp1
4103  ret i1 %retval
4104}
4105
4106define 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]]
4110;
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
4115}
4116
4117define 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]]
4121;
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
4126}
4127
4128define 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]]
4132;
4133  %cmp = fcmp true double %a, %b
4134  %cmp1 = fcmp ogt double %a, %b
4135  %retval = and i1 %cmp, %cmp1
4136  ret i1 %retval
4137}
4138
4139define 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]]
4143;
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
4148}
4149
4150define 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]]
4154;
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
4159}
4160
4161define 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]]
4165;
4166  %cmp = fcmp true double %a, %b
4167  %cmp1 = fcmp oge double %a, %b
4168  %retval = and i1 %cmp, %cmp1
4169  ret i1 %retval
4170}
4171
4172define 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]]
4176;
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
4181}
4182
4183define 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]]
4187;
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
4192}
4193
4194define 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]]
4198;
4199  %cmp = fcmp true double %a, %b
4200  %cmp1 = fcmp olt double %a, %b
4201  %retval = and i1 %cmp, %cmp1
4202  ret i1 %retval
4203}
4204
4205define 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]]
4209;
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
4214}
4215
4216define 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]]
4220;
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
4225}
4226
4227define 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]]
4231;
4232  %cmp = fcmp true double %a, %b
4233  %cmp1 = fcmp ole double %a, %b
4234  %retval = and i1 %cmp, %cmp1
4235  ret i1 %retval
4236}
4237
4238define 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]]
4242;
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
4247}
4248
4249define 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]]
4253;
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
4258}
4259
4260define 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]]
4264;
4265  %cmp = fcmp true double %a, %b
4266  %cmp1 = fcmp one double %a, %b
4267  %retval = and i1 %cmp, %cmp1
4268  ret i1 %retval
4269}
4270
4271define 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]]
4275;
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
4280}
4281
4282define 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]]
4286;
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
4291}
4292
4293define 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]]
4297;
4298  %cmp = fcmp true double %a, %b
4299  %cmp1 = fcmp ord double %a, %b
4300  %retval = and i1 %cmp, %cmp1
4301  ret i1 %retval
4302}
4303
4304define 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]]
4308;
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
4313}
4314
4315define i1 @auto_gen_127_logical_fmf(double %a, double %b) {
4316; CHECK-LABEL: @auto_gen_127_logical_fmf(
4317; CHECK-NEXT:    ret i1 true
4318;
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
4323}
4324
4325define 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]]
4329;
4330  %cmp = fcmp true double %a, %b
4331  %cmp1 = fcmp ueq double %a, %b
4332  %retval = and i1 %cmp, %cmp1
4333  ret i1 %retval
4334}
4335
4336define 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]]
4340;
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
4345}
4346
4347define 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]]
4351;
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
4356}
4357
4358define 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]]
4362;
4363  %cmp = fcmp true double %a, %b
4364  %cmp1 = fcmp ugt double %a, %b
4365  %retval = and i1 %cmp, %cmp1
4366  ret i1 %retval
4367}
4368
4369define 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]]
4373;
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
4378}
4379
4380define 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]]
4384;
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
4389}
4390
4391define 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]]
4395;
4396  %cmp = fcmp true double %a, %b
4397  %cmp1 = fcmp uge double %a, %b
4398  %retval = and i1 %cmp, %cmp1
4399  ret i1 %retval
4400}
4401
4402define 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]]
4406;
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
4411}
4412
4413define 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]]
4417;
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
4422}
4423
4424define 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]]
4428;
4429  %cmp = fcmp true double %a, %b
4430  %cmp1 = fcmp ult double %a, %b
4431  %retval = and i1 %cmp, %cmp1
4432  ret i1 %retval
4433}
4434
4435define 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]]
4439;
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
4444}
4445
4446define 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]]
4450;
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
4455}
4456
4457define 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]]
4461;
4462  %cmp = fcmp true double %a, %b
4463  %cmp1 = fcmp ule double %a, %b
4464  %retval = and i1 %cmp, %cmp1
4465  ret i1 %retval
4466}
4467
4468define 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]]
4472;
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
4477}
4478
4479define 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]]
4483;
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
4488}
4489
4490define 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]]
4494;
4495  %cmp = fcmp true double %a, %b
4496  %cmp1 = fcmp une double %a, %b
4497  %retval = and i1 %cmp, %cmp1
4498  ret i1 %retval
4499}
4500
4501define 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]]
4505;
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
4510}
4511
4512define 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]]
4516;
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
4521}
4522
4523define 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]]
4527;
4528  %cmp = fcmp true double %a, %b
4529  %cmp1 = fcmp uno double %a, %b
4530  %retval = and i1 %cmp, %cmp1
4531  ret i1 %retval
4532}
4533
4534define 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]]
4538;
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
4543}
4544
4545define i1 @auto_gen_134_logical_fmf(double %a, double %b) {
4546; CHECK-LABEL: @auto_gen_134_logical_fmf(
4547; CHECK-NEXT:    ret i1 false
4548;
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
4553}
4554
4555define i1 @auto_gen_135(double %a, double %b) {
4556; CHECK-LABEL: @auto_gen_135(
4557; CHECK-NEXT:    ret i1 true
4558;
4559  %cmp = fcmp true double %a, %b
4560  %cmp1 = fcmp true double %a, %b
4561  %retval = and i1 %cmp, %cmp1
4562  ret i1 %retval
4563}
4564
4565define i1 @auto_gen_135_logical(double %a, double %b) {
4566; CHECK-LABEL: @auto_gen_135_logical(
4567; CHECK-NEXT:    ret i1 true
4568;
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
4573}
4574
4575define i1 @auto_gen_135_logical_fmf(double %a, double %b) {
4576; CHECK-LABEL: @auto_gen_135_logical_fmf(
4577; CHECK-NEXT:    ret i1 true
4578;
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
4583}
4584
4585define 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]]
4589;
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
4594}
4595
4596define 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]]
4600;
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
4605}
4606
4607define 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]]
4611;
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
4616}
4617
4618define 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]]
4622;
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
4627}
4628
4629; Clang used to emit this pattern in __builtin_isnormal
4630; https://alive2.llvm.org/ce/z/8sw9vi
4631define 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]]
4636;
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
4642}
4643
4644define <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]]
4649;
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
4655}
4656
4657define 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]]
4662;
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
4668}
4669
4670define 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]]
4675;
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
4681}
4682
4683define 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]]
4688;
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
4694}
4695
4696define 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]]
4700;
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
4705}
4706
4707define 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]]
4712;
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
4718}
4719
4720; ugt -> ogt
4721define i1 @clang_builtin_isnormal_inf_check_ugt(half %x) {
4722; CHECK-LABEL: @clang_builtin_isnormal_inf_check_ugt(
4723; CHECK-NEXT:    ret i1 false
4724;
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
4730}
4731
4732; ult -> olt
4733define 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]]
4738;
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
4744}
4745
4746; ule -> ole
4747define 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]]
4751;
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
4757}
4758
4759; ueq -> oeq
4760define 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]]
4765;
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
4771}
4772
4773; une -> ole
4774define 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]]
4779;
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
4785}
4786
4787; uno -> ord
4788define i1 @clang_builtin_isnormal_inf_check_uno(half %x) {
4789; CHECK-LABEL: @clang_builtin_isnormal_inf_check_uno(
4790; CHECK-NEXT:    ret i1 false
4791;
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
4797}
4798
4799; ord -> ord
4800define 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]]
4804;
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
4810}
4811
4812define 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]]
4817;
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
4823}
4824
4825define 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]]
4830;
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
4836}
4837
4838define 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]]
4842;
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
4848}
4849
4850define 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]]
4855;
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
4861}
4862
4863define 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]]
4868;
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
4874}
4875
4876; Negative test
4877define 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]]
4881;
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
4887}
4888
4889define 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]]
4893;
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
4899}
4900
4901define 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]]
4905;
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
4911}
4912
4913; Negative test
4914define 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]]
4921;
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
4927}
4928
4929define 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]]
4934;
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
4940}
4941
4942define 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]]
4947;
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
4953}
4954
4955define 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]]
4960;
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
4966}
4967
4968define 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]]
4972;
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
4978}
4979
4980define 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]]
4985;
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
4991}
4992
4993define 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]]
4998;
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
5004}
5005
5006define 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]]
5011;
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
5017}
5018
5019define 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]]
5024;
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
5030}
5031
5032define 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]]
5037;
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
5043}
5044
5045define 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]]
5050;
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
5056}
5057
5058define 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]]
5063;
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
5069}
5070
5071define 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]]
5076;
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
5082}
5083
5084define 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]]
5089;
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
5095}
5096
5097declare half @llvm.fabs.f16(half)
5098declare <2 x half> @llvm.fabs.v2f16(<2 x half>)
5099declare half @llvm.copysign.f16(half, half)
5100