1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=SDAG 2 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=FAST 3 4 define zeroext i1 @fcmp_oeq(float %x, float %y) { 5 ; SDAG-LABEL: fcmp_oeq 6 ; SDAG: cmpeqss %xmm1, %xmm0 7 ; SDAG-NEXT: movd %xmm0, %eax 8 ; SDAG-NEXT: andl $1, %eax 9 ; FAST-LABEL: fcmp_oeq 10 ; FAST: ucomiss %xmm1, %xmm0 11 ; FAST-NEXT: sete %al 12 ; FAST-NEXT: setnp %cl 13 ; FAST-NEXT: andb %al, %cl 14 %1 = fcmp oeq float %x, %y 15 ret i1 %1 16 } 17 18 define zeroext i1 @fcmp_ogt(float %x, float %y) { 19 ; SDAG-LABEL: fcmp_ogt 20 ; SDAG: ucomiss %xmm1, %xmm0 21 ; SDAG-NEXT: seta %al 22 ; FAST: ucomiss %xmm1, %xmm0 23 ; FAST-NEXT: seta %al 24 %1 = fcmp ogt float %x, %y 25 ret i1 %1 26 } 27 28 define zeroext i1 @fcmp_oge(float %x, float %y) { 29 ; SDAG-LABEL: fcmp_oge 30 ; SDAG: ucomiss %xmm1, %xmm0 31 ; SDAG-NEXT: setae %al 32 ; FAST-LABEL: fcmp_oge 33 ; FAST: ucomiss %xmm1, %xmm0 34 ; FAST-NEXT: setae %al 35 %1 = fcmp oge float %x, %y 36 ret i1 %1 37 } 38 39 define zeroext i1 @fcmp_olt(float %x, float %y) { 40 ; SDAG-LABEL: fcmp_olt 41 ; SDAG: ucomiss %xmm0, %xmm1 42 ; SDAG-NEXT: seta %al 43 ; FAST-LABEL: fcmp_olt 44 ; FAST: ucomiss %xmm0, %xmm1 45 ; FAST-NEXT: seta %al 46 %1 = fcmp olt float %x, %y 47 ret i1 %1 48 } 49 50 define zeroext i1 @fcmp_ole(float %x, float %y) { 51 ; SDAG-LABEL: fcmp_ole 52 ; SDAG: ucomiss %xmm0, %xmm1 53 ; SDAG-NEXT: setae %al 54 ; FAST-LABEL: fcmp_ole 55 ; FAST: ucomiss %xmm0, %xmm1 56 ; FAST-NEXT: setae %al 57 %1 = fcmp ole float %x, %y 58 ret i1 %1 59 } 60 61 define zeroext i1 @fcmp_one(float %x, float %y) { 62 ; SDAG-LABEL: fcmp_one 63 ; SDAG: ucomiss %xmm1, %xmm0 64 ; SDAG-NEXT: setne %al 65 ; FAST-LABEL: fcmp_one 66 ; FAST: ucomiss %xmm1, %xmm0 67 ; FAST-NEXT: setne %al 68 %1 = fcmp one float %x, %y 69 ret i1 %1 70 } 71 72 define zeroext i1 @fcmp_ord(float %x, float %y) { 73 ; SDAG-LABEL: fcmp_ord 74 ; SDAG: ucomiss %xmm1, %xmm0 75 ; SDAG-NEXT: setnp %al 76 ; FAST-LABEL: fcmp_ord 77 ; FAST: ucomiss %xmm1, %xmm0 78 ; FAST-NEXT: setnp %al 79 %1 = fcmp ord float %x, %y 80 ret i1 %1 81 } 82 83 define zeroext i1 @fcmp_uno(float %x, float %y) { 84 ; SDAG-LABEL: fcmp_uno 85 ; SDAG: ucomiss %xmm1, %xmm0 86 ; SDAG-NEXT: setp %al 87 ; FAST-LABEL: fcmp_uno 88 ; FAST: ucomiss %xmm1, %xmm0 89 ; FAST-NEXT: setp %al 90 %1 = fcmp uno float %x, %y 91 ret i1 %1 92 } 93 94 define zeroext i1 @fcmp_ueq(float %x, float %y) { 95 ; SDAG-LABEL: fcmp_ueq 96 ; SDAG: ucomiss %xmm1, %xmm0 97 ; SDAG-NEXT: sete %al 98 ; FAST-LABEL: fcmp_ueq 99 ; FAST: ucomiss %xmm1, %xmm0 100 ; FAST-NEXT: sete %al 101 %1 = fcmp ueq float %x, %y 102 ret i1 %1 103 } 104 105 define zeroext i1 @fcmp_ugt(float %x, float %y) { 106 ; SDAG-LABEL: fcmp_ugt 107 ; SDAG: ucomiss %xmm0, %xmm1 108 ; SDAG-NEXT: setb %al 109 ; FAST-LABEL: fcmp_ugt 110 ; FAST: ucomiss %xmm0, %xmm1 111 ; FAST-NEXT: setb %al 112 %1 = fcmp ugt float %x, %y 113 ret i1 %1 114 } 115 116 define zeroext i1 @fcmp_uge(float %x, float %y) { 117 ; SDAG-LABEL: fcmp_uge 118 ; SDAG: ucomiss %xmm0, %xmm1 119 ; SDAG-NEXT: setbe %al 120 ; FAST-LABEL: fcmp_uge 121 ; FAST: ucomiss %xmm0, %xmm1 122 ; FAST-NEXT: setbe %al 123 %1 = fcmp uge float %x, %y 124 ret i1 %1 125 } 126 127 define zeroext i1 @fcmp_ult(float %x, float %y) { 128 ; SDAG-LABEL: fcmp_ult 129 ; SDAG: ucomiss %xmm1, %xmm0 130 ; SDAG-NEXT: setb %al 131 ; FAST-LABEL: fcmp_ult 132 ; FAST: ucomiss %xmm1, %xmm0 133 ; FAST-NEXT: setb %al 134 %1 = fcmp ult float %x, %y 135 ret i1 %1 136 } 137 138 define zeroext i1 @fcmp_ule(float %x, float %y) { 139 ; SDAG-LABEL: fcmp_ule 140 ; SDAG: ucomiss %xmm1, %xmm0 141 ; SDAG-NEXT: setbe %al 142 ; FAST-LABEL: fcmp_ule 143 ; FAST: ucomiss %xmm1, %xmm0 144 ; FAST-NEXT: setbe %al 145 %1 = fcmp ule float %x, %y 146 ret i1 %1 147 } 148 149 define zeroext i1 @fcmp_une(float %x, float %y) { 150 ; SDAG-LABEL: fcmp_une 151 ; SDAG: cmpneqss %xmm1, %xmm0 152 ; SDAG-NEXT: movd %xmm0, %eax 153 ; SDAG-NEXT: andl $1, %eax 154 ; FAST-LABEL: fcmp_une 155 ; FAST: ucomiss %xmm1, %xmm0 156 ; FAST-NEXT: setne %al 157 ; FAST-NEXT: setp %cl 158 ; FAST-NEXT: orb %al, %cl 159 %1 = fcmp une float %x, %y 160 ret i1 %1 161 } 162 163 define zeroext i1 @icmp_eq(i32 %x, i32 %y) { 164 ; SDAG-LABEL: icmp_eq 165 ; SDAG: cmpl %esi, %edi 166 ; SDAG-NEXT: sete %al 167 ; FAST-LABEL: icmp_eq 168 ; FAST: cmpl %esi, %edi 169 ; FAST-NEXT: sete %al 170 %1 = icmp eq i32 %x, %y 171 ret i1 %1 172 } 173 174 define zeroext i1 @icmp_ne(i32 %x, i32 %y) { 175 ; SDAG-LABEL: icmp_ne 176 ; SDAG: cmpl %esi, %edi 177 ; SDAG-NEXT: setne %al 178 ; FAST-LABEL: icmp_ne 179 ; FAST: cmpl %esi, %edi 180 ; FAST-NEXT: setne %al 181 %1 = icmp ne i32 %x, %y 182 ret i1 %1 183 } 184 185 define zeroext i1 @icmp_ugt(i32 %x, i32 %y) { 186 ; SDAG-LABEL: icmp_ugt 187 ; SDAG: cmpl %edi, %esi 188 ; SDAG-NEXT: setb %al 189 ; FAST-LABEL: icmp_ugt 190 ; FAST: cmpl %esi, %edi 191 ; FAST-NEXT: seta %al 192 %1 = icmp ugt i32 %x, %y 193 ret i1 %1 194 } 195 196 define zeroext i1 @icmp_uge(i32 %x, i32 %y) { 197 ; SDAG-LABEL: icmp_uge 198 ; SDAG: cmpl %esi, %edi 199 ; SDAG-NEXT: setae %al 200 ; FAST-LABEL: icmp_uge 201 ; FAST: cmpl %esi, %edi 202 ; FAST-NEXT: setae %al 203 %1 = icmp uge i32 %x, %y 204 ret i1 %1 205 } 206 207 define zeroext i1 @icmp_ult(i32 %x, i32 %y) { 208 ; SDAG-LABEL: icmp_ult 209 ; SDAG: cmpl %esi, %edi 210 ; SDAG-NEXT: setb %al 211 ; FAST-LABEL: icmp_ult 212 ; FAST: cmpl %esi, %edi 213 ; FAST-NEXT: setb %al 214 %1 = icmp ult i32 %x, %y 215 ret i1 %1 216 } 217 218 define zeroext i1 @icmp_ule(i32 %x, i32 %y) { 219 ; SDAG-LABEL: icmp_ule 220 ; SDAG: cmpl %esi, %edi 221 ; SDAG-NEXT: setbe %al 222 ; FAST-LABEL: icmp_ule 223 ; FAST: cmpl %esi, %edi 224 ; FAST-NEXT: setbe %al 225 %1 = icmp ule i32 %x, %y 226 ret i1 %1 227 } 228 229 define zeroext i1 @icmp_sgt(i32 %x, i32 %y) { 230 ; SDAG-LABEL: icmp_sgt 231 ; SDAG: cmpl %esi, %edi 232 ; SDAG-NEXT: setg %al 233 ; FAST-LABEL: icmp_sgt 234 ; FAST: cmpl %esi, %edi 235 ; FAST-NEXT: setg %al 236 %1 = icmp sgt i32 %x, %y 237 ret i1 %1 238 } 239 240 define zeroext i1 @icmp_sge(i32 %x, i32 %y) { 241 ; SDAG-LABEL: icmp_sge 242 ; SDAG: cmpl %esi, %edi 243 ; SDAG-NEXT: setge %al 244 ; FAST-LABEL: icmp_sge 245 ; FAST: cmpl %esi, %edi 246 ; FAST-NEXT: setge %al 247 %1 = icmp sge i32 %x, %y 248 ret i1 %1 249 } 250 251 define zeroext i1 @icmp_slt(i32 %x, i32 %y) { 252 ; SDAG-LABEL: icmp_slt 253 ; SDAG: cmpl %esi, %edi 254 ; SDAG-NEXT: setl %al 255 ; FAST-LABEL: icmp_slt 256 ; FAST: cmpl %esi, %edi 257 ; FAST-NEXT: setl %al 258 %1 = icmp slt i32 %x, %y 259 ret i1 %1 260 } 261 262 define zeroext i1 @icmp_sle(i32 %x, i32 %y) { 263 ; SDAG-LABEL: icmp_sle 264 ; SDAG: cmpl %esi, %edi 265 ; SDAG-NEXT: setle %al 266 ; FAST-LABEL: icmp_sle 267 ; FAST: cmpl %esi, %edi 268 ; FAST-NEXT: setle %al 269 %1 = icmp sle i32 %x, %y 270 ret i1 %1 271 } 272 273 ; Test cmp folding and condition optimization. 274 define zeroext i1 @fcmp_oeq2(float %x) { 275 ; SDAG-LABEL: fcmp_oeq2 276 ; SDAG: ucomiss %xmm0, %xmm0 277 ; SDAG-NEXT: setnp %al 278 ; FAST-LABEL: fcmp_oeq2 279 ; FAST: ucomiss %xmm0, %xmm0 280 ; FAST-NEXT: setnp %al 281 %1 = fcmp oeq float %x, %x 282 ret i1 %1 283 } 284 285 define zeroext i1 @fcmp_oeq3(float %x) { 286 ; SDAG-LABEL: fcmp_oeq3 287 ; SDAG: xorps %xmm1, %xmm1 288 ; SDAG-NEXT: cmpeqss %xmm1, %xmm0 289 ; SDAG-NEXT: movd %xmm0, %eax 290 ; SDAG-NEXT: andl $1, %eax 291 ; FAST-LABEL: fcmp_oeq3 292 ; FAST: xorps %xmm1, %xmm1 293 ; FAST-NEXT: ucomiss %xmm1, %xmm0 294 ; FAST-NEXT: sete %al 295 ; FAST-NEXT: setnp %cl 296 ; FAST-NEXT: andb %al, %cl 297 %1 = fcmp oeq float %x, 0.000000e+00 298 ret i1 %1 299 } 300 301 define zeroext i1 @fcmp_ogt2(float %x) { 302 ; SDAG-LABEL: fcmp_ogt2 303 ; SDAG: xorl %eax, %eax 304 ; FAST-LABEL: fcmp_ogt2 305 ; FAST: xorl %eax, %eax 306 %1 = fcmp ogt float %x, %x 307 ret i1 %1 308 } 309 310 define zeroext i1 @fcmp_ogt3(float %x) { 311 ; SDAG-LABEL: fcmp_ogt3 312 ; SDAG: xorps %xmm1, %xmm1 313 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 314 ; SDAG-NEXT: seta %al 315 ; FAST-LABEL: fcmp_ogt3 316 ; FAST: xorps %xmm1, %xmm1 317 ; FAST-NEXT: ucomiss %xmm1, %xmm0 318 ; FAST-NEXT: seta %al 319 %1 = fcmp ogt float %x, 0.000000e+00 320 ret i1 %1 321 } 322 323 define zeroext i1 @fcmp_oge2(float %x) { 324 ; SDAG-LABEL: fcmp_oge2 325 ; SDAG: ucomiss %xmm0, %xmm0 326 ; SDAG-NEXT: setnp %al 327 ; FAST-LABEL: fcmp_oge2 328 ; FAST: ucomiss %xmm0, %xmm0 329 ; FAST-NEXT: setnp %al 330 %1 = fcmp oge float %x, %x 331 ret i1 %1 332 } 333 334 define zeroext i1 @fcmp_oge3(float %x) { 335 ; SDAG-LABEL: fcmp_oge3 336 ; SDAG: xorps %xmm1, %xmm1 337 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 338 ; SDAG-NEXT: setae %al 339 ; FAST-LABEL: fcmp_oge3 340 ; FAST: xorps %xmm1, %xmm1 341 ; FAST-NEXT: ucomiss %xmm1, %xmm0 342 ; FAST-NEXT: setae %al 343 %1 = fcmp oge float %x, 0.000000e+00 344 ret i1 %1 345 } 346 347 define zeroext i1 @fcmp_olt2(float %x) { 348 ; SDAG-LABEL: fcmp_olt2 349 ; SDAG: xorl %eax, %eax 350 ; FAST-LABEL: fcmp_olt2 351 ; FAST: xorl %eax, %eax 352 %1 = fcmp olt float %x, %x 353 ret i1 %1 354 } 355 356 define zeroext i1 @fcmp_olt3(float %x) { 357 ; SDAG-LABEL: fcmp_olt3 358 ; SDAG: xorps %xmm1, %xmm1 359 ; SDAG-NEXT: ucomiss %xmm0, %xmm1 360 ; SDAG-NEXT: seta %al 361 ; FAST-LABEL: fcmp_olt3 362 ; FAST: xorps %xmm1, %xmm1 363 ; FAST-NEXT: ucomiss %xmm0, %xmm1 364 ; FAST-NEXT: seta %al 365 %1 = fcmp olt float %x, 0.000000e+00 366 ret i1 %1 367 } 368 369 define zeroext i1 @fcmp_ole2(float %x) { 370 ; SDAG-LABEL: fcmp_ole2 371 ; SDAG: ucomiss %xmm0, %xmm0 372 ; SDAG-NEXT: setnp %al 373 ; FAST-LABEL: fcmp_ole2 374 ; FAST: ucomiss %xmm0, %xmm0 375 ; FAST-NEXT: setnp %al 376 %1 = fcmp ole float %x, %x 377 ret i1 %1 378 } 379 380 define zeroext i1 @fcmp_ole3(float %x) { 381 ; SDAG-LABEL: fcmp_ole3 382 ; SDAG: xorps %xmm1, %xmm1 383 ; SDAG-NEXT: ucomiss %xmm0, %xmm1 384 ; SDAG-NEXT: setae %al 385 ; FAST-LABEL: fcmp_ole3 386 ; FAST: xorps %xmm1, %xmm1 387 ; FAST-NEXT: ucomiss %xmm0, %xmm1 388 ; FAST-NEXT: setae %al 389 %1 = fcmp ole float %x, 0.000000e+00 390 ret i1 %1 391 } 392 393 define zeroext i1 @fcmp_one2(float %x) { 394 ; SDAG-LABEL: fcmp_one2 395 ; SDAG: xorl %eax, %eax 396 ; FAST-LABEL: fcmp_one2 397 ; FAST: xorl %eax, %eax 398 %1 = fcmp one float %x, %x 399 ret i1 %1 400 } 401 402 define zeroext i1 @fcmp_one3(float %x) { 403 ; SDAG-LABEL: fcmp_one3 404 ; SDAG: xorps %xmm1, %xmm1 405 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 406 ; SDAG-NEXT: setne %al 407 ; FAST-LABEL: fcmp_one3 408 ; FAST: xorps %xmm1, %xmm1 409 ; FAST-NEXT: ucomiss %xmm1, %xmm0 410 ; FAST-NEXT: setne %al 411 %1 = fcmp one float %x, 0.000000e+00 412 ret i1 %1 413 } 414 415 define zeroext i1 @fcmp_ord2(float %x) { 416 ; SDAG-LABEL: fcmp_ord2 417 ; SDAG: ucomiss %xmm0, %xmm0 418 ; SDAG-NEXT: setnp %al 419 ; FAST-LABEL: fcmp_ord2 420 ; FAST: ucomiss %xmm0, %xmm0 421 ; FAST-NEXT: setnp %al 422 %1 = fcmp ord float %x, %x 423 ret i1 %1 424 } 425 426 define zeroext i1 @fcmp_ord3(float %x) { 427 ; SDAG-LABEL: fcmp_ord3 428 ; SDAG: ucomiss %xmm0, %xmm0 429 ; SDAG-NEXT: setnp %al 430 ; FAST-LABEL: fcmp_ord3 431 ; FAST: ucomiss %xmm0, %xmm0 432 ; FAST-NEXT: setnp %al 433 %1 = fcmp ord float %x, 0.000000e+00 434 ret i1 %1 435 } 436 437 define zeroext i1 @fcmp_uno2(float %x) { 438 ; SDAG-LABEL: fcmp_uno2 439 ; SDAG: ucomiss %xmm0, %xmm0 440 ; SDAG-NEXT: setp %al 441 ; FAST-LABEL: fcmp_uno2 442 ; FAST: ucomiss %xmm0, %xmm0 443 ; FAST-NEXT: setp %al 444 %1 = fcmp uno float %x, %x 445 ret i1 %1 446 } 447 448 define zeroext i1 @fcmp_uno3(float %x) { 449 ; SDAG-LABEL: fcmp_uno3 450 ; SDAG: ucomiss %xmm0, %xmm0 451 ; SDAG-NEXT: setp %al 452 ; FAST-LABEL: fcmp_uno3 453 ; FAST: ucomiss %xmm0, %xmm0 454 ; FAST-NEXT: setp %al 455 %1 = fcmp uno float %x, 0.000000e+00 456 ret i1 %1 457 } 458 459 define zeroext i1 @fcmp_ueq2(float %x) { 460 ; SDAG-LABEL: fcmp_ueq2 461 ; SDAG: movb $1, %al 462 ; FAST-LABEL: fcmp_ueq2 463 ; FAST: movb $1, %al 464 %1 = fcmp ueq float %x, %x 465 ret i1 %1 466 } 467 468 define zeroext i1 @fcmp_ueq3(float %x) { 469 ; SDAG-LABEL: fcmp_ueq3 470 ; SDAG: xorps %xmm1, %xmm1 471 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 472 ; SDAG-NEXT: sete %al 473 ; FAST-LABEL: fcmp_ueq3 474 ; FAST: xorps %xmm1, %xmm1 475 ; FAST-NEXT: ucomiss %xmm1, %xmm0 476 ; FAST-NEXT: sete %al 477 %1 = fcmp ueq float %x, 0.000000e+00 478 ret i1 %1 479 } 480 481 define zeroext i1 @fcmp_ugt2(float %x) { 482 ; SDAG-LABEL: fcmp_ugt2 483 ; SDAG: ucomiss %xmm0, %xmm0 484 ; SDAG-NEXT: setp %al 485 ; FAST-LABEL: fcmp_ugt2 486 ; FAST: ucomiss %xmm0, %xmm0 487 ; FAST-NEXT: setp %al 488 %1 = fcmp ugt float %x, %x 489 ret i1 %1 490 } 491 492 define zeroext i1 @fcmp_ugt3(float %x) { 493 ; SDAG-LABEL: fcmp_ugt3 494 ; SDAG: xorps %xmm1, %xmm1 495 ; SDAG-NEXT: ucomiss %xmm0, %xmm1 496 ; SDAG-NEXT: setb %al 497 ; FAST-LABEL: fcmp_ugt3 498 ; FAST: xorps %xmm1, %xmm1 499 ; FAST-NEXT: ucomiss %xmm0, %xmm1 500 ; FAST-NEXT: setb %al 501 %1 = fcmp ugt float %x, 0.000000e+00 502 ret i1 %1 503 } 504 505 define zeroext i1 @fcmp_uge2(float %x) { 506 ; SDAG-LABEL: fcmp_uge2 507 ; SDAG: movb $1, %al 508 ; FAST-LABEL: fcmp_uge2 509 ; FAST: movb $1, %al 510 %1 = fcmp uge float %x, %x 511 ret i1 %1 512 } 513 514 define zeroext i1 @fcmp_uge3(float %x) { 515 ; SDAG-LABEL: fcmp_uge3 516 ; SDAG: xorps %xmm1, %xmm1 517 ; SDAG-NEXT: ucomiss %xmm0, %xmm1 518 ; SDAG-NEXT: setbe %al 519 ; FAST-LABEL: fcmp_uge3 520 ; FAST: xorps %xmm1, %xmm1 521 ; FAST-NEXT: ucomiss %xmm0, %xmm1 522 ; FAST-NEXT: setbe %al 523 %1 = fcmp uge float %x, 0.000000e+00 524 ret i1 %1 525 } 526 527 define zeroext i1 @fcmp_ult2(float %x) { 528 ; SDAG-LABEL: fcmp_ult2 529 ; SDAG: ucomiss %xmm0, %xmm0 530 ; SDAG-NEXT: setp %al 531 ; FAST-LABEL: fcmp_ult2 532 ; FAST: ucomiss %xmm0, %xmm0 533 ; FAST-NEXT: setp %al 534 %1 = fcmp ult float %x, %x 535 ret i1 %1 536 } 537 538 define zeroext i1 @fcmp_ult3(float %x) { 539 ; SDAG-LABEL: fcmp_ult3 540 ; SDAG: xorps %xmm1, %xmm1 541 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 542 ; SDAG-NEXT: setb %al 543 ; FAST-LABEL: fcmp_ult3 544 ; FAST: xorps %xmm1, %xmm1 545 ; FAST-NEXT: ucomiss %xmm1, %xmm0 546 ; FAST-NEXT: setb %al 547 %1 = fcmp ult float %x, 0.000000e+00 548 ret i1 %1 549 } 550 551 define zeroext i1 @fcmp_ule2(float %x) { 552 ; SDAG-LABEL: fcmp_ule2 553 ; SDAG: movb $1, %al 554 ; FAST-LABEL: fcmp_ule2 555 ; FAST: movb $1, %al 556 %1 = fcmp ule float %x, %x 557 ret i1 %1 558 } 559 560 define zeroext i1 @fcmp_ule3(float %x) { 561 ; SDAG-LABEL: fcmp_ule3 562 ; SDAG: xorps %xmm1, %xmm1 563 ; SDAG-NEXT: ucomiss %xmm1, %xmm0 564 ; SDAG-NEXT: setbe %al 565 ; FAST-LABEL: fcmp_ule3 566 ; FAST: xorps %xmm1, %xmm1 567 ; FAST-NEXT: ucomiss %xmm1, %xmm0 568 ; FAST-NEXT: setbe %al 569 %1 = fcmp ule float %x, 0.000000e+00 570 ret i1 %1 571 } 572 573 define zeroext i1 @fcmp_une2(float %x) { 574 ; SDAG-LABEL: fcmp_une2 575 ; SDAG: ucomiss %xmm0, %xmm0 576 ; SDAG-NEXT: setp %al 577 ; FAST-LABEL: fcmp_une2 578 ; FAST: ucomiss %xmm0, %xmm0 579 ; FAST-NEXT: setp %al 580 %1 = fcmp une float %x, %x 581 ret i1 %1 582 } 583 584 define zeroext i1 @fcmp_une3(float %x) { 585 ; SDAG-LABEL: fcmp_une3 586 ; SDAG: xorps %xmm1, %xmm1 587 ; SDAG-NEXT: cmpneqss %xmm1, %xmm0 588 ; SDAG-NEXT: movd %xmm0, %eax 589 ; SDAG-NEXT: andl $1, %eax 590 ; FAST-LABEL: fcmp_une3 591 ; FAST: xorps %xmm1, %xmm1 592 ; FAST-NEXT: ucomiss %xmm1, %xmm0 593 ; FAST-NEXT: setne %al 594 ; FAST-NEXT: setp %cl 595 ; FAST-NEXT: orb %al, %cl 596 %1 = fcmp une float %x, 0.000000e+00 597 ret i1 %1 598 } 599 600 define zeroext i1 @icmp_eq2(i32 %x) { 601 ; SDAG-LABEL: icmp_eq2 602 ; SDAG: movb $1, %al 603 ; FAST-LABEL: icmp_eq2 604 ; FAST: movb $1, %al 605 %1 = icmp eq i32 %x, %x 606 ret i1 %1 607 } 608 609 define zeroext i1 @icmp_ne2(i32 %x) { 610 ; SDAG-LABEL: icmp_ne2 611 ; SDAG: xorl %eax, %eax 612 ; FAST-LABEL: icmp_ne2 613 ; FAST: xorl %eax, %eax 614 %1 = icmp ne i32 %x, %x 615 ret i1 %1 616 } 617 618 define zeroext i1 @icmp_ugt2(i32 %x) { 619 ; SDAG-LABEL: icmp_ugt2 620 ; SDAG: xorl %eax, %eax 621 ; FAST-LABEL: icmp_ugt2 622 ; FAST: xorl %eax, %eax 623 %1 = icmp ugt i32 %x, %x 624 ret i1 %1 625 } 626 627 define zeroext i1 @icmp_uge2(i32 %x) { 628 ; SDAG-LABEL: icmp_uge2 629 ; SDAG: movb $1, %al 630 ; FAST-LABEL: icmp_uge2 631 ; FAST: movb $1, %al 632 %1 = icmp uge i32 %x, %x 633 ret i1 %1 634 } 635 636 define zeroext i1 @icmp_ult2(i32 %x) { 637 ; SDAG-LABEL: icmp_ult2 638 ; SDAG: xorl %eax, %eax 639 ; FAST-LABEL: icmp_ult2 640 ; FAST: xorl %eax, %eax 641 %1 = icmp ult i32 %x, %x 642 ret i1 %1 643 } 644 645 define zeroext i1 @icmp_ule2(i32 %x) { 646 ; SDAG-LABEL: icmp_ule2 647 ; SDAG: movb $1, %al 648 ; FAST-LABEL: icmp_ule2 649 ; FAST: movb $1, %al 650 %1 = icmp ule i32 %x, %x 651 ret i1 %1 652 } 653 654 define zeroext i1 @icmp_sgt2(i32 %x) { 655 ; SDAG-LABEL: icmp_sgt2 656 ; SDAG: xorl %eax, %eax 657 ; FAST-LABEL: icmp_sgt2 658 ; FAST: xorl %eax, %eax 659 %1 = icmp sgt i32 %x, %x 660 ret i1 %1 661 } 662 663 define zeroext i1 @icmp_sge2(i32 %x) { 664 ; SDAG-LABEL: icmp_sge2 665 ; SDAG: movb $1, %al 666 ; FAST-LABEL: icmp_sge2 667 ; FAST: movb $1, %al 668 %1 = icmp sge i32 %x, %x 669 ret i1 %1 670 } 671 672 define zeroext i1 @icmp_slt2(i32 %x) { 673 ; SDAG-LABEL: icmp_slt2 674 ; SDAG: xorl %eax, %eax 675 ; FAST-LABEL: icmp_slt2 676 ; FAST: xorl %eax, %eax 677 %1 = icmp slt i32 %x, %x 678 ret i1 %1 679 } 680 681 define zeroext i1 @icmp_sle2(i32 %x) { 682 ; SDAG-LABEL: icmp_sle2 683 ; SDAG: movb $1, %al 684 ; FAST-LABEL: icmp_sle2 685 ; FAST: movb $1, %al 686 %1 = icmp sle i32 %x, %x 687 ret i1 %1 688 } 689 690