blob: 768af943eb490fe7a26412c3cff960fba8aea056 [file] [log] [blame]
Benjamin Kramer302178b2012-10-07 15:34:27 +00001; RUN: llc -march x86 -mcpu pentium4 < %s | FileCheck %s -check-prefix=SSE
2; RUN: llc -march x86 -mcpu pentium3 < %s | FileCheck %s -check-prefix=NOSSE2
3; RUN: llc -march x86 -mcpu pentium2 < %s | FileCheck %s -check-prefix=NOSSE1
4; RUN: llc -march x86 -mcpu pentium < %s | FileCheck %s -check-prefix=NOCMOV
5; PR14035
6
7define double @test1(i32 %a, i32 %b, double %x) nounwind {
8 %cmp = icmp ugt i32 %a, %b
9 %sel = select i1 %cmp, double 99.0, double %x
10 ret double %sel
11
Stephen Linf799e3f2013-07-13 20:38:47 +000012; SSE-LABEL: test1:
Benjamin Kramer302178b2012-10-07 15:34:27 +000013; SSE: movsd
14
Stephen Linf799e3f2013-07-13 20:38:47 +000015; NOSSE2-LABEL: test1:
Benjamin Kramer302178b2012-10-07 15:34:27 +000016; NOSSE2: fcmovnbe
17
Stephen Linf799e3f2013-07-13 20:38:47 +000018; NOSSE1-LABEL: test1:
Benjamin Kramer302178b2012-10-07 15:34:27 +000019; NOSSE1: fcmovnbe
20
Stephen Linf799e3f2013-07-13 20:38:47 +000021; NOCMOV-LABEL: test1:
Benjamin Kramer302178b2012-10-07 15:34:27 +000022; NOCMOV: fstp
23
24}
25
26define double @test2(i32 %a, i32 %b, double %x) nounwind {
27 %cmp = icmp uge i32 %a, %b
28 %sel = select i1 %cmp, double 99.0, double %x
29 ret double %sel
30
Stephen Linf799e3f2013-07-13 20:38:47 +000031; SSE-LABEL: test2:
Benjamin Kramer302178b2012-10-07 15:34:27 +000032; SSE: movsd
33
Stephen Linf799e3f2013-07-13 20:38:47 +000034; NOSSE2-LABEL: test2:
Benjamin Kramer302178b2012-10-07 15:34:27 +000035; NOSSE2: fcmovnb
36
Stephen Linf799e3f2013-07-13 20:38:47 +000037; NOSSE1-LABEL: test2:
Benjamin Kramer302178b2012-10-07 15:34:27 +000038; NOSSE1: fcmovnb
39
Stephen Linf799e3f2013-07-13 20:38:47 +000040; NOCMOV-LABEL: test2:
Benjamin Kramer302178b2012-10-07 15:34:27 +000041; NOCMOV: fstp
42}
43
44define double @test3(i32 %a, i32 %b, double %x) nounwind {
45 %cmp = icmp ult i32 %a, %b
46 %sel = select i1 %cmp, double 99.0, double %x
47 ret double %sel
48
Stephen Linf799e3f2013-07-13 20:38:47 +000049; SSE-LABEL: test3:
Benjamin Kramer302178b2012-10-07 15:34:27 +000050; SSE: movsd
51
Stephen Linf799e3f2013-07-13 20:38:47 +000052; NOSSE2-LABEL: test3:
Benjamin Kramer302178b2012-10-07 15:34:27 +000053; NOSSE2: fcmovb
54
Stephen Linf799e3f2013-07-13 20:38:47 +000055; NOSSE1-LABEL: test3:
Benjamin Kramer302178b2012-10-07 15:34:27 +000056; NOSSE1: fcmovb
57
Stephen Linf799e3f2013-07-13 20:38:47 +000058; NOCMOV-LABEL: test3:
Benjamin Kramer302178b2012-10-07 15:34:27 +000059; NOCMOV: fstp
60}
61
62define double @test4(i32 %a, i32 %b, double %x) nounwind {
63 %cmp = icmp ule i32 %a, %b
64 %sel = select i1 %cmp, double 99.0, double %x
65 ret double %sel
66
Stephen Linf799e3f2013-07-13 20:38:47 +000067; SSE-LABEL: test4:
Benjamin Kramer302178b2012-10-07 15:34:27 +000068; SSE: movsd
69
Stephen Linf799e3f2013-07-13 20:38:47 +000070; NOSSE2-LABEL: test4:
Benjamin Kramer302178b2012-10-07 15:34:27 +000071; NOSSE2: fcmovbe
72
Stephen Linf799e3f2013-07-13 20:38:47 +000073; NOSSE1-LABEL: test4:
Benjamin Kramer302178b2012-10-07 15:34:27 +000074; NOSSE1: fcmovbe
75
Stephen Linf799e3f2013-07-13 20:38:47 +000076; NOCMOV-LABEL: test4:
Benjamin Kramer302178b2012-10-07 15:34:27 +000077; NOCMOV: fstp
78}
79
80define double @test5(i32 %a, i32 %b, double %x) nounwind {
81 %cmp = icmp sgt i32 %a, %b
82 %sel = select i1 %cmp, double 99.0, double %x
83 ret double %sel
84
Stephen Linf799e3f2013-07-13 20:38:47 +000085; SSE-LABEL: test5:
Benjamin Kramer302178b2012-10-07 15:34:27 +000086; SSE: movsd
87
Stephen Linf799e3f2013-07-13 20:38:47 +000088; NOSSE2-LABEL: test5:
Benjamin Kramer302178b2012-10-07 15:34:27 +000089; NOSSE2: fstp
90
Stephen Linf799e3f2013-07-13 20:38:47 +000091; NOSSE1-LABEL: test5:
Benjamin Kramer302178b2012-10-07 15:34:27 +000092; NOSSE1: fstp
93
Stephen Linf799e3f2013-07-13 20:38:47 +000094; NOCMOV-LABEL: test5:
Benjamin Kramer302178b2012-10-07 15:34:27 +000095; NOCMOV: fstp
96}
97
98define double @test6(i32 %a, i32 %b, double %x) nounwind {
99 %cmp = icmp sge i32 %a, %b
100 %sel = select i1 %cmp, double 99.0, double %x
101 ret double %sel
102
Stephen Linf799e3f2013-07-13 20:38:47 +0000103; SSE-LABEL: test6:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000104; SSE: movsd
105
Stephen Linf799e3f2013-07-13 20:38:47 +0000106; NOSSE2-LABEL: test6:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000107; NOSSE2: fstp
108
Stephen Linf799e3f2013-07-13 20:38:47 +0000109; NOSSE1-LABEL: test6:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000110; NOSSE1: fstp
111
Stephen Linf799e3f2013-07-13 20:38:47 +0000112; NOCMOV-LABEL: test6:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000113; NOCMOV: fstp
114}
115
116define double @test7(i32 %a, i32 %b, double %x) nounwind {
117 %cmp = icmp slt i32 %a, %b
118 %sel = select i1 %cmp, double 99.0, double %x
119 ret double %sel
120
Stephen Linf799e3f2013-07-13 20:38:47 +0000121; SSE-LABEL: test7:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000122; SSE: movsd
123
Stephen Linf799e3f2013-07-13 20:38:47 +0000124; NOSSE2-LABEL: test7:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000125; NOSSE2: fstp
126
Stephen Linf799e3f2013-07-13 20:38:47 +0000127; NOSSE1-LABEL: test7:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000128; NOSSE1: fstp
129
Stephen Linf799e3f2013-07-13 20:38:47 +0000130; NOCMOV-LABEL: test7:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000131; NOCMOV: fstp
132}
133
134define double @test8(i32 %a, i32 %b, double %x) nounwind {
135 %cmp = icmp sle i32 %a, %b
136 %sel = select i1 %cmp, double 99.0, double %x
137 ret double %sel
138
Stephen Linf799e3f2013-07-13 20:38:47 +0000139; SSE-LABEL: test8:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000140; SSE: movsd
141
Stephen Linf799e3f2013-07-13 20:38:47 +0000142; NOSSE2-LABEL: test8:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000143; NOSSE2: fstp
144
Stephen Linf799e3f2013-07-13 20:38:47 +0000145; NOSSE1-LABEL: test8:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000146; NOSSE1: fstp
147
Stephen Linf799e3f2013-07-13 20:38:47 +0000148; NOCMOV-LABEL: test8:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000149; NOCMOV: fstp
150}
151
152define float @test9(i32 %a, i32 %b, float %x) nounwind {
153 %cmp = icmp ugt i32 %a, %b
154 %sel = select i1 %cmp, float 99.0, float %x
155 ret float %sel
156
Stephen Linf799e3f2013-07-13 20:38:47 +0000157; SSE-LABEL: test9:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000158; SSE: movss
159
Stephen Linf799e3f2013-07-13 20:38:47 +0000160; NOSSE2-LABEL: test9:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000161; NOSSE2: movss
162
Stephen Linf799e3f2013-07-13 20:38:47 +0000163; NOSSE1-LABEL: test9:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000164; NOSSE1: fcmovnbe
165
Stephen Linf799e3f2013-07-13 20:38:47 +0000166; NOCMOV-LABEL: test9:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000167; NOCMOV: fstp
168}
169
170define float @test10(i32 %a, i32 %b, float %x) nounwind {
171 %cmp = icmp uge i32 %a, %b
172 %sel = select i1 %cmp, float 99.0, float %x
173 ret float %sel
174
Stephen Linf799e3f2013-07-13 20:38:47 +0000175; SSE-LABEL: test10:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000176; SSE: movss
177
Stephen Linf799e3f2013-07-13 20:38:47 +0000178; NOSSE2-LABEL: test10:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000179; NOSSE2: movss
180
Stephen Linf799e3f2013-07-13 20:38:47 +0000181; NOSSE1-LABEL: test10:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000182; NOSSE1: fcmovnb
183
Stephen Linf799e3f2013-07-13 20:38:47 +0000184; NOCMOV-LABEL: test10:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000185; NOCMOV: fstp
186}
187
188define float @test11(i32 %a, i32 %b, float %x) nounwind {
189 %cmp = icmp ult i32 %a, %b
190 %sel = select i1 %cmp, float 99.0, float %x
191 ret float %sel
192
Stephen Linf799e3f2013-07-13 20:38:47 +0000193; SSE-LABEL: test11:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000194; SSE: movss
195
Stephen Linf799e3f2013-07-13 20:38:47 +0000196; NOSSE2-LABEL: test11:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000197; NOSSE2: movss
198
Stephen Linf799e3f2013-07-13 20:38:47 +0000199; NOSSE1-LABEL: test11:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000200; NOSSE1: fcmovb
201
Stephen Linf799e3f2013-07-13 20:38:47 +0000202; NOCMOV-LABEL: test11:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000203; NOCMOV: fstp
204}
205
206define float @test12(i32 %a, i32 %b, float %x) nounwind {
207 %cmp = icmp ule i32 %a, %b
208 %sel = select i1 %cmp, float 99.0, float %x
209 ret float %sel
210
Stephen Linf799e3f2013-07-13 20:38:47 +0000211; SSE-LABEL: test12:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000212; SSE: movss
213
Stephen Linf799e3f2013-07-13 20:38:47 +0000214; NOSSE2-LABEL: test12:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000215; NOSSE2: movss
216
Stephen Linf799e3f2013-07-13 20:38:47 +0000217; NOSSE1-LABEL: test12:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000218; NOSSE1: fcmovbe
219
Stephen Linf799e3f2013-07-13 20:38:47 +0000220; NOCMOV-LABEL: test12:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000221; NOCMOV: fstp
222}
223
224define float @test13(i32 %a, i32 %b, float %x) nounwind {
225 %cmp = icmp sgt i32 %a, %b
226 %sel = select i1 %cmp, float 99.0, float %x
227 ret float %sel
228
Stephen Linf799e3f2013-07-13 20:38:47 +0000229; SSE-LABEL: test13:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000230; SSE: movss
231
Stephen Linf799e3f2013-07-13 20:38:47 +0000232; NOSSE2-LABEL: test13:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000233; NOSSE2: movss
234
Stephen Linf799e3f2013-07-13 20:38:47 +0000235; NOSSE1-LABEL: test13:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000236; NOSSE1: fstp
237
Stephen Linf799e3f2013-07-13 20:38:47 +0000238; NOCMOV-LABEL: test13:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000239; NOCMOV: fstp
240}
241
242define float @test14(i32 %a, i32 %b, float %x) nounwind {
243 %cmp = icmp sge i32 %a, %b
244 %sel = select i1 %cmp, float 99.0, float %x
245 ret float %sel
246
Stephen Linf799e3f2013-07-13 20:38:47 +0000247; SSE-LABEL: test14:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000248; SSE: movss
249
Stephen Linf799e3f2013-07-13 20:38:47 +0000250; NOSSE2-LABEL: test14:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000251; NOSSE2: movss
252
Stephen Linf799e3f2013-07-13 20:38:47 +0000253; NOSSE1-LABEL: test14:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000254; NOSSE1: fstp
255
Stephen Linf799e3f2013-07-13 20:38:47 +0000256; NOCMOV-LABEL: test14:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000257; NOCMOV: fstp
258}
259
260define float @test15(i32 %a, i32 %b, float %x) nounwind {
261 %cmp = icmp slt i32 %a, %b
262 %sel = select i1 %cmp, float 99.0, float %x
263 ret float %sel
264
Stephen Linf799e3f2013-07-13 20:38:47 +0000265; SSE-LABEL: test15:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000266; SSE: movss
267
Stephen Linf799e3f2013-07-13 20:38:47 +0000268; NOSSE2-LABEL: test15:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000269; NOSSE2: movss
270
Stephen Linf799e3f2013-07-13 20:38:47 +0000271; NOSSE1-LABEL: test15:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000272; NOSSE1: fstp
273
Stephen Linf799e3f2013-07-13 20:38:47 +0000274; NOCMOV-LABEL: test15:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000275; NOCMOV: fstp
276}
277
278define float @test16(i32 %a, i32 %b, float %x) nounwind {
279 %cmp = icmp sle i32 %a, %b
280 %sel = select i1 %cmp, float 99.0, float %x
281 ret float %sel
282
Stephen Linf799e3f2013-07-13 20:38:47 +0000283; SSE-LABEL: test16:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000284; SSE: movss
285
Stephen Linf799e3f2013-07-13 20:38:47 +0000286; NOSSE2-LABEL: test16:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000287; NOSSE2: movss
288
Stephen Linf799e3f2013-07-13 20:38:47 +0000289; NOSSE1-LABEL: test16:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000290; NOSSE1: fstp
291
Stephen Linf799e3f2013-07-13 20:38:47 +0000292; NOCMOV-LABEL: test16:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000293; NOCMOV: fstp
294}
295
296define x86_fp80 @test17(i32 %a, i32 %b, x86_fp80 %x) nounwind {
297 %cmp = icmp ugt i32 %a, %b
298 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
299 ret x86_fp80 %sel
300
Stephen Linf799e3f2013-07-13 20:38:47 +0000301; SSE-LABEL: test17:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000302; SSE: fcmovnbe
303
Stephen Linf799e3f2013-07-13 20:38:47 +0000304; NOSSE2-LABEL: test17:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000305; NOSSE2: fcmovnbe
306
Stephen Linf799e3f2013-07-13 20:38:47 +0000307; NOSSE1-LABEL: test17:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000308; NOSSE1: fcmovnbe
309
Stephen Linf799e3f2013-07-13 20:38:47 +0000310; NOCMOV-LABEL: test17:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000311; NOCMOV: fstp
312}
313
314define x86_fp80 @test18(i32 %a, i32 %b, x86_fp80 %x) nounwind {
315 %cmp = icmp uge i32 %a, %b
316 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
317 ret x86_fp80 %sel
318
Stephen Linf799e3f2013-07-13 20:38:47 +0000319; SSE-LABEL: test18:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000320; SSE: fcmovnb
321
Stephen Linf799e3f2013-07-13 20:38:47 +0000322; NOSSE2-LABEL: test18:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000323; NOSSE2: fcmovnb
324
Stephen Linf799e3f2013-07-13 20:38:47 +0000325; NOSSE1-LABEL: test18:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000326; NOSSE1: fcmovnb
327
Stephen Linf799e3f2013-07-13 20:38:47 +0000328; NOCMOV-LABEL: test18:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000329; NOCMOV: fstp
330}
331
332define x86_fp80 @test19(i32 %a, i32 %b, x86_fp80 %x) nounwind {
333 %cmp = icmp ult i32 %a, %b
334 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
335 ret x86_fp80 %sel
336
Stephen Linf799e3f2013-07-13 20:38:47 +0000337; SSE-LABEL: test19:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000338; SSE: fcmovb
339
Stephen Linf799e3f2013-07-13 20:38:47 +0000340; NOSSE2-LABEL: test19:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000341; NOSSE2: fcmovb
342
Stephen Linf799e3f2013-07-13 20:38:47 +0000343; NOSSE1-LABEL: test19:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000344; NOSSE1: fcmovb
345
Stephen Linf799e3f2013-07-13 20:38:47 +0000346; NOCMOV-LABEL: test19:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000347; NOCMOV: fstp
348}
349
350define x86_fp80 @test20(i32 %a, i32 %b, x86_fp80 %x) nounwind {
351 %cmp = icmp ule i32 %a, %b
352 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
353 ret x86_fp80 %sel
354
Stephen Linf799e3f2013-07-13 20:38:47 +0000355; SSE-LABEL: test20:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000356; SSE: fcmovbe
357
Stephen Linf799e3f2013-07-13 20:38:47 +0000358; NOSSE2-LABEL: test20:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000359; NOSSE2: fcmovbe
360
Stephen Linf799e3f2013-07-13 20:38:47 +0000361; NOSSE1-LABEL: test20:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000362; NOSSE1: fcmovbe
363
Stephen Linf799e3f2013-07-13 20:38:47 +0000364; NOCMOV-LABEL: test20:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000365; NOCMOV: fstp
366}
367
368define x86_fp80 @test21(i32 %a, i32 %b, x86_fp80 %x) nounwind {
369 %cmp = icmp sgt i32 %a, %b
370 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
371 ret x86_fp80 %sel
372
373; We don't emit a branch for fp80, why?
Stephen Linf799e3f2013-07-13 20:38:47 +0000374; SSE-LABEL: test21:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000375; SSE: testb
376; SSE: fcmovne
377
Stephen Linf799e3f2013-07-13 20:38:47 +0000378; NOSSE2-LABEL: test21:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000379; NOSSE2: testb
380; NOSSE2: fcmovne
381
Stephen Linf799e3f2013-07-13 20:38:47 +0000382; NOSSE1-LABEL: test21:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000383; NOSSE1: testb
384; NOSSE1: fcmovne
385
Stephen Linf799e3f2013-07-13 20:38:47 +0000386; NOCMOV-LABEL: test21:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000387; NOCMOV: fstp
388}
389
390define x86_fp80 @test22(i32 %a, i32 %b, x86_fp80 %x) nounwind {
391 %cmp = icmp sge i32 %a, %b
392 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
393 ret x86_fp80 %sel
394
Stephen Linf799e3f2013-07-13 20:38:47 +0000395; SSE-LABEL: test22:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000396; SSE: testb
397; SSE: fcmovne
398
Stephen Linf799e3f2013-07-13 20:38:47 +0000399; NOSSE2-LABEL: test22:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000400; NOSSE2: testb
401; NOSSE2: fcmovne
402
Stephen Linf799e3f2013-07-13 20:38:47 +0000403; NOSSE1-LABEL: test22:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000404; NOSSE1: testb
405; NOSSE1: fcmovne
406
Stephen Linf799e3f2013-07-13 20:38:47 +0000407; NOCMOV-LABEL: test22:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000408; NOCMOV: fstp
409}
410
411define x86_fp80 @test23(i32 %a, i32 %b, x86_fp80 %x) nounwind {
412 %cmp = icmp slt i32 %a, %b
413 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
414 ret x86_fp80 %sel
415
Stephen Linf799e3f2013-07-13 20:38:47 +0000416; SSE-LABEL: test23:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000417; SSE: testb
418; SSE: fcmovne
419
Stephen Linf799e3f2013-07-13 20:38:47 +0000420; NOSSE2-LABEL: test23:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000421; NOSSE2: testb
422; NOSSE2: fcmovne
423
Stephen Linf799e3f2013-07-13 20:38:47 +0000424; NOSSE1-LABEL: test23:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000425; NOSSE1: testb
426; NOSSE1: fcmovne
427
Stephen Linf799e3f2013-07-13 20:38:47 +0000428; NOCMOV-LABEL: test23:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000429; NOCMOV: fstp
430}
431
432define x86_fp80 @test24(i32 %a, i32 %b, x86_fp80 %x) nounwind {
433 %cmp = icmp sle i32 %a, %b
434 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
435 ret x86_fp80 %sel
436
Stephen Linf799e3f2013-07-13 20:38:47 +0000437; SSE-LABEL: test24:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000438; SSE: testb
439; SSE: fcmovne
440
Stephen Linf799e3f2013-07-13 20:38:47 +0000441; NOSSE2-LABEL: test24:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000442; NOSSE2: testb
443; NOSSE2: fcmovne
444
Stephen Linf799e3f2013-07-13 20:38:47 +0000445; NOSSE1-LABEL: test24:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000446; NOSSE1: testb
447; NOSSE1: fcmovne
448
Stephen Linf799e3f2013-07-13 20:38:47 +0000449; NOCMOV-LABEL: test24:
Benjamin Kramer302178b2012-10-07 15:34:27 +0000450; NOCMOV: fstp
451}