xref: /llvm-project/llvm/test/CodeGen/X86/fast-isel-fcmp.ll (revision cca49663a56d90f6773f140269940d606aa61430)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=SDAG
3; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=FAST,FAST_NOAVX
4; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx | FileCheck %s --check-prefixes=FAST,FAST_AVX
5; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx512f | FileCheck %s --check-prefixes=FAST,FAST_AVX
6
7define zeroext i1 @fcmp_oeq(float %x, float %y) {
8; SDAG-LABEL: fcmp_oeq:
9; SDAG:       ## %bb.0:
10; SDAG-NEXT:    cmpeqss %xmm1, %xmm0
11; SDAG-NEXT:    movd %xmm0, %eax
12; SDAG-NEXT:    andl $1, %eax
13; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
14; SDAG-NEXT:    retq
15;
16; FAST_NOAVX-LABEL: fcmp_oeq:
17; FAST_NOAVX:       ## %bb.0:
18; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
19; FAST_NOAVX-NEXT:    sete %cl
20; FAST_NOAVX-NEXT:    setnp %al
21; FAST_NOAVX-NEXT:    andb %cl, %al
22; FAST_NOAVX-NEXT:    andb $1, %al
23; FAST_NOAVX-NEXT:    retq
24;
25; FAST_AVX-LABEL: fcmp_oeq:
26; FAST_AVX:       ## %bb.0:
27; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
28; FAST_AVX-NEXT:    sete %cl
29; FAST_AVX-NEXT:    setnp %al
30; FAST_AVX-NEXT:    andb %cl, %al
31; FAST_AVX-NEXT:    andb $1, %al
32; FAST_AVX-NEXT:    retq
33  %1 = fcmp oeq float %x, %y
34  ret i1 %1
35}
36
37define zeroext i1 @fcmp_ogt(float %x, float %y) {
38; SDAG-LABEL: fcmp_ogt:
39; SDAG:       ## %bb.0:
40; SDAG-NEXT:    ucomiss %xmm1, %xmm0
41; SDAG-NEXT:    seta %al
42; SDAG-NEXT:    retq
43;
44; FAST_NOAVX-LABEL: fcmp_ogt:
45; FAST_NOAVX:       ## %bb.0:
46; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
47; FAST_NOAVX-NEXT:    seta %al
48; FAST_NOAVX-NEXT:    andb $1, %al
49; FAST_NOAVX-NEXT:    retq
50;
51; FAST_AVX-LABEL: fcmp_ogt:
52; FAST_AVX:       ## %bb.0:
53; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
54; FAST_AVX-NEXT:    seta %al
55; FAST_AVX-NEXT:    andb $1, %al
56; FAST_AVX-NEXT:    retq
57  %1 = fcmp ogt float %x, %y
58  ret i1 %1
59}
60
61define zeroext i1 @fcmp_oge(float %x, float %y) {
62; SDAG-LABEL: fcmp_oge:
63; SDAG:       ## %bb.0:
64; SDAG-NEXT:    ucomiss %xmm1, %xmm0
65; SDAG-NEXT:    setae %al
66; SDAG-NEXT:    retq
67;
68; FAST_NOAVX-LABEL: fcmp_oge:
69; FAST_NOAVX:       ## %bb.0:
70; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
71; FAST_NOAVX-NEXT:    setae %al
72; FAST_NOAVX-NEXT:    andb $1, %al
73; FAST_NOAVX-NEXT:    retq
74;
75; FAST_AVX-LABEL: fcmp_oge:
76; FAST_AVX:       ## %bb.0:
77; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
78; FAST_AVX-NEXT:    setae %al
79; FAST_AVX-NEXT:    andb $1, %al
80; FAST_AVX-NEXT:    retq
81  %1 = fcmp oge float %x, %y
82  ret i1 %1
83}
84
85define zeroext i1 @fcmp_olt(float %x, float %y) {
86; SDAG-LABEL: fcmp_olt:
87; SDAG:       ## %bb.0:
88; SDAG-NEXT:    ucomiss %xmm0, %xmm1
89; SDAG-NEXT:    seta %al
90; SDAG-NEXT:    retq
91;
92; FAST_NOAVX-LABEL: fcmp_olt:
93; FAST_NOAVX:       ## %bb.0:
94; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
95; FAST_NOAVX-NEXT:    seta %al
96; FAST_NOAVX-NEXT:    andb $1, %al
97; FAST_NOAVX-NEXT:    retq
98;
99; FAST_AVX-LABEL: fcmp_olt:
100; FAST_AVX:       ## %bb.0:
101; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
102; FAST_AVX-NEXT:    seta %al
103; FAST_AVX-NEXT:    andb $1, %al
104; FAST_AVX-NEXT:    retq
105  %1 = fcmp olt float %x, %y
106  ret i1 %1
107}
108
109define zeroext i1 @fcmp_ole(float %x, float %y) {
110; SDAG-LABEL: fcmp_ole:
111; SDAG:       ## %bb.0:
112; SDAG-NEXT:    ucomiss %xmm0, %xmm1
113; SDAG-NEXT:    setae %al
114; SDAG-NEXT:    retq
115;
116; FAST_NOAVX-LABEL: fcmp_ole:
117; FAST_NOAVX:       ## %bb.0:
118; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
119; FAST_NOAVX-NEXT:    setae %al
120; FAST_NOAVX-NEXT:    andb $1, %al
121; FAST_NOAVX-NEXT:    retq
122;
123; FAST_AVX-LABEL: fcmp_ole:
124; FAST_AVX:       ## %bb.0:
125; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
126; FAST_AVX-NEXT:    setae %al
127; FAST_AVX-NEXT:    andb $1, %al
128; FAST_AVX-NEXT:    retq
129  %1 = fcmp ole float %x, %y
130  ret i1 %1
131}
132
133define zeroext i1 @fcmp_one(float %x, float %y) {
134; SDAG-LABEL: fcmp_one:
135; SDAG:       ## %bb.0:
136; SDAG-NEXT:    ucomiss %xmm1, %xmm0
137; SDAG-NEXT:    setne %al
138; SDAG-NEXT:    retq
139;
140; FAST_NOAVX-LABEL: fcmp_one:
141; FAST_NOAVX:       ## %bb.0:
142; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
143; FAST_NOAVX-NEXT:    setne %al
144; FAST_NOAVX-NEXT:    andb $1, %al
145; FAST_NOAVX-NEXT:    retq
146;
147; FAST_AVX-LABEL: fcmp_one:
148; FAST_AVX:       ## %bb.0:
149; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
150; FAST_AVX-NEXT:    setne %al
151; FAST_AVX-NEXT:    andb $1, %al
152; FAST_AVX-NEXT:    retq
153  %1 = fcmp one float %x, %y
154  ret i1 %1
155}
156
157define zeroext i1 @fcmp_ord(float %x, float %y) {
158; SDAG-LABEL: fcmp_ord:
159; SDAG:       ## %bb.0:
160; SDAG-NEXT:    ucomiss %xmm1, %xmm0
161; SDAG-NEXT:    setnp %al
162; SDAG-NEXT:    retq
163;
164; FAST_NOAVX-LABEL: fcmp_ord:
165; FAST_NOAVX:       ## %bb.0:
166; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
167; FAST_NOAVX-NEXT:    setnp %al
168; FAST_NOAVX-NEXT:    andb $1, %al
169; FAST_NOAVX-NEXT:    retq
170;
171; FAST_AVX-LABEL: fcmp_ord:
172; FAST_AVX:       ## %bb.0:
173; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
174; FAST_AVX-NEXT:    setnp %al
175; FAST_AVX-NEXT:    andb $1, %al
176; FAST_AVX-NEXT:    retq
177  %1 = fcmp ord float %x, %y
178  ret i1 %1
179}
180
181define zeroext i1 @fcmp_uno(float %x, float %y) {
182; SDAG-LABEL: fcmp_uno:
183; SDAG:       ## %bb.0:
184; SDAG-NEXT:    ucomiss %xmm1, %xmm0
185; SDAG-NEXT:    setp %al
186; SDAG-NEXT:    retq
187;
188; FAST_NOAVX-LABEL: fcmp_uno:
189; FAST_NOAVX:       ## %bb.0:
190; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
191; FAST_NOAVX-NEXT:    setp %al
192; FAST_NOAVX-NEXT:    andb $1, %al
193; FAST_NOAVX-NEXT:    retq
194;
195; FAST_AVX-LABEL: fcmp_uno:
196; FAST_AVX:       ## %bb.0:
197; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
198; FAST_AVX-NEXT:    setp %al
199; FAST_AVX-NEXT:    andb $1, %al
200; FAST_AVX-NEXT:    retq
201  %1 = fcmp uno float %x, %y
202  ret i1 %1
203}
204
205define zeroext i1 @fcmp_ueq(float %x, float %y) {
206; SDAG-LABEL: fcmp_ueq:
207; SDAG:       ## %bb.0:
208; SDAG-NEXT:    ucomiss %xmm1, %xmm0
209; SDAG-NEXT:    sete %al
210; SDAG-NEXT:    retq
211;
212; FAST_NOAVX-LABEL: fcmp_ueq:
213; FAST_NOAVX:       ## %bb.0:
214; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
215; FAST_NOAVX-NEXT:    sete %al
216; FAST_NOAVX-NEXT:    andb $1, %al
217; FAST_NOAVX-NEXT:    retq
218;
219; FAST_AVX-LABEL: fcmp_ueq:
220; FAST_AVX:       ## %bb.0:
221; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
222; FAST_AVX-NEXT:    sete %al
223; FAST_AVX-NEXT:    andb $1, %al
224; FAST_AVX-NEXT:    retq
225  %1 = fcmp ueq float %x, %y
226  ret i1 %1
227}
228
229define zeroext i1 @fcmp_ugt(float %x, float %y) {
230; SDAG-LABEL: fcmp_ugt:
231; SDAG:       ## %bb.0:
232; SDAG-NEXT:    ucomiss %xmm0, %xmm1
233; SDAG-NEXT:    setb %al
234; SDAG-NEXT:    retq
235;
236; FAST_NOAVX-LABEL: fcmp_ugt:
237; FAST_NOAVX:       ## %bb.0:
238; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
239; FAST_NOAVX-NEXT:    setb %al
240; FAST_NOAVX-NEXT:    andb $1, %al
241; FAST_NOAVX-NEXT:    retq
242;
243; FAST_AVX-LABEL: fcmp_ugt:
244; FAST_AVX:       ## %bb.0:
245; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
246; FAST_AVX-NEXT:    setb %al
247; FAST_AVX-NEXT:    andb $1, %al
248; FAST_AVX-NEXT:    retq
249  %1 = fcmp ugt float %x, %y
250  ret i1 %1
251}
252
253define zeroext i1 @fcmp_uge(float %x, float %y) {
254; SDAG-LABEL: fcmp_uge:
255; SDAG:       ## %bb.0:
256; SDAG-NEXT:    ucomiss %xmm0, %xmm1
257; SDAG-NEXT:    setbe %al
258; SDAG-NEXT:    retq
259;
260; FAST_NOAVX-LABEL: fcmp_uge:
261; FAST_NOAVX:       ## %bb.0:
262; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
263; FAST_NOAVX-NEXT:    setbe %al
264; FAST_NOAVX-NEXT:    andb $1, %al
265; FAST_NOAVX-NEXT:    retq
266;
267; FAST_AVX-LABEL: fcmp_uge:
268; FAST_AVX:       ## %bb.0:
269; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
270; FAST_AVX-NEXT:    setbe %al
271; FAST_AVX-NEXT:    andb $1, %al
272; FAST_AVX-NEXT:    retq
273  %1 = fcmp uge float %x, %y
274  ret i1 %1
275}
276
277define zeroext i1 @fcmp_ult(float %x, float %y) {
278; SDAG-LABEL: fcmp_ult:
279; SDAG:       ## %bb.0:
280; SDAG-NEXT:    ucomiss %xmm1, %xmm0
281; SDAG-NEXT:    setb %al
282; SDAG-NEXT:    retq
283;
284; FAST_NOAVX-LABEL: fcmp_ult:
285; FAST_NOAVX:       ## %bb.0:
286; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
287; FAST_NOAVX-NEXT:    setb %al
288; FAST_NOAVX-NEXT:    andb $1, %al
289; FAST_NOAVX-NEXT:    retq
290;
291; FAST_AVX-LABEL: fcmp_ult:
292; FAST_AVX:       ## %bb.0:
293; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
294; FAST_AVX-NEXT:    setb %al
295; FAST_AVX-NEXT:    andb $1, %al
296; FAST_AVX-NEXT:    retq
297  %1 = fcmp ult float %x, %y
298  ret i1 %1
299}
300
301define zeroext i1 @fcmp_ule(float %x, float %y) {
302; SDAG-LABEL: fcmp_ule:
303; SDAG:       ## %bb.0:
304; SDAG-NEXT:    ucomiss %xmm1, %xmm0
305; SDAG-NEXT:    setbe %al
306; SDAG-NEXT:    retq
307;
308; FAST_NOAVX-LABEL: fcmp_ule:
309; FAST_NOAVX:       ## %bb.0:
310; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
311; FAST_NOAVX-NEXT:    setbe %al
312; FAST_NOAVX-NEXT:    andb $1, %al
313; FAST_NOAVX-NEXT:    retq
314;
315; FAST_AVX-LABEL: fcmp_ule:
316; FAST_AVX:       ## %bb.0:
317; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
318; FAST_AVX-NEXT:    setbe %al
319; FAST_AVX-NEXT:    andb $1, %al
320; FAST_AVX-NEXT:    retq
321  %1 = fcmp ule float %x, %y
322  ret i1 %1
323}
324
325define zeroext i1 @fcmp_une(float %x, float %y) {
326; SDAG-LABEL: fcmp_une:
327; SDAG:       ## %bb.0:
328; SDAG-NEXT:    cmpneqss %xmm1, %xmm0
329; SDAG-NEXT:    movd %xmm0, %eax
330; SDAG-NEXT:    andl $1, %eax
331; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
332; SDAG-NEXT:    retq
333;
334; FAST_NOAVX-LABEL: fcmp_une:
335; FAST_NOAVX:       ## %bb.0:
336; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
337; FAST_NOAVX-NEXT:    setne %cl
338; FAST_NOAVX-NEXT:    setp %al
339; FAST_NOAVX-NEXT:    orb %cl, %al
340; FAST_NOAVX-NEXT:    andb $1, %al
341; FAST_NOAVX-NEXT:    retq
342;
343; FAST_AVX-LABEL: fcmp_une:
344; FAST_AVX:       ## %bb.0:
345; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
346; FAST_AVX-NEXT:    setne %cl
347; FAST_AVX-NEXT:    setp %al
348; FAST_AVX-NEXT:    orb %cl, %al
349; FAST_AVX-NEXT:    andb $1, %al
350; FAST_AVX-NEXT:    retq
351  %1 = fcmp une float %x, %y
352  ret i1 %1
353}
354
355define zeroext i1 @icmp_eq(i32 %x, i32 %y) {
356; SDAG-LABEL: icmp_eq:
357; SDAG:       ## %bb.0:
358; SDAG-NEXT:    cmpl %esi, %edi
359; SDAG-NEXT:    sete %al
360; SDAG-NEXT:    retq
361;
362; FAST-LABEL: icmp_eq:
363; FAST:       ## %bb.0:
364; FAST-NEXT:    cmpl %esi, %edi
365; FAST-NEXT:    sete %al
366; FAST-NEXT:    andb $1, %al
367; FAST-NEXT:    retq
368  %1 = icmp eq i32 %x, %y
369  ret i1 %1
370}
371
372define zeroext i1 @icmp_ne(i32 %x, i32 %y) {
373; SDAG-LABEL: icmp_ne:
374; SDAG:       ## %bb.0:
375; SDAG-NEXT:    cmpl %esi, %edi
376; SDAG-NEXT:    setne %al
377; SDAG-NEXT:    retq
378;
379; FAST-LABEL: icmp_ne:
380; FAST:       ## %bb.0:
381; FAST-NEXT:    cmpl %esi, %edi
382; FAST-NEXT:    setne %al
383; FAST-NEXT:    andb $1, %al
384; FAST-NEXT:    retq
385  %1 = icmp ne i32 %x, %y
386  ret i1 %1
387}
388
389define zeroext i1 @icmp_ugt(i32 %x, i32 %y) {
390; SDAG-LABEL: icmp_ugt:
391; SDAG:       ## %bb.0:
392; SDAG-NEXT:    cmpl %esi, %edi
393; SDAG-NEXT:    seta %al
394; SDAG-NEXT:    retq
395;
396; FAST-LABEL: icmp_ugt:
397; FAST:       ## %bb.0:
398; FAST-NEXT:    cmpl %esi, %edi
399; FAST-NEXT:    seta %al
400; FAST-NEXT:    andb $1, %al
401; FAST-NEXT:    retq
402  %1 = icmp ugt i32 %x, %y
403  ret i1 %1
404}
405
406define zeroext i1 @icmp_uge(i32 %x, i32 %y) {
407; SDAG-LABEL: icmp_uge:
408; SDAG:       ## %bb.0:
409; SDAG-NEXT:    cmpl %esi, %edi
410; SDAG-NEXT:    setae %al
411; SDAG-NEXT:    retq
412;
413; FAST-LABEL: icmp_uge:
414; FAST:       ## %bb.0:
415; FAST-NEXT:    cmpl %esi, %edi
416; FAST-NEXT:    setae %al
417; FAST-NEXT:    andb $1, %al
418; FAST-NEXT:    retq
419  %1 = icmp uge i32 %x, %y
420  ret i1 %1
421}
422
423define zeroext i1 @icmp_ult(i32 %x, i32 %y) {
424; SDAG-LABEL: icmp_ult:
425; SDAG:       ## %bb.0:
426; SDAG-NEXT:    cmpl %esi, %edi
427; SDAG-NEXT:    setb %al
428; SDAG-NEXT:    retq
429;
430; FAST-LABEL: icmp_ult:
431; FAST:       ## %bb.0:
432; FAST-NEXT:    cmpl %esi, %edi
433; FAST-NEXT:    setb %al
434; FAST-NEXT:    andb $1, %al
435; FAST-NEXT:    retq
436  %1 = icmp ult i32 %x, %y
437  ret i1 %1
438}
439
440define zeroext i1 @icmp_ule(i32 %x, i32 %y) {
441; SDAG-LABEL: icmp_ule:
442; SDAG:       ## %bb.0:
443; SDAG-NEXT:    cmpl %esi, %edi
444; SDAG-NEXT:    setbe %al
445; SDAG-NEXT:    retq
446;
447; FAST-LABEL: icmp_ule:
448; FAST:       ## %bb.0:
449; FAST-NEXT:    cmpl %esi, %edi
450; FAST-NEXT:    setbe %al
451; FAST-NEXT:    andb $1, %al
452; FAST-NEXT:    retq
453  %1 = icmp ule i32 %x, %y
454  ret i1 %1
455}
456
457define zeroext i1 @icmp_sgt(i32 %x, i32 %y) {
458; SDAG-LABEL: icmp_sgt:
459; SDAG:       ## %bb.0:
460; SDAG-NEXT:    cmpl %esi, %edi
461; SDAG-NEXT:    setg %al
462; SDAG-NEXT:    retq
463;
464; FAST-LABEL: icmp_sgt:
465; FAST:       ## %bb.0:
466; FAST-NEXT:    cmpl %esi, %edi
467; FAST-NEXT:    setg %al
468; FAST-NEXT:    andb $1, %al
469; FAST-NEXT:    retq
470  %1 = icmp sgt i32 %x, %y
471  ret i1 %1
472}
473
474define zeroext i1 @icmp_sge(i32 %x, i32 %y) {
475; SDAG-LABEL: icmp_sge:
476; SDAG:       ## %bb.0:
477; SDAG-NEXT:    cmpl %esi, %edi
478; SDAG-NEXT:    setge %al
479; SDAG-NEXT:    retq
480;
481; FAST-LABEL: icmp_sge:
482; FAST:       ## %bb.0:
483; FAST-NEXT:    cmpl %esi, %edi
484; FAST-NEXT:    setge %al
485; FAST-NEXT:    andb $1, %al
486; FAST-NEXT:    retq
487  %1 = icmp sge i32 %x, %y
488  ret i1 %1
489}
490
491define zeroext i1 @icmp_slt(i32 %x, i32 %y) {
492; SDAG-LABEL: icmp_slt:
493; SDAG:       ## %bb.0:
494; SDAG-NEXT:    cmpl %esi, %edi
495; SDAG-NEXT:    setl %al
496; SDAG-NEXT:    retq
497;
498; FAST-LABEL: icmp_slt:
499; FAST:       ## %bb.0:
500; FAST-NEXT:    cmpl %esi, %edi
501; FAST-NEXT:    setl %al
502; FAST-NEXT:    andb $1, %al
503; FAST-NEXT:    retq
504  %1 = icmp slt i32 %x, %y
505  ret i1 %1
506}
507
508define zeroext i1 @icmp_sle(i32 %x, i32 %y) {
509; SDAG-LABEL: icmp_sle:
510; SDAG:       ## %bb.0:
511; SDAG-NEXT:    cmpl %esi, %edi
512; SDAG-NEXT:    setle %al
513; SDAG-NEXT:    retq
514;
515; FAST-LABEL: icmp_sle:
516; FAST:       ## %bb.0:
517; FAST-NEXT:    cmpl %esi, %edi
518; FAST-NEXT:    setle %al
519; FAST-NEXT:    andb $1, %al
520; FAST-NEXT:    retq
521  %1 = icmp sle i32 %x, %y
522  ret i1 %1
523}
524
525; Test cmp folding and condition optimization.
526define zeroext i1 @fcmp_oeq2(float %x) {
527; SDAG-LABEL: fcmp_oeq2:
528; SDAG:       ## %bb.0:
529; SDAG-NEXT:    ucomiss %xmm0, %xmm0
530; SDAG-NEXT:    setnp %al
531; SDAG-NEXT:    retq
532;
533; FAST_NOAVX-LABEL: fcmp_oeq2:
534; FAST_NOAVX:       ## %bb.0:
535; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
536; FAST_NOAVX-NEXT:    setnp %al
537; FAST_NOAVX-NEXT:    andb $1, %al
538; FAST_NOAVX-NEXT:    retq
539;
540; FAST_AVX-LABEL: fcmp_oeq2:
541; FAST_AVX:       ## %bb.0:
542; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
543; FAST_AVX-NEXT:    setnp %al
544; FAST_AVX-NEXT:    andb $1, %al
545; FAST_AVX-NEXT:    retq
546  %1 = fcmp oeq float %x, %x
547  ret i1 %1
548}
549
550define zeroext i1 @fcmp_oeq3(float %x) {
551; SDAG-LABEL: fcmp_oeq3:
552; SDAG:       ## %bb.0:
553; SDAG-NEXT:    xorps %xmm1, %xmm1
554; SDAG-NEXT:    cmpeqss %xmm0, %xmm1
555; SDAG-NEXT:    movd %xmm1, %eax
556; SDAG-NEXT:    andl $1, %eax
557; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
558; SDAG-NEXT:    retq
559;
560; FAST_NOAVX-LABEL: fcmp_oeq3:
561; FAST_NOAVX:       ## %bb.0:
562; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
563; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
564; FAST_NOAVX-NEXT:    sete %cl
565; FAST_NOAVX-NEXT:    setnp %al
566; FAST_NOAVX-NEXT:    andb %cl, %al
567; FAST_NOAVX-NEXT:    andb $1, %al
568; FAST_NOAVX-NEXT:    retq
569;
570; FAST_AVX-LABEL: fcmp_oeq3:
571; FAST_AVX:       ## %bb.0:
572; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
573; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
574; FAST_AVX-NEXT:    sete %cl
575; FAST_AVX-NEXT:    setnp %al
576; FAST_AVX-NEXT:    andb %cl, %al
577; FAST_AVX-NEXT:    andb $1, %al
578; FAST_AVX-NEXT:    retq
579  %1 = fcmp oeq float %x, 0.000000e+00
580  ret i1 %1
581}
582
583define zeroext i1 @fcmp_ogt2(float %x) {
584; SDAG-LABEL: fcmp_ogt2:
585; SDAG:       ## %bb.0:
586; SDAG-NEXT:    xorl %eax, %eax
587; SDAG-NEXT:    retq
588;
589; FAST-LABEL: fcmp_ogt2:
590; FAST:       ## %bb.0:
591; FAST-NEXT:    xorl %eax, %eax
592; FAST-NEXT:    andb $1, %al
593; FAST-NEXT:    ## kill: def $al killed $al killed $eax
594; FAST-NEXT:    retq
595  %1 = fcmp ogt float %x, %x
596  ret i1 %1
597}
598
599define zeroext i1 @fcmp_ogt3(float %x) {
600; SDAG-LABEL: fcmp_ogt3:
601; SDAG:       ## %bb.0:
602; SDAG-NEXT:    xorps %xmm1, %xmm1
603; SDAG-NEXT:    ucomiss %xmm1, %xmm0
604; SDAG-NEXT:    seta %al
605; SDAG-NEXT:    retq
606;
607; FAST_NOAVX-LABEL: fcmp_ogt3:
608; FAST_NOAVX:       ## %bb.0:
609; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
610; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
611; FAST_NOAVX-NEXT:    seta %al
612; FAST_NOAVX-NEXT:    andb $1, %al
613; FAST_NOAVX-NEXT:    retq
614;
615; FAST_AVX-LABEL: fcmp_ogt3:
616; FAST_AVX:       ## %bb.0:
617; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
618; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
619; FAST_AVX-NEXT:    seta %al
620; FAST_AVX-NEXT:    andb $1, %al
621; FAST_AVX-NEXT:    retq
622  %1 = fcmp ogt float %x, 0.000000e+00
623  ret i1 %1
624}
625
626define zeroext i1 @fcmp_oge2(float %x) {
627; SDAG-LABEL: fcmp_oge2:
628; SDAG:       ## %bb.0:
629; SDAG-NEXT:    ucomiss %xmm0, %xmm0
630; SDAG-NEXT:    setnp %al
631; SDAG-NEXT:    retq
632;
633; FAST_NOAVX-LABEL: fcmp_oge2:
634; FAST_NOAVX:       ## %bb.0:
635; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
636; FAST_NOAVX-NEXT:    setnp %al
637; FAST_NOAVX-NEXT:    andb $1, %al
638; FAST_NOAVX-NEXT:    retq
639;
640; FAST_AVX-LABEL: fcmp_oge2:
641; FAST_AVX:       ## %bb.0:
642; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
643; FAST_AVX-NEXT:    setnp %al
644; FAST_AVX-NEXT:    andb $1, %al
645; FAST_AVX-NEXT:    retq
646  %1 = fcmp oge float %x, %x
647  ret i1 %1
648}
649
650define zeroext i1 @fcmp_oge3(float %x) {
651; SDAG-LABEL: fcmp_oge3:
652; SDAG:       ## %bb.0:
653; SDAG-NEXT:    xorps %xmm1, %xmm1
654; SDAG-NEXT:    ucomiss %xmm1, %xmm0
655; SDAG-NEXT:    setae %al
656; SDAG-NEXT:    retq
657;
658; FAST_NOAVX-LABEL: fcmp_oge3:
659; FAST_NOAVX:       ## %bb.0:
660; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
661; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
662; FAST_NOAVX-NEXT:    setae %al
663; FAST_NOAVX-NEXT:    andb $1, %al
664; FAST_NOAVX-NEXT:    retq
665;
666; FAST_AVX-LABEL: fcmp_oge3:
667; FAST_AVX:       ## %bb.0:
668; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
669; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
670; FAST_AVX-NEXT:    setae %al
671; FAST_AVX-NEXT:    andb $1, %al
672; FAST_AVX-NEXT:    retq
673  %1 = fcmp oge float %x, 0.000000e+00
674  ret i1 %1
675}
676
677define zeroext i1 @fcmp_olt2(float %x) {
678; SDAG-LABEL: fcmp_olt2:
679; SDAG:       ## %bb.0:
680; SDAG-NEXT:    xorl %eax, %eax
681; SDAG-NEXT:    retq
682;
683; FAST-LABEL: fcmp_olt2:
684; FAST:       ## %bb.0:
685; FAST-NEXT:    xorl %eax, %eax
686; FAST-NEXT:    andb $1, %al
687; FAST-NEXT:    ## kill: def $al killed $al killed $eax
688; FAST-NEXT:    retq
689  %1 = fcmp olt float %x, %x
690  ret i1 %1
691}
692
693define zeroext i1 @fcmp_olt3(float %x) {
694; SDAG-LABEL: fcmp_olt3:
695; SDAG:       ## %bb.0:
696; SDAG-NEXT:    xorps %xmm1, %xmm1
697; SDAG-NEXT:    ucomiss %xmm0, %xmm1
698; SDAG-NEXT:    seta %al
699; SDAG-NEXT:    retq
700;
701; FAST_NOAVX-LABEL: fcmp_olt3:
702; FAST_NOAVX:       ## %bb.0:
703; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
704; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
705; FAST_NOAVX-NEXT:    seta %al
706; FAST_NOAVX-NEXT:    andb $1, %al
707; FAST_NOAVX-NEXT:    retq
708;
709; FAST_AVX-LABEL: fcmp_olt3:
710; FAST_AVX:       ## %bb.0:
711; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
712; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
713; FAST_AVX-NEXT:    seta %al
714; FAST_AVX-NEXT:    andb $1, %al
715; FAST_AVX-NEXT:    retq
716  %1 = fcmp olt float %x, 0.000000e+00
717  ret i1 %1
718}
719
720define zeroext i1 @fcmp_ole2(float %x) {
721; SDAG-LABEL: fcmp_ole2:
722; SDAG:       ## %bb.0:
723; SDAG-NEXT:    ucomiss %xmm0, %xmm0
724; SDAG-NEXT:    setnp %al
725; SDAG-NEXT:    retq
726;
727; FAST_NOAVX-LABEL: fcmp_ole2:
728; FAST_NOAVX:       ## %bb.0:
729; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
730; FAST_NOAVX-NEXT:    setnp %al
731; FAST_NOAVX-NEXT:    andb $1, %al
732; FAST_NOAVX-NEXT:    retq
733;
734; FAST_AVX-LABEL: fcmp_ole2:
735; FAST_AVX:       ## %bb.0:
736; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
737; FAST_AVX-NEXT:    setnp %al
738; FAST_AVX-NEXT:    andb $1, %al
739; FAST_AVX-NEXT:    retq
740  %1 = fcmp ole float %x, %x
741  ret i1 %1
742}
743
744define zeroext i1 @fcmp_ole3(float %x) {
745; SDAG-LABEL: fcmp_ole3:
746; SDAG:       ## %bb.0:
747; SDAG-NEXT:    xorps %xmm1, %xmm1
748; SDAG-NEXT:    ucomiss %xmm0, %xmm1
749; SDAG-NEXT:    setae %al
750; SDAG-NEXT:    retq
751;
752; FAST_NOAVX-LABEL: fcmp_ole3:
753; FAST_NOAVX:       ## %bb.0:
754; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
755; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
756; FAST_NOAVX-NEXT:    setae %al
757; FAST_NOAVX-NEXT:    andb $1, %al
758; FAST_NOAVX-NEXT:    retq
759;
760; FAST_AVX-LABEL: fcmp_ole3:
761; FAST_AVX:       ## %bb.0:
762; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
763; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
764; FAST_AVX-NEXT:    setae %al
765; FAST_AVX-NEXT:    andb $1, %al
766; FAST_AVX-NEXT:    retq
767  %1 = fcmp ole float %x, 0.000000e+00
768  ret i1 %1
769}
770
771define zeroext i1 @fcmp_one2(float %x) {
772; SDAG-LABEL: fcmp_one2:
773; SDAG:       ## %bb.0:
774; SDAG-NEXT:    xorl %eax, %eax
775; SDAG-NEXT:    retq
776;
777; FAST-LABEL: fcmp_one2:
778; FAST:       ## %bb.0:
779; FAST-NEXT:    xorl %eax, %eax
780; FAST-NEXT:    andb $1, %al
781; FAST-NEXT:    ## kill: def $al killed $al killed $eax
782; FAST-NEXT:    retq
783  %1 = fcmp one float %x, %x
784  ret i1 %1
785}
786
787define zeroext i1 @fcmp_one3(float %x) {
788; SDAG-LABEL: fcmp_one3:
789; SDAG:       ## %bb.0:
790; SDAG-NEXT:    xorps %xmm1, %xmm1
791; SDAG-NEXT:    ucomiss %xmm1, %xmm0
792; SDAG-NEXT:    setne %al
793; SDAG-NEXT:    retq
794;
795; FAST_NOAVX-LABEL: fcmp_one3:
796; FAST_NOAVX:       ## %bb.0:
797; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
798; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
799; FAST_NOAVX-NEXT:    setne %al
800; FAST_NOAVX-NEXT:    andb $1, %al
801; FAST_NOAVX-NEXT:    retq
802;
803; FAST_AVX-LABEL: fcmp_one3:
804; FAST_AVX:       ## %bb.0:
805; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
806; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
807; FAST_AVX-NEXT:    setne %al
808; FAST_AVX-NEXT:    andb $1, %al
809; FAST_AVX-NEXT:    retq
810  %1 = fcmp one float %x, 0.000000e+00
811  ret i1 %1
812}
813
814define zeroext i1 @fcmp_ord2(float %x) {
815; SDAG-LABEL: fcmp_ord2:
816; SDAG:       ## %bb.0:
817; SDAG-NEXT:    ucomiss %xmm0, %xmm0
818; SDAG-NEXT:    setnp %al
819; SDAG-NEXT:    retq
820;
821; FAST_NOAVX-LABEL: fcmp_ord2:
822; FAST_NOAVX:       ## %bb.0:
823; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
824; FAST_NOAVX-NEXT:    setnp %al
825; FAST_NOAVX-NEXT:    andb $1, %al
826; FAST_NOAVX-NEXT:    retq
827;
828; FAST_AVX-LABEL: fcmp_ord2:
829; FAST_AVX:       ## %bb.0:
830; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
831; FAST_AVX-NEXT:    setnp %al
832; FAST_AVX-NEXT:    andb $1, %al
833; FAST_AVX-NEXT:    retq
834  %1 = fcmp ord float %x, %x
835  ret i1 %1
836}
837
838define zeroext i1 @fcmp_ord3(float %x) {
839; SDAG-LABEL: fcmp_ord3:
840; SDAG:       ## %bb.0:
841; SDAG-NEXT:    ucomiss %xmm0, %xmm0
842; SDAG-NEXT:    setnp %al
843; SDAG-NEXT:    retq
844;
845; FAST_NOAVX-LABEL: fcmp_ord3:
846; FAST_NOAVX:       ## %bb.0:
847; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
848; FAST_NOAVX-NEXT:    setnp %al
849; FAST_NOAVX-NEXT:    andb $1, %al
850; FAST_NOAVX-NEXT:    retq
851;
852; FAST_AVX-LABEL: fcmp_ord3:
853; FAST_AVX:       ## %bb.0:
854; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
855; FAST_AVX-NEXT:    setnp %al
856; FAST_AVX-NEXT:    andb $1, %al
857; FAST_AVX-NEXT:    retq
858  %1 = fcmp ord float %x, 0.000000e+00
859  ret i1 %1
860}
861
862define zeroext i1 @fcmp_uno2(float %x) {
863; SDAG-LABEL: fcmp_uno2:
864; SDAG:       ## %bb.0:
865; SDAG-NEXT:    ucomiss %xmm0, %xmm0
866; SDAG-NEXT:    setp %al
867; SDAG-NEXT:    retq
868;
869; FAST_NOAVX-LABEL: fcmp_uno2:
870; FAST_NOAVX:       ## %bb.0:
871; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
872; FAST_NOAVX-NEXT:    setp %al
873; FAST_NOAVX-NEXT:    andb $1, %al
874; FAST_NOAVX-NEXT:    retq
875;
876; FAST_AVX-LABEL: fcmp_uno2:
877; FAST_AVX:       ## %bb.0:
878; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
879; FAST_AVX-NEXT:    setp %al
880; FAST_AVX-NEXT:    andb $1, %al
881; FAST_AVX-NEXT:    retq
882  %1 = fcmp uno float %x, %x
883  ret i1 %1
884}
885
886define zeroext i1 @fcmp_uno3(float %x) {
887; SDAG-LABEL: fcmp_uno3:
888; SDAG:       ## %bb.0:
889; SDAG-NEXT:    ucomiss %xmm0, %xmm0
890; SDAG-NEXT:    setp %al
891; SDAG-NEXT:    retq
892;
893; FAST_NOAVX-LABEL: fcmp_uno3:
894; FAST_NOAVX:       ## %bb.0:
895; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
896; FAST_NOAVX-NEXT:    setp %al
897; FAST_NOAVX-NEXT:    andb $1, %al
898; FAST_NOAVX-NEXT:    retq
899;
900; FAST_AVX-LABEL: fcmp_uno3:
901; FAST_AVX:       ## %bb.0:
902; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
903; FAST_AVX-NEXT:    setp %al
904; FAST_AVX-NEXT:    andb $1, %al
905; FAST_AVX-NEXT:    retq
906  %1 = fcmp uno float %x, 0.000000e+00
907  ret i1 %1
908}
909
910define zeroext i1 @fcmp_ueq2(float %x) {
911; SDAG-LABEL: fcmp_ueq2:
912; SDAG:       ## %bb.0:
913; SDAG-NEXT:    movb $1, %al
914; SDAG-NEXT:    retq
915;
916; FAST-LABEL: fcmp_ueq2:
917; FAST:       ## %bb.0:
918; FAST-NEXT:    movb $1, %al
919; FAST-NEXT:    andb $1, %al
920; FAST-NEXT:    retq
921  %1 = fcmp ueq float %x, %x
922  ret i1 %1
923}
924
925define zeroext i1 @fcmp_ueq3(float %x) {
926; SDAG-LABEL: fcmp_ueq3:
927; SDAG:       ## %bb.0:
928; SDAG-NEXT:    xorps %xmm1, %xmm1
929; SDAG-NEXT:    ucomiss %xmm1, %xmm0
930; SDAG-NEXT:    sete %al
931; SDAG-NEXT:    retq
932;
933; FAST_NOAVX-LABEL: fcmp_ueq3:
934; FAST_NOAVX:       ## %bb.0:
935; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
936; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
937; FAST_NOAVX-NEXT:    sete %al
938; FAST_NOAVX-NEXT:    andb $1, %al
939; FAST_NOAVX-NEXT:    retq
940;
941; FAST_AVX-LABEL: fcmp_ueq3:
942; FAST_AVX:       ## %bb.0:
943; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
944; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
945; FAST_AVX-NEXT:    sete %al
946; FAST_AVX-NEXT:    andb $1, %al
947; FAST_AVX-NEXT:    retq
948  %1 = fcmp ueq float %x, 0.000000e+00
949  ret i1 %1
950}
951
952define zeroext i1 @fcmp_ugt2(float %x) {
953; SDAG-LABEL: fcmp_ugt2:
954; SDAG:       ## %bb.0:
955; SDAG-NEXT:    ucomiss %xmm0, %xmm0
956; SDAG-NEXT:    setp %al
957; SDAG-NEXT:    retq
958;
959; FAST_NOAVX-LABEL: fcmp_ugt2:
960; FAST_NOAVX:       ## %bb.0:
961; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
962; FAST_NOAVX-NEXT:    setp %al
963; FAST_NOAVX-NEXT:    andb $1, %al
964; FAST_NOAVX-NEXT:    retq
965;
966; FAST_AVX-LABEL: fcmp_ugt2:
967; FAST_AVX:       ## %bb.0:
968; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
969; FAST_AVX-NEXT:    setp %al
970; FAST_AVX-NEXT:    andb $1, %al
971; FAST_AVX-NEXT:    retq
972  %1 = fcmp ugt float %x, %x
973  ret i1 %1
974}
975
976define zeroext i1 @fcmp_ugt3(float %x) {
977; SDAG-LABEL: fcmp_ugt3:
978; SDAG:       ## %bb.0:
979; SDAG-NEXT:    xorps %xmm1, %xmm1
980; SDAG-NEXT:    ucomiss %xmm0, %xmm1
981; SDAG-NEXT:    setb %al
982; SDAG-NEXT:    retq
983;
984; FAST_NOAVX-LABEL: fcmp_ugt3:
985; FAST_NOAVX:       ## %bb.0:
986; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
987; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
988; FAST_NOAVX-NEXT:    setb %al
989; FAST_NOAVX-NEXT:    andb $1, %al
990; FAST_NOAVX-NEXT:    retq
991;
992; FAST_AVX-LABEL: fcmp_ugt3:
993; FAST_AVX:       ## %bb.0:
994; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
995; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
996; FAST_AVX-NEXT:    setb %al
997; FAST_AVX-NEXT:    andb $1, %al
998; FAST_AVX-NEXT:    retq
999  %1 = fcmp ugt float %x, 0.000000e+00
1000  ret i1 %1
1001}
1002
1003define zeroext i1 @fcmp_uge2(float %x) {
1004; SDAG-LABEL: fcmp_uge2:
1005; SDAG:       ## %bb.0:
1006; SDAG-NEXT:    movb $1, %al
1007; SDAG-NEXT:    retq
1008;
1009; FAST-LABEL: fcmp_uge2:
1010; FAST:       ## %bb.0:
1011; FAST-NEXT:    movb $1, %al
1012; FAST-NEXT:    andb $1, %al
1013; FAST-NEXT:    retq
1014  %1 = fcmp uge float %x, %x
1015  ret i1 %1
1016}
1017
1018define zeroext i1 @fcmp_uge3(float %x) {
1019; SDAG-LABEL: fcmp_uge3:
1020; SDAG:       ## %bb.0:
1021; SDAG-NEXT:    xorps %xmm1, %xmm1
1022; SDAG-NEXT:    ucomiss %xmm0, %xmm1
1023; SDAG-NEXT:    setbe %al
1024; SDAG-NEXT:    retq
1025;
1026; FAST_NOAVX-LABEL: fcmp_uge3:
1027; FAST_NOAVX:       ## %bb.0:
1028; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
1029; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
1030; FAST_NOAVX-NEXT:    setbe %al
1031; FAST_NOAVX-NEXT:    andb $1, %al
1032; FAST_NOAVX-NEXT:    retq
1033;
1034; FAST_AVX-LABEL: fcmp_uge3:
1035; FAST_AVX:       ## %bb.0:
1036; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1037; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
1038; FAST_AVX-NEXT:    setbe %al
1039; FAST_AVX-NEXT:    andb $1, %al
1040; FAST_AVX-NEXT:    retq
1041  %1 = fcmp uge float %x, 0.000000e+00
1042  ret i1 %1
1043}
1044
1045define zeroext i1 @fcmp_ult2(float %x) {
1046; SDAG-LABEL: fcmp_ult2:
1047; SDAG:       ## %bb.0:
1048; SDAG-NEXT:    ucomiss %xmm0, %xmm0
1049; SDAG-NEXT:    setp %al
1050; SDAG-NEXT:    retq
1051;
1052; FAST_NOAVX-LABEL: fcmp_ult2:
1053; FAST_NOAVX:       ## %bb.0:
1054; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
1055; FAST_NOAVX-NEXT:    setp %al
1056; FAST_NOAVX-NEXT:    andb $1, %al
1057; FAST_NOAVX-NEXT:    retq
1058;
1059; FAST_AVX-LABEL: fcmp_ult2:
1060; FAST_AVX:       ## %bb.0:
1061; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
1062; FAST_AVX-NEXT:    setp %al
1063; FAST_AVX-NEXT:    andb $1, %al
1064; FAST_AVX-NEXT:    retq
1065  %1 = fcmp ult float %x, %x
1066  ret i1 %1
1067}
1068
1069define zeroext i1 @fcmp_ult3(float %x) {
1070; SDAG-LABEL: fcmp_ult3:
1071; SDAG:       ## %bb.0:
1072; SDAG-NEXT:    xorps %xmm1, %xmm1
1073; SDAG-NEXT:    ucomiss %xmm1, %xmm0
1074; SDAG-NEXT:    setb %al
1075; SDAG-NEXT:    retq
1076;
1077; FAST_NOAVX-LABEL: fcmp_ult3:
1078; FAST_NOAVX:       ## %bb.0:
1079; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
1080; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
1081; FAST_NOAVX-NEXT:    setb %al
1082; FAST_NOAVX-NEXT:    andb $1, %al
1083; FAST_NOAVX-NEXT:    retq
1084;
1085; FAST_AVX-LABEL: fcmp_ult3:
1086; FAST_AVX:       ## %bb.0:
1087; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1088; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
1089; FAST_AVX-NEXT:    setb %al
1090; FAST_AVX-NEXT:    andb $1, %al
1091; FAST_AVX-NEXT:    retq
1092  %1 = fcmp ult float %x, 0.000000e+00
1093  ret i1 %1
1094}
1095
1096define zeroext i1 @fcmp_ule2(float %x) {
1097; SDAG-LABEL: fcmp_ule2:
1098; SDAG:       ## %bb.0:
1099; SDAG-NEXT:    movb $1, %al
1100; SDAG-NEXT:    retq
1101;
1102; FAST-LABEL: fcmp_ule2:
1103; FAST:       ## %bb.0:
1104; FAST-NEXT:    movb $1, %al
1105; FAST-NEXT:    andb $1, %al
1106; FAST-NEXT:    retq
1107  %1 = fcmp ule float %x, %x
1108  ret i1 %1
1109}
1110
1111define zeroext i1 @fcmp_ule3(float %x) {
1112; SDAG-LABEL: fcmp_ule3:
1113; SDAG:       ## %bb.0:
1114; SDAG-NEXT:    xorps %xmm1, %xmm1
1115; SDAG-NEXT:    ucomiss %xmm1, %xmm0
1116; SDAG-NEXT:    setbe %al
1117; SDAG-NEXT:    retq
1118;
1119; FAST_NOAVX-LABEL: fcmp_ule3:
1120; FAST_NOAVX:       ## %bb.0:
1121; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
1122; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
1123; FAST_NOAVX-NEXT:    setbe %al
1124; FAST_NOAVX-NEXT:    andb $1, %al
1125; FAST_NOAVX-NEXT:    retq
1126;
1127; FAST_AVX-LABEL: fcmp_ule3:
1128; FAST_AVX:       ## %bb.0:
1129; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1130; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
1131; FAST_AVX-NEXT:    setbe %al
1132; FAST_AVX-NEXT:    andb $1, %al
1133; FAST_AVX-NEXT:    retq
1134  %1 = fcmp ule float %x, 0.000000e+00
1135  ret i1 %1
1136}
1137
1138define zeroext i1 @fcmp_une2(float %x) {
1139; SDAG-LABEL: fcmp_une2:
1140; SDAG:       ## %bb.0:
1141; SDAG-NEXT:    ucomiss %xmm0, %xmm0
1142; SDAG-NEXT:    setp %al
1143; SDAG-NEXT:    retq
1144;
1145; FAST_NOAVX-LABEL: fcmp_une2:
1146; FAST_NOAVX:       ## %bb.0:
1147; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
1148; FAST_NOAVX-NEXT:    setp %al
1149; FAST_NOAVX-NEXT:    andb $1, %al
1150; FAST_NOAVX-NEXT:    retq
1151;
1152; FAST_AVX-LABEL: fcmp_une2:
1153; FAST_AVX:       ## %bb.0:
1154; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
1155; FAST_AVX-NEXT:    setp %al
1156; FAST_AVX-NEXT:    andb $1, %al
1157; FAST_AVX-NEXT:    retq
1158  %1 = fcmp une float %x, %x
1159  ret i1 %1
1160}
1161
1162define zeroext i1 @fcmp_une3(float %x) {
1163; SDAG-LABEL: fcmp_une3:
1164; SDAG:       ## %bb.0:
1165; SDAG-NEXT:    xorps %xmm1, %xmm1
1166; SDAG-NEXT:    cmpneqss %xmm0, %xmm1
1167; SDAG-NEXT:    movd %xmm1, %eax
1168; SDAG-NEXT:    andl $1, %eax
1169; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
1170; SDAG-NEXT:    retq
1171;
1172; FAST_NOAVX-LABEL: fcmp_une3:
1173; FAST_NOAVX:       ## %bb.0:
1174; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
1175; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
1176; FAST_NOAVX-NEXT:    setne %cl
1177; FAST_NOAVX-NEXT:    setp %al
1178; FAST_NOAVX-NEXT:    orb %cl, %al
1179; FAST_NOAVX-NEXT:    andb $1, %al
1180; FAST_NOAVX-NEXT:    retq
1181;
1182; FAST_AVX-LABEL: fcmp_une3:
1183; FAST_AVX:       ## %bb.0:
1184; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1185; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
1186; FAST_AVX-NEXT:    setne %cl
1187; FAST_AVX-NEXT:    setp %al
1188; FAST_AVX-NEXT:    orb %cl, %al
1189; FAST_AVX-NEXT:    andb $1, %al
1190; FAST_AVX-NEXT:    retq
1191  %1 = fcmp une float %x, 0.000000e+00
1192  ret i1 %1
1193}
1194