xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/cmov-fp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march x86 -mcpu pentium4 < %s | FileCheck %s -check-prefix=SSE
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march x86 -mcpu pentium3 < %s | FileCheck %s -check-prefix=NOSSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march x86 -mcpu pentium2 < %s | FileCheck %s -check-prefix=NOSSE1
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march x86 -mcpu pentium < %s | FileCheck %s -check-prefix=NOCMOV
5*9880d681SAndroid Build Coastguard Worker; PR14035
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine double @test1(i32 %a, i32 %b, double %x) nounwind {
8*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %a, %b
9*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
10*9880d681SAndroid Build Coastguard Worker  ret double %sel
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test1:
13*9880d681SAndroid Build Coastguard Worker; SSE: movsd
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test1:
16*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovnbe
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test1:
19*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnbe
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test1:
22*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine double @test2(i32 %a, i32 %b, double %x) nounwind {
27*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %a, %b
28*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
29*9880d681SAndroid Build Coastguard Worker  ret double %sel
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2:
32*9880d681SAndroid Build Coastguard Worker; SSE: movsd
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test2:
35*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovnb
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test2:
38*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnb
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test2:
41*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine double @test3(i32 %a, i32 %b, double %x) nounwind {
45*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %a, %b
46*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
47*9880d681SAndroid Build Coastguard Worker  ret double %sel
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test3:
50*9880d681SAndroid Build Coastguard Worker; SSE: movsd
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test3:
53*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovb
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test3:
56*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovb
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test3:
59*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine double @test4(i32 %a, i32 %b, double %x) nounwind {
63*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %a, %b
64*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
65*9880d681SAndroid Build Coastguard Worker  ret double %sel
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test4:
68*9880d681SAndroid Build Coastguard Worker; SSE: movsd
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test4:
71*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovbe
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test4:
74*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovbe
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test4:
77*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine double @test5(i32 %a, i32 %b, double %x) nounwind {
81*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %a, %b
82*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
83*9880d681SAndroid Build Coastguard Worker  ret double %sel
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test5:
86*9880d681SAndroid Build Coastguard Worker; SSE: movsd
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test5:
89*9880d681SAndroid Build Coastguard Worker; NOSSE2: fstp
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test5:
92*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test5:
95*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine double @test6(i32 %a, i32 %b, double %x) nounwind {
99*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %a, %b
100*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
101*9880d681SAndroid Build Coastguard Worker  ret double %sel
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test6:
104*9880d681SAndroid Build Coastguard Worker; SSE: movsd
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test6:
107*9880d681SAndroid Build Coastguard Worker; NOSSE2: fstp
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test6:
110*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test6:
113*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdefine double @test7(i32 %a, i32 %b, double %x) nounwind {
117*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %a, %b
118*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
119*9880d681SAndroid Build Coastguard Worker  ret double %sel
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test7:
122*9880d681SAndroid Build Coastguard Worker; SSE: movsd
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test7:
125*9880d681SAndroid Build Coastguard Worker; NOSSE2: fstp
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test7:
128*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test7:
131*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine double @test8(i32 %a, i32 %b, double %x) nounwind {
135*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %a, %b
136*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, double 99.0, double %x
137*9880d681SAndroid Build Coastguard Worker  ret double %sel
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test8:
140*9880d681SAndroid Build Coastguard Worker; SSE: movsd
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test8:
143*9880d681SAndroid Build Coastguard Worker; NOSSE2: fstp
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test8:
146*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test8:
149*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerdefine float @test9(i32 %a, i32 %b, float %x) nounwind {
153*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %a, %b
154*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
155*9880d681SAndroid Build Coastguard Worker  ret float %sel
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test9:
158*9880d681SAndroid Build Coastguard Worker; SSE: movss
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test9:
161*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test9:
164*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnbe
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test9:
167*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerdefine float @test10(i32 %a, i32 %b, float %x) nounwind {
171*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %a, %b
172*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
173*9880d681SAndroid Build Coastguard Worker  ret float %sel
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test10:
176*9880d681SAndroid Build Coastguard Worker; SSE: movss
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test10:
179*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test10:
182*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnb
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test10:
185*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
186*9880d681SAndroid Build Coastguard Worker}
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Workerdefine float @test11(i32 %a, i32 %b, float %x) nounwind {
189*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %a, %b
190*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
191*9880d681SAndroid Build Coastguard Worker  ret float %sel
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test11:
194*9880d681SAndroid Build Coastguard Worker; SSE: movss
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test11:
197*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test11:
200*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovb
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test11:
203*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
204*9880d681SAndroid Build Coastguard Worker}
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerdefine float @test12(i32 %a, i32 %b, float %x) nounwind {
207*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %a, %b
208*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
209*9880d681SAndroid Build Coastguard Worker  ret float %sel
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test12:
212*9880d681SAndroid Build Coastguard Worker; SSE: movss
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test12:
215*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test12:
218*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovbe
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test12:
221*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerdefine float @test13(i32 %a, i32 %b, float %x) nounwind {
225*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %a, %b
226*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
227*9880d681SAndroid Build Coastguard Worker  ret float %sel
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test13:
230*9880d681SAndroid Build Coastguard Worker; SSE: movss
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test13:
233*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test13:
236*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test13:
239*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine float @test14(i32 %a, i32 %b, float %x) nounwind {
243*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %a, %b
244*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
245*9880d681SAndroid Build Coastguard Worker  ret float %sel
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test14:
248*9880d681SAndroid Build Coastguard Worker; SSE: movss
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test14:
251*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test14:
254*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test14:
257*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine float @test15(i32 %a, i32 %b, float %x) nounwind {
261*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %a, %b
262*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
263*9880d681SAndroid Build Coastguard Worker  ret float %sel
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test15:
266*9880d681SAndroid Build Coastguard Worker; SSE: movss
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test15:
269*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test15:
272*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test15:
275*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine float @test16(i32 %a, i32 %b, float %x) nounwind {
279*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %a, %b
280*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, float 99.0, float %x
281*9880d681SAndroid Build Coastguard Worker  ret float %sel
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test16:
284*9880d681SAndroid Build Coastguard Worker; SSE: movss
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test16:
287*9880d681SAndroid Build Coastguard Worker; NOSSE2: movss
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test16:
290*9880d681SAndroid Build Coastguard Worker; NOSSE1: fstp
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test16:
293*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test17(i32 %a, i32 %b, x86_fp80 %x) nounwind {
297*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %a, %b
298*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
299*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test17:
302*9880d681SAndroid Build Coastguard Worker; SSE: fcmovnbe
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test17:
305*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovnbe
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test17:
308*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnbe
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test17:
311*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test18(i32 %a, i32 %b, x86_fp80 %x) nounwind {
315*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %a, %b
316*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
317*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test18:
320*9880d681SAndroid Build Coastguard Worker; SSE: fcmovnb
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test18:
323*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovnb
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test18:
326*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovnb
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test18:
329*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
330*9880d681SAndroid Build Coastguard Worker}
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test19(i32 %a, i32 %b, x86_fp80 %x) nounwind {
333*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %a, %b
334*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
335*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test19:
338*9880d681SAndroid Build Coastguard Worker; SSE: fcmovb
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test19:
341*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovb
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test19:
344*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovb
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test19:
347*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test20(i32 %a, i32 %b, x86_fp80 %x) nounwind {
351*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %a, %b
352*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
353*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test20:
356*9880d681SAndroid Build Coastguard Worker; SSE: fcmovbe
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test20:
359*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovbe
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test20:
362*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovbe
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test20:
365*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
366*9880d681SAndroid Build Coastguard Worker}
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test21(i32 %a, i32 %b, x86_fp80 %x) nounwind {
369*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %a, %b
370*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
371*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker; We don't emit a branch for fp80, why?
374*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test21:
375*9880d681SAndroid Build Coastguard Worker; SSE: testb
376*9880d681SAndroid Build Coastguard Worker; SSE: fcmovne
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test21:
379*9880d681SAndroid Build Coastguard Worker; NOSSE2: testb
380*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovne
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test21:
383*9880d681SAndroid Build Coastguard Worker; NOSSE1: testb
384*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovne
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test21:
387*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
388*9880d681SAndroid Build Coastguard Worker}
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test22(i32 %a, i32 %b, x86_fp80 %x) nounwind {
391*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %a, %b
392*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
393*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test22:
396*9880d681SAndroid Build Coastguard Worker; SSE: testb
397*9880d681SAndroid Build Coastguard Worker; SSE: fcmovne
398*9880d681SAndroid Build Coastguard Worker
399*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test22:
400*9880d681SAndroid Build Coastguard Worker; NOSSE2: testb
401*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovne
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test22:
404*9880d681SAndroid Build Coastguard Worker; NOSSE1: testb
405*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovne
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test22:
408*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
409*9880d681SAndroid Build Coastguard Worker}
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test23(i32 %a, i32 %b, x86_fp80 %x) nounwind {
412*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %a, %b
413*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
414*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test23:
417*9880d681SAndroid Build Coastguard Worker; SSE: testb
418*9880d681SAndroid Build Coastguard Worker; SSE: fcmovne
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test23:
421*9880d681SAndroid Build Coastguard Worker; NOSSE2: testb
422*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovne
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test23:
425*9880d681SAndroid Build Coastguard Worker; NOSSE1: testb
426*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovne
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test23:
429*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
430*9880d681SAndroid Build Coastguard Worker}
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Workerdefine x86_fp80 @test24(i32 %a, i32 %b, x86_fp80 %x) nounwind {
433*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %a, %b
434*9880d681SAndroid Build Coastguard Worker  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x
435*9880d681SAndroid Build Coastguard Worker  ret x86_fp80 %sel
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test24:
438*9880d681SAndroid Build Coastguard Worker; SSE: testb
439*9880d681SAndroid Build Coastguard Worker; SSE: fcmovne
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Worker; NOSSE2-LABEL: test24:
442*9880d681SAndroid Build Coastguard Worker; NOSSE2: testb
443*9880d681SAndroid Build Coastguard Worker; NOSSE2: fcmovne
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Worker; NOSSE1-LABEL: test24:
446*9880d681SAndroid Build Coastguard Worker; NOSSE1: testb
447*9880d681SAndroid Build Coastguard Worker; NOSSE1: fcmovne
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Worker; NOCMOV-LABEL: test24:
450*9880d681SAndroid Build Coastguard Worker; NOCMOV: fstp
451*9880d681SAndroid Build Coastguard Worker}
452