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