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