1 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s
3 define i32 @fcmp_oeq1(float %x) {
4 ; CHECK-LABEL: fcmp_oeq1
5 ; CHECK: ucomiss %xmm0, %xmm0
6 ; CHECK-NEXT: jp {{LBB.+_1}}
7 %1 = fcmp oeq float %x, %x
8 br i1 %1, label %bb1, label %bb2
15 define i32 @fcmp_oeq2(float %x) {
16 ; CHECK-LABEL: fcmp_oeq2
17 ; CHECK: xorps %xmm1, %xmm1
18 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
19 ; CHECK-NEXT: jne {{LBB.+_1}}
20 ; CHECK-NEXT: jp {{LBB.+_1}}
21 %1 = fcmp oeq float %x, 0.000000e+00
22 br i1 %1, label %bb1, label %bb2
29 define i32 @fcmp_ogt1(float %x) {
30 ; CHECK-LABEL: fcmp_ogt1
32 ; CHECK: movl $1, %eax
33 %1 = fcmp ogt float %x, %x
34 br i1 %1, label %bb1, label %bb2
41 define i32 @fcmp_ogt2(float %x) {
42 ; CHECK-LABEL: fcmp_ogt2
43 ; CHECK: xorps %xmm1, %xmm1
44 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
45 ; CHECK-NEXT: jbe {{LBB.+_1}}
46 %1 = fcmp ogt float %x, 0.000000e+00
47 br i1 %1, label %bb1, label %bb2
54 define i32 @fcmp_oge1(float %x) {
55 ; CHECK-LABEL: fcmp_oge1
56 ; CHECK: ucomiss %xmm0, %xmm0
57 ; CHECK-NEXT: jp {{LBB.+_1}}
58 %1 = fcmp oge float %x, %x
59 br i1 %1, label %bb1, label %bb2
66 define i32 @fcmp_oge2(float %x) {
67 ; CHECK-LABEL: fcmp_oge2
68 ; CHECK: xorps %xmm1, %xmm1
69 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
70 ; CHECK-NEXT: jb {{LBB.+_1}}
71 %1 = fcmp oge float %x, 0.000000e+00
72 br i1 %1, label %bb1, label %bb2
79 define i32 @fcmp_olt1(float %x) {
80 ; CHECK-LABEL: fcmp_olt1
82 ; CHECK: movl $1, %eax
83 %1 = fcmp olt float %x, %x
84 br i1 %1, label %bb1, label %bb2
91 define i32 @fcmp_olt2(float %x) {
92 ; CHECK-LABEL: fcmp_olt2
93 ; CHECK: xorps %xmm1, %xmm1
94 ; CHECK-NEXT: ucomiss %xmm0, %xmm1
95 ; CHECK-NEXT: jbe {{LBB.+_1}}
96 %1 = fcmp olt float %x, 0.000000e+00
97 br i1 %1, label %bb1, label %bb2
104 define i32 @fcmp_ole1(float %x) {
105 ; CHECK-LABEL: fcmp_ole1
106 ; CHECK: ucomiss %xmm0, %xmm0
107 ; CHECK-NEXT: jp {{LBB.+_1}}
108 %1 = fcmp ole float %x, %x
109 br i1 %1, label %bb1, label %bb2
116 define i32 @fcmp_ole2(float %x) {
117 ; CHECK-LABEL: fcmp_ole2
118 ; CHECK: xorps %xmm1, %xmm1
119 ; CHECK-NEXT: ucomiss %xmm0, %xmm1
120 ; CHECK-NEXT: jb {{LBB.+_1}}
121 %1 = fcmp ole float %x, 0.000000e+00
122 br i1 %1, label %bb1, label %bb2
129 define i32 @fcmp_one1(float %x) {
130 ; CHECK-LABEL: fcmp_one1
132 ; CHECK: movl $1, %eax
133 %1 = fcmp one float %x, %x
134 br i1 %1, label %bb1, label %bb2
141 define i32 @fcmp_one2(float %x) {
142 ; CHECK-LABEL: fcmp_one2
143 ; CHECK: xorps %xmm1, %xmm1
144 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
145 ; CHECK-NEXT: je {{LBB.+_1}}
146 %1 = fcmp one float %x, 0.000000e+00
147 br i1 %1, label %bb1, label %bb2
154 define i32 @fcmp_ord1(float %x) {
155 ; CHECK-LABEL: fcmp_ord1
156 ; CHECK: ucomiss %xmm0, %xmm0
157 ; CHECK-NEXT: jp {{LBB.+_1}}
158 %1 = fcmp ord float %x, %x
159 br i1 %1, label %bb1, label %bb2
166 define i32 @fcmp_ord2(float %x) {
167 ; CHECK-LABEL: fcmp_ord2
168 ; CHECK: ucomiss %xmm0, %xmm0
169 ; CHECK-NEXT: jp {{LBB.+_1}}
170 %1 = fcmp ord float %x, 0.000000e+00
171 br i1 %1, label %bb1, label %bb2
178 define i32 @fcmp_uno1(float %x) {
179 ; CHECK-LABEL: fcmp_uno1
180 ; CHECK: ucomiss %xmm0, %xmm0
181 ; CHECK-NEXT: jp {{LBB.+_2}}
182 %1 = fcmp uno float %x, %x
183 br i1 %1, label %bb1, label %bb2
190 define i32 @fcmp_uno2(float %x) {
191 ; CHECK-LABEL: fcmp_uno2
192 ; CHECK: ucomiss %xmm0, %xmm0
193 ; CHECK-NEXT: jp {{LBB.+_2}}
194 %1 = fcmp uno float %x, 0.000000e+00
195 br i1 %1, label %bb1, label %bb2
202 define i32 @fcmp_ueq1(float %x) {
203 ; CHECK-LABEL: fcmp_ueq1
205 %1 = fcmp ueq float %x, %x
206 br i1 %1, label %bb1, label %bb2
213 define i32 @fcmp_ueq2(float %x) {
214 ; CHECK-LABEL: fcmp_ueq2
215 ; CHECK: xorps %xmm1, %xmm1
216 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
217 ; CHECK-NEXT: je {{LBB.+_2}}
218 %1 = fcmp ueq float %x, 0.000000e+00
219 br i1 %1, label %bb1, label %bb2
226 define i32 @fcmp_ugt1(float %x) {
227 ; CHECK-LABEL: fcmp_ugt1
228 ; CHECK: ucomiss %xmm0, %xmm0
229 ; CHECK-NEXT: jnp {{LBB.+_1}}
230 %1 = fcmp ugt float %x, %x
231 br i1 %1, label %bb1, label %bb2
238 define i32 @fcmp_ugt2(float %x) {
239 ; CHECK-LABEL: fcmp_ugt2
240 ; CHECK: xorps %xmm1, %xmm1
241 ; CHECK-NEXT: ucomiss %xmm0, %xmm1
242 ; CHECK-NEXT: jae {{LBB.+_1}}
243 %1 = fcmp ugt float %x, 0.000000e+00
244 br i1 %1, label %bb1, label %bb2
251 define i32 @fcmp_uge1(float %x) {
252 ; CHECK-LABEL: fcmp_uge1
254 %1 = fcmp uge float %x, %x
255 br i1 %1, label %bb1, label %bb2
262 define i32 @fcmp_uge2(float %x) {
263 ; CHECK-LABEL: fcmp_uge2
264 ; CHECK: xorps %xmm1, %xmm1
265 ; CHECK-NEXT: ucomiss %xmm0, %xmm1
266 ; CHECK-NEXT: ja {{LBB.+_1}}
267 %1 = fcmp uge float %x, 0.000000e+00
268 br i1 %1, label %bb1, label %bb2
275 define i32 @fcmp_ult1(float %x) {
276 ; CHECK-LABEL: fcmp_ult1
277 ; CHECK: ucomiss %xmm0, %xmm0
278 ; CHECK-NEXT: jnp {{LBB.+_1}}
279 %1 = fcmp ult float %x, %x
280 br i1 %1, label %bb1, label %bb2
287 define i32 @fcmp_ult2(float %x) {
288 ; CHECK-LABEL: fcmp_ult2
289 ; CHECK: xorps %xmm1, %xmm1
290 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
291 ; CHECK-NEXT: jae {{LBB.+_1}}
292 %1 = fcmp ult float %x, 0.000000e+00
293 br i1 %1, label %bb1, label %bb2
300 define i32 @fcmp_ule1(float %x) {
301 ; CHECK-LABEL: fcmp_ule1
303 %1 = fcmp ule float %x, %x
304 br i1 %1, label %bb1, label %bb2
311 define i32 @fcmp_ule2(float %x) {
312 ; CHECK-LABEL: fcmp_ule2
313 ; CHECK: xorps %xmm1, %xmm1
314 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
315 ; CHECK-NEXT: ja {{LBB.+_1}}
316 %1 = fcmp ule float %x, 0.000000e+00
317 br i1 %1, label %bb1, label %bb2
324 define i32 @fcmp_une1(float %x) {
325 ; CHECK-LABEL: fcmp_une1
326 ; CHECK: ucomiss %xmm0, %xmm0
327 ; CHECK-NEXT: jnp {{LBB.+_1}}
328 %1 = fcmp une float %x, %x
329 br i1 %1, label %bb1, label %bb2
336 define i32 @fcmp_une2(float %x) {
337 ; CHECK-LABEL: fcmp_une2
338 ; CHECK: xorps %xmm1, %xmm1
339 ; CHECK-NEXT: ucomiss %xmm1, %xmm0
340 ; CHECK-NEXT: jne {{LBB.+_2}}
341 ; CHECK-NEXT: jnp {{LBB.+_1}}
342 %1 = fcmp une float %x, 0.000000e+00
343 br i1 %1, label %bb1, label %bb2
350 define i32 @icmp_eq(i32 %x) {
351 ; CHECK-LABEL: icmp_eq
353 ; CHECK: xorl %eax, %eax
354 %1 = icmp eq i32 %x, %x
355 br i1 %1, label %bb1, label %bb2
362 define i32 @icmp_ne(i32 %x) {
363 ; CHECK-LABEL: icmp_ne
365 ; CHECK: movl $1, %eax
366 %1 = icmp ne i32 %x, %x
367 br i1 %1, label %bb1, label %bb2
374 define i32 @icmp_ugt(i32 %x) {
375 ; CHECK-LABEL: icmp_ugt
377 ; CHECK: movl $1, %eax
378 %1 = icmp ugt i32 %x, %x
379 br i1 %1, label %bb1, label %bb2
386 define i32 @icmp_uge(i32 %x) {
387 ; CHECK-LABEL: icmp_uge
389 ; CHECK: xorl %eax, %eax
390 %1 = icmp uge i32 %x, %x
391 br i1 %1, label %bb1, label %bb2
398 define i32 @icmp_ult(i32 %x) {
399 ; CHECK-LABEL: icmp_ult
401 ; CHECK: movl $1, %eax
402 %1 = icmp ult i32 %x, %x
403 br i1 %1, label %bb1, label %bb2
410 define i32 @icmp_ule(i32 %x) {
411 ; CHECK-LABEL: icmp_ule
413 ; CHECK: xorl %eax, %eax
414 %1 = icmp ule i32 %x, %x
415 br i1 %1, label %bb1, label %bb2
422 define i32 @icmp_sgt(i32 %x) {
423 ; CHECK-LABEL: icmp_sgt
425 ; CHECK: movl $1, %eax
426 %1 = icmp sgt i32 %x, %x
427 br i1 %1, label %bb1, label %bb2
434 define i32 @icmp_sge(i32 %x) {
435 ; CHECK-LABEL: icmp_sge
437 ; CHECK: xorl %eax, %eax
438 %1 = icmp sge i32 %x, %x
439 br i1 %1, label %bb1, label %bb2
446 define i32 @icmp_slt(i32 %x) {
447 ; CHECK-LABEL: icmp_slt
449 ; CHECK: movl $1, %eax
450 %1 = icmp slt i32 %x, %x
451 br i1 %1, label %bb1, label %bb2
458 define i32 @icmp_sle(i32 %x) {
459 ; CHECK-LABEL: icmp_sle
461 ; CHECK: xorl %eax, %eax
462 %1 = icmp sle i32 %x, %x
463 br i1 %1, label %bb1, label %bb2