Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=ALL --check-prefix=SDAG
      3 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=ALL --check-prefix=FAST --check-prefix=FAST_NOAVX
      4 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx | FileCheck %s --check-prefix=ALL --check-prefix=FAST --check-prefix=FAST_AVX
      5 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx512f | FileCheck %s --check-prefix=ALL --check-prefix=FAST --check-prefix=FAST_AVX
      6 
      7 define zeroext i1 @fcmp_oeq(float %x, float %y) {
      8 ; SDAG-LABEL: fcmp_oeq:
      9 ; SDAG:       ## %bb.0:
     10 ; SDAG-NEXT:    cmpeqss %xmm1, %xmm0
     11 ; SDAG-NEXT:    movd %xmm0, %eax
     12 ; SDAG-NEXT:    andl $1, %eax
     13 ; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
     14 ; SDAG-NEXT:    retq
     15 ;
     16 ; FAST_NOAVX-LABEL: fcmp_oeq:
     17 ; FAST_NOAVX:       ## %bb.0:
     18 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
     19 ; FAST_NOAVX-NEXT:    sete %al
     20 ; FAST_NOAVX-NEXT:    setnp %cl
     21 ; FAST_NOAVX-NEXT:    andb %al, %cl
     22 ; FAST_NOAVX-NEXT:    andb $1, %cl
     23 ; FAST_NOAVX-NEXT:    movzbl %cl, %eax
     24 ; FAST_NOAVX-NEXT:    retq
     25 ;
     26 ; FAST_AVX-LABEL: fcmp_oeq:
     27 ; FAST_AVX:       ## %bb.0:
     28 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
     29 ; FAST_AVX-NEXT:    sete %al
     30 ; FAST_AVX-NEXT:    setnp %cl
     31 ; FAST_AVX-NEXT:    andb %al, %cl
     32 ; FAST_AVX-NEXT:    andb $1, %cl
     33 ; FAST_AVX-NEXT:    movzbl %cl, %eax
     34 ; FAST_AVX-NEXT:    retq
     35   %1 = fcmp oeq float %x, %y
     36   ret i1 %1
     37 }
     38 
     39 define zeroext i1 @fcmp_ogt(float %x, float %y) {
     40 ; SDAG-LABEL: fcmp_ogt:
     41 ; SDAG:       ## %bb.0:
     42 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
     43 ; SDAG-NEXT:    seta %al
     44 ; SDAG-NEXT:    retq
     45 ;
     46 ; FAST_NOAVX-LABEL: fcmp_ogt:
     47 ; FAST_NOAVX:       ## %bb.0:
     48 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
     49 ; FAST_NOAVX-NEXT:    seta %al
     50 ; FAST_NOAVX-NEXT:    andb $1, %al
     51 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
     52 ; FAST_NOAVX-NEXT:    retq
     53 ;
     54 ; FAST_AVX-LABEL: fcmp_ogt:
     55 ; FAST_AVX:       ## %bb.0:
     56 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
     57 ; FAST_AVX-NEXT:    seta %al
     58 ; FAST_AVX-NEXT:    andb $1, %al
     59 ; FAST_AVX-NEXT:    movzbl %al, %eax
     60 ; FAST_AVX-NEXT:    retq
     61   %1 = fcmp ogt float %x, %y
     62   ret i1 %1
     63 }
     64 
     65 define zeroext i1 @fcmp_oge(float %x, float %y) {
     66 ; SDAG-LABEL: fcmp_oge:
     67 ; SDAG:       ## %bb.0:
     68 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
     69 ; SDAG-NEXT:    setae %al
     70 ; SDAG-NEXT:    retq
     71 ;
     72 ; FAST_NOAVX-LABEL: fcmp_oge:
     73 ; FAST_NOAVX:       ## %bb.0:
     74 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
     75 ; FAST_NOAVX-NEXT:    setae %al
     76 ; FAST_NOAVX-NEXT:    andb $1, %al
     77 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
     78 ; FAST_NOAVX-NEXT:    retq
     79 ;
     80 ; FAST_AVX-LABEL: fcmp_oge:
     81 ; FAST_AVX:       ## %bb.0:
     82 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
     83 ; FAST_AVX-NEXT:    setae %al
     84 ; FAST_AVX-NEXT:    andb $1, %al
     85 ; FAST_AVX-NEXT:    movzbl %al, %eax
     86 ; FAST_AVX-NEXT:    retq
     87   %1 = fcmp oge float %x, %y
     88   ret i1 %1
     89 }
     90 
     91 define zeroext i1 @fcmp_olt(float %x, float %y) {
     92 ; SDAG-LABEL: fcmp_olt:
     93 ; SDAG:       ## %bb.0:
     94 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
     95 ; SDAG-NEXT:    seta %al
     96 ; SDAG-NEXT:    retq
     97 ;
     98 ; FAST_NOAVX-LABEL: fcmp_olt:
     99 ; FAST_NOAVX:       ## %bb.0:
    100 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    101 ; FAST_NOAVX-NEXT:    seta %al
    102 ; FAST_NOAVX-NEXT:    andb $1, %al
    103 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    104 ; FAST_NOAVX-NEXT:    retq
    105 ;
    106 ; FAST_AVX-LABEL: fcmp_olt:
    107 ; FAST_AVX:       ## %bb.0:
    108 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    109 ; FAST_AVX-NEXT:    seta %al
    110 ; FAST_AVX-NEXT:    andb $1, %al
    111 ; FAST_AVX-NEXT:    movzbl %al, %eax
    112 ; FAST_AVX-NEXT:    retq
    113   %1 = fcmp olt float %x, %y
    114   ret i1 %1
    115 }
    116 
    117 define zeroext i1 @fcmp_ole(float %x, float %y) {
    118 ; SDAG-LABEL: fcmp_ole:
    119 ; SDAG:       ## %bb.0:
    120 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
    121 ; SDAG-NEXT:    setae %al
    122 ; SDAG-NEXT:    retq
    123 ;
    124 ; FAST_NOAVX-LABEL: fcmp_ole:
    125 ; FAST_NOAVX:       ## %bb.0:
    126 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    127 ; FAST_NOAVX-NEXT:    setae %al
    128 ; FAST_NOAVX-NEXT:    andb $1, %al
    129 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    130 ; FAST_NOAVX-NEXT:    retq
    131 ;
    132 ; FAST_AVX-LABEL: fcmp_ole:
    133 ; FAST_AVX:       ## %bb.0:
    134 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    135 ; FAST_AVX-NEXT:    setae %al
    136 ; FAST_AVX-NEXT:    andb $1, %al
    137 ; FAST_AVX-NEXT:    movzbl %al, %eax
    138 ; FAST_AVX-NEXT:    retq
    139   %1 = fcmp ole float %x, %y
    140   ret i1 %1
    141 }
    142 
    143 define zeroext i1 @fcmp_one(float %x, float %y) {
    144 ; SDAG-LABEL: fcmp_one:
    145 ; SDAG:       ## %bb.0:
    146 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    147 ; SDAG-NEXT:    setne %al
    148 ; SDAG-NEXT:    retq
    149 ;
    150 ; FAST_NOAVX-LABEL: fcmp_one:
    151 ; FAST_NOAVX:       ## %bb.0:
    152 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    153 ; FAST_NOAVX-NEXT:    setne %al
    154 ; FAST_NOAVX-NEXT:    andb $1, %al
    155 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    156 ; FAST_NOAVX-NEXT:    retq
    157 ;
    158 ; FAST_AVX-LABEL: fcmp_one:
    159 ; FAST_AVX:       ## %bb.0:
    160 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    161 ; FAST_AVX-NEXT:    setne %al
    162 ; FAST_AVX-NEXT:    andb $1, %al
    163 ; FAST_AVX-NEXT:    movzbl %al, %eax
    164 ; FAST_AVX-NEXT:    retq
    165   %1 = fcmp one float %x, %y
    166   ret i1 %1
    167 }
    168 
    169 define zeroext i1 @fcmp_ord(float %x, float %y) {
    170 ; SDAG-LABEL: fcmp_ord:
    171 ; SDAG:       ## %bb.0:
    172 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    173 ; SDAG-NEXT:    setnp %al
    174 ; SDAG-NEXT:    retq
    175 ;
    176 ; FAST_NOAVX-LABEL: fcmp_ord:
    177 ; FAST_NOAVX:       ## %bb.0:
    178 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    179 ; FAST_NOAVX-NEXT:    setnp %al
    180 ; FAST_NOAVX-NEXT:    andb $1, %al
    181 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    182 ; FAST_NOAVX-NEXT:    retq
    183 ;
    184 ; FAST_AVX-LABEL: fcmp_ord:
    185 ; FAST_AVX:       ## %bb.0:
    186 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    187 ; FAST_AVX-NEXT:    setnp %al
    188 ; FAST_AVX-NEXT:    andb $1, %al
    189 ; FAST_AVX-NEXT:    movzbl %al, %eax
    190 ; FAST_AVX-NEXT:    retq
    191   %1 = fcmp ord float %x, %y
    192   ret i1 %1
    193 }
    194 
    195 define zeroext i1 @fcmp_uno(float %x, float %y) {
    196 ; SDAG-LABEL: fcmp_uno:
    197 ; SDAG:       ## %bb.0:
    198 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    199 ; SDAG-NEXT:    setp %al
    200 ; SDAG-NEXT:    retq
    201 ;
    202 ; FAST_NOAVX-LABEL: fcmp_uno:
    203 ; FAST_NOAVX:       ## %bb.0:
    204 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    205 ; FAST_NOAVX-NEXT:    setp %al
    206 ; FAST_NOAVX-NEXT:    andb $1, %al
    207 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    208 ; FAST_NOAVX-NEXT:    retq
    209 ;
    210 ; FAST_AVX-LABEL: fcmp_uno:
    211 ; FAST_AVX:       ## %bb.0:
    212 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    213 ; FAST_AVX-NEXT:    setp %al
    214 ; FAST_AVX-NEXT:    andb $1, %al
    215 ; FAST_AVX-NEXT:    movzbl %al, %eax
    216 ; FAST_AVX-NEXT:    retq
    217   %1 = fcmp uno float %x, %y
    218   ret i1 %1
    219 }
    220 
    221 define zeroext i1 @fcmp_ueq(float %x, float %y) {
    222 ; SDAG-LABEL: fcmp_ueq:
    223 ; SDAG:       ## %bb.0:
    224 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    225 ; SDAG-NEXT:    sete %al
    226 ; SDAG-NEXT:    retq
    227 ;
    228 ; FAST_NOAVX-LABEL: fcmp_ueq:
    229 ; FAST_NOAVX:       ## %bb.0:
    230 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    231 ; FAST_NOAVX-NEXT:    sete %al
    232 ; FAST_NOAVX-NEXT:    andb $1, %al
    233 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    234 ; FAST_NOAVX-NEXT:    retq
    235 ;
    236 ; FAST_AVX-LABEL: fcmp_ueq:
    237 ; FAST_AVX:       ## %bb.0:
    238 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    239 ; FAST_AVX-NEXT:    sete %al
    240 ; FAST_AVX-NEXT:    andb $1, %al
    241 ; FAST_AVX-NEXT:    movzbl %al, %eax
    242 ; FAST_AVX-NEXT:    retq
    243   %1 = fcmp ueq float %x, %y
    244   ret i1 %1
    245 }
    246 
    247 define zeroext i1 @fcmp_ugt(float %x, float %y) {
    248 ; SDAG-LABEL: fcmp_ugt:
    249 ; SDAG:       ## %bb.0:
    250 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
    251 ; SDAG-NEXT:    setb %al
    252 ; SDAG-NEXT:    retq
    253 ;
    254 ; FAST_NOAVX-LABEL: fcmp_ugt:
    255 ; FAST_NOAVX:       ## %bb.0:
    256 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    257 ; FAST_NOAVX-NEXT:    setb %al
    258 ; FAST_NOAVX-NEXT:    andb $1, %al
    259 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    260 ; FAST_NOAVX-NEXT:    retq
    261 ;
    262 ; FAST_AVX-LABEL: fcmp_ugt:
    263 ; FAST_AVX:       ## %bb.0:
    264 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    265 ; FAST_AVX-NEXT:    setb %al
    266 ; FAST_AVX-NEXT:    andb $1, %al
    267 ; FAST_AVX-NEXT:    movzbl %al, %eax
    268 ; FAST_AVX-NEXT:    retq
    269   %1 = fcmp ugt float %x, %y
    270   ret i1 %1
    271 }
    272 
    273 define zeroext i1 @fcmp_uge(float %x, float %y) {
    274 ; SDAG-LABEL: fcmp_uge:
    275 ; SDAG:       ## %bb.0:
    276 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
    277 ; SDAG-NEXT:    setbe %al
    278 ; SDAG-NEXT:    retq
    279 ;
    280 ; FAST_NOAVX-LABEL: fcmp_uge:
    281 ; FAST_NOAVX:       ## %bb.0:
    282 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    283 ; FAST_NOAVX-NEXT:    setbe %al
    284 ; FAST_NOAVX-NEXT:    andb $1, %al
    285 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    286 ; FAST_NOAVX-NEXT:    retq
    287 ;
    288 ; FAST_AVX-LABEL: fcmp_uge:
    289 ; FAST_AVX:       ## %bb.0:
    290 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    291 ; FAST_AVX-NEXT:    setbe %al
    292 ; FAST_AVX-NEXT:    andb $1, %al
    293 ; FAST_AVX-NEXT:    movzbl %al, %eax
    294 ; FAST_AVX-NEXT:    retq
    295   %1 = fcmp uge float %x, %y
    296   ret i1 %1
    297 }
    298 
    299 define zeroext i1 @fcmp_ult(float %x, float %y) {
    300 ; SDAG-LABEL: fcmp_ult:
    301 ; SDAG:       ## %bb.0:
    302 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    303 ; SDAG-NEXT:    setb %al
    304 ; SDAG-NEXT:    retq
    305 ;
    306 ; FAST_NOAVX-LABEL: fcmp_ult:
    307 ; FAST_NOAVX:       ## %bb.0:
    308 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    309 ; FAST_NOAVX-NEXT:    setb %al
    310 ; FAST_NOAVX-NEXT:    andb $1, %al
    311 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    312 ; FAST_NOAVX-NEXT:    retq
    313 ;
    314 ; FAST_AVX-LABEL: fcmp_ult:
    315 ; FAST_AVX:       ## %bb.0:
    316 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    317 ; FAST_AVX-NEXT:    setb %al
    318 ; FAST_AVX-NEXT:    andb $1, %al
    319 ; FAST_AVX-NEXT:    movzbl %al, %eax
    320 ; FAST_AVX-NEXT:    retq
    321   %1 = fcmp ult float %x, %y
    322   ret i1 %1
    323 }
    324 
    325 define zeroext i1 @fcmp_ule(float %x, float %y) {
    326 ; SDAG-LABEL: fcmp_ule:
    327 ; SDAG:       ## %bb.0:
    328 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    329 ; SDAG-NEXT:    setbe %al
    330 ; SDAG-NEXT:    retq
    331 ;
    332 ; FAST_NOAVX-LABEL: fcmp_ule:
    333 ; FAST_NOAVX:       ## %bb.0:
    334 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    335 ; FAST_NOAVX-NEXT:    setbe %al
    336 ; FAST_NOAVX-NEXT:    andb $1, %al
    337 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    338 ; FAST_NOAVX-NEXT:    retq
    339 ;
    340 ; FAST_AVX-LABEL: fcmp_ule:
    341 ; FAST_AVX:       ## %bb.0:
    342 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    343 ; FAST_AVX-NEXT:    setbe %al
    344 ; FAST_AVX-NEXT:    andb $1, %al
    345 ; FAST_AVX-NEXT:    movzbl %al, %eax
    346 ; FAST_AVX-NEXT:    retq
    347   %1 = fcmp ule float %x, %y
    348   ret i1 %1
    349 }
    350 
    351 define zeroext i1 @fcmp_une(float %x, float %y) {
    352 ; SDAG-LABEL: fcmp_une:
    353 ; SDAG:       ## %bb.0:
    354 ; SDAG-NEXT:    cmpneqss %xmm1, %xmm0
    355 ; SDAG-NEXT:    movd %xmm0, %eax
    356 ; SDAG-NEXT:    andl $1, %eax
    357 ; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
    358 ; SDAG-NEXT:    retq
    359 ;
    360 ; FAST_NOAVX-LABEL: fcmp_une:
    361 ; FAST_NOAVX:       ## %bb.0:
    362 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    363 ; FAST_NOAVX-NEXT:    setne %al
    364 ; FAST_NOAVX-NEXT:    setp %cl
    365 ; FAST_NOAVX-NEXT:    orb %al, %cl
    366 ; FAST_NOAVX-NEXT:    andb $1, %cl
    367 ; FAST_NOAVX-NEXT:    movzbl %cl, %eax
    368 ; FAST_NOAVX-NEXT:    retq
    369 ;
    370 ; FAST_AVX-LABEL: fcmp_une:
    371 ; FAST_AVX:       ## %bb.0:
    372 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    373 ; FAST_AVX-NEXT:    setne %al
    374 ; FAST_AVX-NEXT:    setp %cl
    375 ; FAST_AVX-NEXT:    orb %al, %cl
    376 ; FAST_AVX-NEXT:    andb $1, %cl
    377 ; FAST_AVX-NEXT:    movzbl %cl, %eax
    378 ; FAST_AVX-NEXT:    retq
    379   %1 = fcmp une float %x, %y
    380   ret i1 %1
    381 }
    382 
    383 define zeroext i1 @icmp_eq(i32 %x, i32 %y) {
    384 ; SDAG-LABEL: icmp_eq:
    385 ; SDAG:       ## %bb.0:
    386 ; SDAG-NEXT:    cmpl %esi, %edi
    387 ; SDAG-NEXT:    sete %al
    388 ; SDAG-NEXT:    retq
    389 ;
    390 ; FAST-LABEL: icmp_eq:
    391 ; FAST:       ## %bb.0:
    392 ; FAST-NEXT:    cmpl %esi, %edi
    393 ; FAST-NEXT:    sete %al
    394 ; FAST-NEXT:    andb $1, %al
    395 ; FAST-NEXT:    movzbl %al, %eax
    396 ; FAST-NEXT:    retq
    397   %1 = icmp eq i32 %x, %y
    398   ret i1 %1
    399 }
    400 
    401 define zeroext i1 @icmp_ne(i32 %x, i32 %y) {
    402 ; SDAG-LABEL: icmp_ne:
    403 ; SDAG:       ## %bb.0:
    404 ; SDAG-NEXT:    cmpl %esi, %edi
    405 ; SDAG-NEXT:    setne %al
    406 ; SDAG-NEXT:    retq
    407 ;
    408 ; FAST-LABEL: icmp_ne:
    409 ; FAST:       ## %bb.0:
    410 ; FAST-NEXT:    cmpl %esi, %edi
    411 ; FAST-NEXT:    setne %al
    412 ; FAST-NEXT:    andb $1, %al
    413 ; FAST-NEXT:    movzbl %al, %eax
    414 ; FAST-NEXT:    retq
    415   %1 = icmp ne i32 %x, %y
    416   ret i1 %1
    417 }
    418 
    419 define zeroext i1 @icmp_ugt(i32 %x, i32 %y) {
    420 ; SDAG-LABEL: icmp_ugt:
    421 ; SDAG:       ## %bb.0:
    422 ; SDAG-NEXT:    cmpl %esi, %edi
    423 ; SDAG-NEXT:    seta %al
    424 ; SDAG-NEXT:    retq
    425 ;
    426 ; FAST-LABEL: icmp_ugt:
    427 ; FAST:       ## %bb.0:
    428 ; FAST-NEXT:    cmpl %esi, %edi
    429 ; FAST-NEXT:    seta %al
    430 ; FAST-NEXT:    andb $1, %al
    431 ; FAST-NEXT:    movzbl %al, %eax
    432 ; FAST-NEXT:    retq
    433   %1 = icmp ugt i32 %x, %y
    434   ret i1 %1
    435 }
    436 
    437 define zeroext i1 @icmp_uge(i32 %x, i32 %y) {
    438 ; SDAG-LABEL: icmp_uge:
    439 ; SDAG:       ## %bb.0:
    440 ; SDAG-NEXT:    cmpl %esi, %edi
    441 ; SDAG-NEXT:    setae %al
    442 ; SDAG-NEXT:    retq
    443 ;
    444 ; FAST-LABEL: icmp_uge:
    445 ; FAST:       ## %bb.0:
    446 ; FAST-NEXT:    cmpl %esi, %edi
    447 ; FAST-NEXT:    setae %al
    448 ; FAST-NEXT:    andb $1, %al
    449 ; FAST-NEXT:    movzbl %al, %eax
    450 ; FAST-NEXT:    retq
    451   %1 = icmp uge i32 %x, %y
    452   ret i1 %1
    453 }
    454 
    455 define zeroext i1 @icmp_ult(i32 %x, i32 %y) {
    456 ; SDAG-LABEL: icmp_ult:
    457 ; SDAG:       ## %bb.0:
    458 ; SDAG-NEXT:    cmpl %esi, %edi
    459 ; SDAG-NEXT:    setb %al
    460 ; SDAG-NEXT:    retq
    461 ;
    462 ; FAST-LABEL: icmp_ult:
    463 ; FAST:       ## %bb.0:
    464 ; FAST-NEXT:    cmpl %esi, %edi
    465 ; FAST-NEXT:    setb %al
    466 ; FAST-NEXT:    andb $1, %al
    467 ; FAST-NEXT:    movzbl %al, %eax
    468 ; FAST-NEXT:    retq
    469   %1 = icmp ult i32 %x, %y
    470   ret i1 %1
    471 }
    472 
    473 define zeroext i1 @icmp_ule(i32 %x, i32 %y) {
    474 ; SDAG-LABEL: icmp_ule:
    475 ; SDAG:       ## %bb.0:
    476 ; SDAG-NEXT:    cmpl %esi, %edi
    477 ; SDAG-NEXT:    setbe %al
    478 ; SDAG-NEXT:    retq
    479 ;
    480 ; FAST-LABEL: icmp_ule:
    481 ; FAST:       ## %bb.0:
    482 ; FAST-NEXT:    cmpl %esi, %edi
    483 ; FAST-NEXT:    setbe %al
    484 ; FAST-NEXT:    andb $1, %al
    485 ; FAST-NEXT:    movzbl %al, %eax
    486 ; FAST-NEXT:    retq
    487   %1 = icmp ule i32 %x, %y
    488   ret i1 %1
    489 }
    490 
    491 define zeroext i1 @icmp_sgt(i32 %x, i32 %y) {
    492 ; SDAG-LABEL: icmp_sgt:
    493 ; SDAG:       ## %bb.0:
    494 ; SDAG-NEXT:    cmpl %esi, %edi
    495 ; SDAG-NEXT:    setg %al
    496 ; SDAG-NEXT:    retq
    497 ;
    498 ; FAST-LABEL: icmp_sgt:
    499 ; FAST:       ## %bb.0:
    500 ; FAST-NEXT:    cmpl %esi, %edi
    501 ; FAST-NEXT:    setg %al
    502 ; FAST-NEXT:    andb $1, %al
    503 ; FAST-NEXT:    movzbl %al, %eax
    504 ; FAST-NEXT:    retq
    505   %1 = icmp sgt i32 %x, %y
    506   ret i1 %1
    507 }
    508 
    509 define zeroext i1 @icmp_sge(i32 %x, i32 %y) {
    510 ; SDAG-LABEL: icmp_sge:
    511 ; SDAG:       ## %bb.0:
    512 ; SDAG-NEXT:    cmpl %esi, %edi
    513 ; SDAG-NEXT:    setge %al
    514 ; SDAG-NEXT:    retq
    515 ;
    516 ; FAST-LABEL: icmp_sge:
    517 ; FAST:       ## %bb.0:
    518 ; FAST-NEXT:    cmpl %esi, %edi
    519 ; FAST-NEXT:    setge %al
    520 ; FAST-NEXT:    andb $1, %al
    521 ; FAST-NEXT:    movzbl %al, %eax
    522 ; FAST-NEXT:    retq
    523   %1 = icmp sge i32 %x, %y
    524   ret i1 %1
    525 }
    526 
    527 define zeroext i1 @icmp_slt(i32 %x, i32 %y) {
    528 ; SDAG-LABEL: icmp_slt:
    529 ; SDAG:       ## %bb.0:
    530 ; SDAG-NEXT:    cmpl %esi, %edi
    531 ; SDAG-NEXT:    setl %al
    532 ; SDAG-NEXT:    retq
    533 ;
    534 ; FAST-LABEL: icmp_slt:
    535 ; FAST:       ## %bb.0:
    536 ; FAST-NEXT:    cmpl %esi, %edi
    537 ; FAST-NEXT:    setl %al
    538 ; FAST-NEXT:    andb $1, %al
    539 ; FAST-NEXT:    movzbl %al, %eax
    540 ; FAST-NEXT:    retq
    541   %1 = icmp slt i32 %x, %y
    542   ret i1 %1
    543 }
    544 
    545 define zeroext i1 @icmp_sle(i32 %x, i32 %y) {
    546 ; SDAG-LABEL: icmp_sle:
    547 ; SDAG:       ## %bb.0:
    548 ; SDAG-NEXT:    cmpl %esi, %edi
    549 ; SDAG-NEXT:    setle %al
    550 ; SDAG-NEXT:    retq
    551 ;
    552 ; FAST-LABEL: icmp_sle:
    553 ; FAST:       ## %bb.0:
    554 ; FAST-NEXT:    cmpl %esi, %edi
    555 ; FAST-NEXT:    setle %al
    556 ; FAST-NEXT:    andb $1, %al
    557 ; FAST-NEXT:    movzbl %al, %eax
    558 ; FAST-NEXT:    retq
    559   %1 = icmp sle i32 %x, %y
    560   ret i1 %1
    561 }
    562 
    563 ; Test cmp folding and condition optimization.
    564 define zeroext i1 @fcmp_oeq2(float %x) {
    565 ; SDAG-LABEL: fcmp_oeq2:
    566 ; SDAG:       ## %bb.0:
    567 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    568 ; SDAG-NEXT:    setnp %al
    569 ; SDAG-NEXT:    retq
    570 ;
    571 ; FAST_NOAVX-LABEL: fcmp_oeq2:
    572 ; FAST_NOAVX:       ## %bb.0:
    573 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    574 ; FAST_NOAVX-NEXT:    setnp %al
    575 ; FAST_NOAVX-NEXT:    andb $1, %al
    576 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    577 ; FAST_NOAVX-NEXT:    retq
    578 ;
    579 ; FAST_AVX-LABEL: fcmp_oeq2:
    580 ; FAST_AVX:       ## %bb.0:
    581 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    582 ; FAST_AVX-NEXT:    setnp %al
    583 ; FAST_AVX-NEXT:    andb $1, %al
    584 ; FAST_AVX-NEXT:    movzbl %al, %eax
    585 ; FAST_AVX-NEXT:    retq
    586   %1 = fcmp oeq float %x, %x
    587   ret i1 %1
    588 }
    589 
    590 define zeroext i1 @fcmp_oeq3(float %x) {
    591 ; SDAG-LABEL: fcmp_oeq3:
    592 ; SDAG:       ## %bb.0:
    593 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    594 ; SDAG-NEXT:    cmpeqss %xmm0, %xmm1
    595 ; SDAG-NEXT:    movd %xmm1, %eax
    596 ; SDAG-NEXT:    andl $1, %eax
    597 ; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
    598 ; SDAG-NEXT:    retq
    599 ;
    600 ; FAST_NOAVX-LABEL: fcmp_oeq3:
    601 ; FAST_NOAVX:       ## %bb.0:
    602 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    603 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    604 ; FAST_NOAVX-NEXT:    sete %al
    605 ; FAST_NOAVX-NEXT:    setnp %cl
    606 ; FAST_NOAVX-NEXT:    andb %al, %cl
    607 ; FAST_NOAVX-NEXT:    andb $1, %cl
    608 ; FAST_NOAVX-NEXT:    movzbl %cl, %eax
    609 ; FAST_NOAVX-NEXT:    retq
    610 ;
    611 ; FAST_AVX-LABEL: fcmp_oeq3:
    612 ; FAST_AVX:       ## %bb.0:
    613 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    614 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    615 ; FAST_AVX-NEXT:    sete %al
    616 ; FAST_AVX-NEXT:    setnp %cl
    617 ; FAST_AVX-NEXT:    andb %al, %cl
    618 ; FAST_AVX-NEXT:    andb $1, %cl
    619 ; FAST_AVX-NEXT:    movzbl %cl, %eax
    620 ; FAST_AVX-NEXT:    retq
    621   %1 = fcmp oeq float %x, 0.000000e+00
    622   ret i1 %1
    623 }
    624 
    625 define zeroext i1 @fcmp_ogt2(float %x) {
    626 ; SDAG-LABEL: fcmp_ogt2:
    627 ; SDAG:       ## %bb.0:
    628 ; SDAG-NEXT:    xorl %eax, %eax
    629 ; SDAG-NEXT:    retq
    630 ;
    631 ; FAST-LABEL: fcmp_ogt2:
    632 ; FAST:       ## %bb.0:
    633 ; FAST-NEXT:    xorl %eax, %eax
    634 ; FAST-NEXT:    andb $1, %al
    635 ; FAST-NEXT:    movzbl %al, %eax
    636 ; FAST-NEXT:    retq
    637   %1 = fcmp ogt float %x, %x
    638   ret i1 %1
    639 }
    640 
    641 define zeroext i1 @fcmp_ogt3(float %x) {
    642 ; SDAG-LABEL: fcmp_ogt3:
    643 ; SDAG:       ## %bb.0:
    644 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    645 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    646 ; SDAG-NEXT:    seta %al
    647 ; SDAG-NEXT:    retq
    648 ;
    649 ; FAST_NOAVX-LABEL: fcmp_ogt3:
    650 ; FAST_NOAVX:       ## %bb.0:
    651 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    652 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    653 ; FAST_NOAVX-NEXT:    seta %al
    654 ; FAST_NOAVX-NEXT:    andb $1, %al
    655 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    656 ; FAST_NOAVX-NEXT:    retq
    657 ;
    658 ; FAST_AVX-LABEL: fcmp_ogt3:
    659 ; FAST_AVX:       ## %bb.0:
    660 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    661 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    662 ; FAST_AVX-NEXT:    seta %al
    663 ; FAST_AVX-NEXT:    andb $1, %al
    664 ; FAST_AVX-NEXT:    movzbl %al, %eax
    665 ; FAST_AVX-NEXT:    retq
    666   %1 = fcmp ogt float %x, 0.000000e+00
    667   ret i1 %1
    668 }
    669 
    670 define zeroext i1 @fcmp_oge2(float %x) {
    671 ; SDAG-LABEL: fcmp_oge2:
    672 ; SDAG:       ## %bb.0:
    673 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    674 ; SDAG-NEXT:    setnp %al
    675 ; SDAG-NEXT:    retq
    676 ;
    677 ; FAST_NOAVX-LABEL: fcmp_oge2:
    678 ; FAST_NOAVX:       ## %bb.0:
    679 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    680 ; FAST_NOAVX-NEXT:    setnp %al
    681 ; FAST_NOAVX-NEXT:    andb $1, %al
    682 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    683 ; FAST_NOAVX-NEXT:    retq
    684 ;
    685 ; FAST_AVX-LABEL: fcmp_oge2:
    686 ; FAST_AVX:       ## %bb.0:
    687 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    688 ; FAST_AVX-NEXT:    setnp %al
    689 ; FAST_AVX-NEXT:    andb $1, %al
    690 ; FAST_AVX-NEXT:    movzbl %al, %eax
    691 ; FAST_AVX-NEXT:    retq
    692   %1 = fcmp oge float %x, %x
    693   ret i1 %1
    694 }
    695 
    696 define zeroext i1 @fcmp_oge3(float %x) {
    697 ; SDAG-LABEL: fcmp_oge3:
    698 ; SDAG:       ## %bb.0:
    699 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    700 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    701 ; SDAG-NEXT:    setae %al
    702 ; SDAG-NEXT:    retq
    703 ;
    704 ; FAST_NOAVX-LABEL: fcmp_oge3:
    705 ; FAST_NOAVX:       ## %bb.0:
    706 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    707 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    708 ; FAST_NOAVX-NEXT:    setae %al
    709 ; FAST_NOAVX-NEXT:    andb $1, %al
    710 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    711 ; FAST_NOAVX-NEXT:    retq
    712 ;
    713 ; FAST_AVX-LABEL: fcmp_oge3:
    714 ; FAST_AVX:       ## %bb.0:
    715 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    716 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    717 ; FAST_AVX-NEXT:    setae %al
    718 ; FAST_AVX-NEXT:    andb $1, %al
    719 ; FAST_AVX-NEXT:    movzbl %al, %eax
    720 ; FAST_AVX-NEXT:    retq
    721   %1 = fcmp oge float %x, 0.000000e+00
    722   ret i1 %1
    723 }
    724 
    725 define zeroext i1 @fcmp_olt2(float %x) {
    726 ; SDAG-LABEL: fcmp_olt2:
    727 ; SDAG:       ## %bb.0:
    728 ; SDAG-NEXT:    xorl %eax, %eax
    729 ; SDAG-NEXT:    retq
    730 ;
    731 ; FAST-LABEL: fcmp_olt2:
    732 ; FAST:       ## %bb.0:
    733 ; FAST-NEXT:    xorl %eax, %eax
    734 ; FAST-NEXT:    andb $1, %al
    735 ; FAST-NEXT:    movzbl %al, %eax
    736 ; FAST-NEXT:    retq
    737   %1 = fcmp olt float %x, %x
    738   ret i1 %1
    739 }
    740 
    741 define zeroext i1 @fcmp_olt3(float %x) {
    742 ; SDAG-LABEL: fcmp_olt3:
    743 ; SDAG:       ## %bb.0:
    744 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    745 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
    746 ; SDAG-NEXT:    seta %al
    747 ; SDAG-NEXT:    retq
    748 ;
    749 ; FAST_NOAVX-LABEL: fcmp_olt3:
    750 ; FAST_NOAVX:       ## %bb.0:
    751 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    752 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    753 ; FAST_NOAVX-NEXT:    seta %al
    754 ; FAST_NOAVX-NEXT:    andb $1, %al
    755 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    756 ; FAST_NOAVX-NEXT:    retq
    757 ;
    758 ; FAST_AVX-LABEL: fcmp_olt3:
    759 ; FAST_AVX:       ## %bb.0:
    760 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    761 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    762 ; FAST_AVX-NEXT:    seta %al
    763 ; FAST_AVX-NEXT:    andb $1, %al
    764 ; FAST_AVX-NEXT:    movzbl %al, %eax
    765 ; FAST_AVX-NEXT:    retq
    766   %1 = fcmp olt float %x, 0.000000e+00
    767   ret i1 %1
    768 }
    769 
    770 define zeroext i1 @fcmp_ole2(float %x) {
    771 ; SDAG-LABEL: fcmp_ole2:
    772 ; SDAG:       ## %bb.0:
    773 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    774 ; SDAG-NEXT:    setnp %al
    775 ; SDAG-NEXT:    retq
    776 ;
    777 ; FAST_NOAVX-LABEL: fcmp_ole2:
    778 ; FAST_NOAVX:       ## %bb.0:
    779 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    780 ; FAST_NOAVX-NEXT:    setnp %al
    781 ; FAST_NOAVX-NEXT:    andb $1, %al
    782 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    783 ; FAST_NOAVX-NEXT:    retq
    784 ;
    785 ; FAST_AVX-LABEL: fcmp_ole2:
    786 ; FAST_AVX:       ## %bb.0:
    787 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    788 ; FAST_AVX-NEXT:    setnp %al
    789 ; FAST_AVX-NEXT:    andb $1, %al
    790 ; FAST_AVX-NEXT:    movzbl %al, %eax
    791 ; FAST_AVX-NEXT:    retq
    792   %1 = fcmp ole float %x, %x
    793   ret i1 %1
    794 }
    795 
    796 define zeroext i1 @fcmp_ole3(float %x) {
    797 ; SDAG-LABEL: fcmp_ole3:
    798 ; SDAG:       ## %bb.0:
    799 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    800 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
    801 ; SDAG-NEXT:    setae %al
    802 ; SDAG-NEXT:    retq
    803 ;
    804 ; FAST_NOAVX-LABEL: fcmp_ole3:
    805 ; FAST_NOAVX:       ## %bb.0:
    806 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    807 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
    808 ; FAST_NOAVX-NEXT:    setae %al
    809 ; FAST_NOAVX-NEXT:    andb $1, %al
    810 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    811 ; FAST_NOAVX-NEXT:    retq
    812 ;
    813 ; FAST_AVX-LABEL: fcmp_ole3:
    814 ; FAST_AVX:       ## %bb.0:
    815 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    816 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
    817 ; FAST_AVX-NEXT:    setae %al
    818 ; FAST_AVX-NEXT:    andb $1, %al
    819 ; FAST_AVX-NEXT:    movzbl %al, %eax
    820 ; FAST_AVX-NEXT:    retq
    821   %1 = fcmp ole float %x, 0.000000e+00
    822   ret i1 %1
    823 }
    824 
    825 define zeroext i1 @fcmp_one2(float %x) {
    826 ; SDAG-LABEL: fcmp_one2:
    827 ; SDAG:       ## %bb.0:
    828 ; SDAG-NEXT:    xorl %eax, %eax
    829 ; SDAG-NEXT:    retq
    830 ;
    831 ; FAST-LABEL: fcmp_one2:
    832 ; FAST:       ## %bb.0:
    833 ; FAST-NEXT:    xorl %eax, %eax
    834 ; FAST-NEXT:    andb $1, %al
    835 ; FAST-NEXT:    movzbl %al, %eax
    836 ; FAST-NEXT:    retq
    837   %1 = fcmp one float %x, %x
    838   ret i1 %1
    839 }
    840 
    841 define zeroext i1 @fcmp_one3(float %x) {
    842 ; SDAG-LABEL: fcmp_one3:
    843 ; SDAG:       ## %bb.0:
    844 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    845 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    846 ; SDAG-NEXT:    setne %al
    847 ; SDAG-NEXT:    retq
    848 ;
    849 ; FAST_NOAVX-LABEL: fcmp_one3:
    850 ; FAST_NOAVX:       ## %bb.0:
    851 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
    852 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
    853 ; FAST_NOAVX-NEXT:    setne %al
    854 ; FAST_NOAVX-NEXT:    andb $1, %al
    855 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    856 ; FAST_NOAVX-NEXT:    retq
    857 ;
    858 ; FAST_AVX-LABEL: fcmp_one3:
    859 ; FAST_AVX:       ## %bb.0:
    860 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
    861 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
    862 ; FAST_AVX-NEXT:    setne %al
    863 ; FAST_AVX-NEXT:    andb $1, %al
    864 ; FAST_AVX-NEXT:    movzbl %al, %eax
    865 ; FAST_AVX-NEXT:    retq
    866   %1 = fcmp one float %x, 0.000000e+00
    867   ret i1 %1
    868 }
    869 
    870 define zeroext i1 @fcmp_ord2(float %x) {
    871 ; SDAG-LABEL: fcmp_ord2:
    872 ; SDAG:       ## %bb.0:
    873 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    874 ; SDAG-NEXT:    setnp %al
    875 ; SDAG-NEXT:    retq
    876 ;
    877 ; FAST_NOAVX-LABEL: fcmp_ord2:
    878 ; FAST_NOAVX:       ## %bb.0:
    879 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    880 ; FAST_NOAVX-NEXT:    setnp %al
    881 ; FAST_NOAVX-NEXT:    andb $1, %al
    882 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    883 ; FAST_NOAVX-NEXT:    retq
    884 ;
    885 ; FAST_AVX-LABEL: fcmp_ord2:
    886 ; FAST_AVX:       ## %bb.0:
    887 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    888 ; FAST_AVX-NEXT:    setnp %al
    889 ; FAST_AVX-NEXT:    andb $1, %al
    890 ; FAST_AVX-NEXT:    movzbl %al, %eax
    891 ; FAST_AVX-NEXT:    retq
    892   %1 = fcmp ord float %x, %x
    893   ret i1 %1
    894 }
    895 
    896 define zeroext i1 @fcmp_ord3(float %x) {
    897 ; SDAG-LABEL: fcmp_ord3:
    898 ; SDAG:       ## %bb.0:
    899 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    900 ; SDAG-NEXT:    setnp %al
    901 ; SDAG-NEXT:    retq
    902 ;
    903 ; FAST_NOAVX-LABEL: fcmp_ord3:
    904 ; FAST_NOAVX:       ## %bb.0:
    905 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    906 ; FAST_NOAVX-NEXT:    setnp %al
    907 ; FAST_NOAVX-NEXT:    andb $1, %al
    908 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    909 ; FAST_NOAVX-NEXT:    retq
    910 ;
    911 ; FAST_AVX-LABEL: fcmp_ord3:
    912 ; FAST_AVX:       ## %bb.0:
    913 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    914 ; FAST_AVX-NEXT:    setnp %al
    915 ; FAST_AVX-NEXT:    andb $1, %al
    916 ; FAST_AVX-NEXT:    movzbl %al, %eax
    917 ; FAST_AVX-NEXT:    retq
    918   %1 = fcmp ord float %x, 0.000000e+00
    919   ret i1 %1
    920 }
    921 
    922 define zeroext i1 @fcmp_uno2(float %x) {
    923 ; SDAG-LABEL: fcmp_uno2:
    924 ; SDAG:       ## %bb.0:
    925 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    926 ; SDAG-NEXT:    setp %al
    927 ; SDAG-NEXT:    retq
    928 ;
    929 ; FAST_NOAVX-LABEL: fcmp_uno2:
    930 ; FAST_NOAVX:       ## %bb.0:
    931 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    932 ; FAST_NOAVX-NEXT:    setp %al
    933 ; FAST_NOAVX-NEXT:    andb $1, %al
    934 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    935 ; FAST_NOAVX-NEXT:    retq
    936 ;
    937 ; FAST_AVX-LABEL: fcmp_uno2:
    938 ; FAST_AVX:       ## %bb.0:
    939 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    940 ; FAST_AVX-NEXT:    setp %al
    941 ; FAST_AVX-NEXT:    andb $1, %al
    942 ; FAST_AVX-NEXT:    movzbl %al, %eax
    943 ; FAST_AVX-NEXT:    retq
    944   %1 = fcmp uno float %x, %x
    945   ret i1 %1
    946 }
    947 
    948 define zeroext i1 @fcmp_uno3(float %x) {
    949 ; SDAG-LABEL: fcmp_uno3:
    950 ; SDAG:       ## %bb.0:
    951 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
    952 ; SDAG-NEXT:    setp %al
    953 ; SDAG-NEXT:    retq
    954 ;
    955 ; FAST_NOAVX-LABEL: fcmp_uno3:
    956 ; FAST_NOAVX:       ## %bb.0:
    957 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
    958 ; FAST_NOAVX-NEXT:    setp %al
    959 ; FAST_NOAVX-NEXT:    andb $1, %al
    960 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
    961 ; FAST_NOAVX-NEXT:    retq
    962 ;
    963 ; FAST_AVX-LABEL: fcmp_uno3:
    964 ; FAST_AVX:       ## %bb.0:
    965 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
    966 ; FAST_AVX-NEXT:    setp %al
    967 ; FAST_AVX-NEXT:    andb $1, %al
    968 ; FAST_AVX-NEXT:    movzbl %al, %eax
    969 ; FAST_AVX-NEXT:    retq
    970   %1 = fcmp uno float %x, 0.000000e+00
    971   ret i1 %1
    972 }
    973 
    974 define zeroext i1 @fcmp_ueq2(float %x) {
    975 ; SDAG-LABEL: fcmp_ueq2:
    976 ; SDAG:       ## %bb.0:
    977 ; SDAG-NEXT:    movb $1, %al
    978 ; SDAG-NEXT:    retq
    979 ;
    980 ; FAST-LABEL: fcmp_ueq2:
    981 ; FAST:       ## %bb.0:
    982 ; FAST-NEXT:    movb $1, %al
    983 ; FAST-NEXT:    andb $1, %al
    984 ; FAST-NEXT:    movzbl %al, %eax
    985 ; FAST-NEXT:    retq
    986   %1 = fcmp ueq float %x, %x
    987   ret i1 %1
    988 }
    989 
    990 define zeroext i1 @fcmp_ueq3(float %x) {
    991 ; SDAG-LABEL: fcmp_ueq3:
    992 ; SDAG:       ## %bb.0:
    993 ; SDAG-NEXT:    xorps %xmm1, %xmm1
    994 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
    995 ; SDAG-NEXT:    sete %al
    996 ; SDAG-NEXT:    retq
    997 ;
    998 ; FAST_NOAVX-LABEL: fcmp_ueq3:
    999 ; FAST_NOAVX:       ## %bb.0:
   1000 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1001 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
   1002 ; FAST_NOAVX-NEXT:    sete %al
   1003 ; FAST_NOAVX-NEXT:    andb $1, %al
   1004 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1005 ; FAST_NOAVX-NEXT:    retq
   1006 ;
   1007 ; FAST_AVX-LABEL: fcmp_ueq3:
   1008 ; FAST_AVX:       ## %bb.0:
   1009 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1010 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
   1011 ; FAST_AVX-NEXT:    sete %al
   1012 ; FAST_AVX-NEXT:    andb $1, %al
   1013 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1014 ; FAST_AVX-NEXT:    retq
   1015   %1 = fcmp ueq float %x, 0.000000e+00
   1016   ret i1 %1
   1017 }
   1018 
   1019 define zeroext i1 @fcmp_ugt2(float %x) {
   1020 ; SDAG-LABEL: fcmp_ugt2:
   1021 ; SDAG:       ## %bb.0:
   1022 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
   1023 ; SDAG-NEXT:    setp %al
   1024 ; SDAG-NEXT:    retq
   1025 ;
   1026 ; FAST_NOAVX-LABEL: fcmp_ugt2:
   1027 ; FAST_NOAVX:       ## %bb.0:
   1028 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
   1029 ; FAST_NOAVX-NEXT:    setp %al
   1030 ; FAST_NOAVX-NEXT:    andb $1, %al
   1031 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1032 ; FAST_NOAVX-NEXT:    retq
   1033 ;
   1034 ; FAST_AVX-LABEL: fcmp_ugt2:
   1035 ; FAST_AVX:       ## %bb.0:
   1036 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
   1037 ; FAST_AVX-NEXT:    setp %al
   1038 ; FAST_AVX-NEXT:    andb $1, %al
   1039 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1040 ; FAST_AVX-NEXT:    retq
   1041   %1 = fcmp ugt float %x, %x
   1042   ret i1 %1
   1043 }
   1044 
   1045 define zeroext i1 @fcmp_ugt3(float %x) {
   1046 ; SDAG-LABEL: fcmp_ugt3:
   1047 ; SDAG:       ## %bb.0:
   1048 ; SDAG-NEXT:    xorps %xmm1, %xmm1
   1049 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
   1050 ; SDAG-NEXT:    setb %al
   1051 ; SDAG-NEXT:    retq
   1052 ;
   1053 ; FAST_NOAVX-LABEL: fcmp_ugt3:
   1054 ; FAST_NOAVX:       ## %bb.0:
   1055 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1056 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
   1057 ; FAST_NOAVX-NEXT:    setb %al
   1058 ; FAST_NOAVX-NEXT:    andb $1, %al
   1059 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1060 ; FAST_NOAVX-NEXT:    retq
   1061 ;
   1062 ; FAST_AVX-LABEL: fcmp_ugt3:
   1063 ; FAST_AVX:       ## %bb.0:
   1064 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1065 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
   1066 ; FAST_AVX-NEXT:    setb %al
   1067 ; FAST_AVX-NEXT:    andb $1, %al
   1068 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1069 ; FAST_AVX-NEXT:    retq
   1070   %1 = fcmp ugt float %x, 0.000000e+00
   1071   ret i1 %1
   1072 }
   1073 
   1074 define zeroext i1 @fcmp_uge2(float %x) {
   1075 ; SDAG-LABEL: fcmp_uge2:
   1076 ; SDAG:       ## %bb.0:
   1077 ; SDAG-NEXT:    movb $1, %al
   1078 ; SDAG-NEXT:    retq
   1079 ;
   1080 ; FAST-LABEL: fcmp_uge2:
   1081 ; FAST:       ## %bb.0:
   1082 ; FAST-NEXT:    movb $1, %al
   1083 ; FAST-NEXT:    andb $1, %al
   1084 ; FAST-NEXT:    movzbl %al, %eax
   1085 ; FAST-NEXT:    retq
   1086   %1 = fcmp uge float %x, %x
   1087   ret i1 %1
   1088 }
   1089 
   1090 define zeroext i1 @fcmp_uge3(float %x) {
   1091 ; SDAG-LABEL: fcmp_uge3:
   1092 ; SDAG:       ## %bb.0:
   1093 ; SDAG-NEXT:    xorps %xmm1, %xmm1
   1094 ; SDAG-NEXT:    ucomiss %xmm0, %xmm1
   1095 ; SDAG-NEXT:    setbe %al
   1096 ; SDAG-NEXT:    retq
   1097 ;
   1098 ; FAST_NOAVX-LABEL: fcmp_uge3:
   1099 ; FAST_NOAVX:       ## %bb.0:
   1100 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1101 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm1
   1102 ; FAST_NOAVX-NEXT:    setbe %al
   1103 ; FAST_NOAVX-NEXT:    andb $1, %al
   1104 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1105 ; FAST_NOAVX-NEXT:    retq
   1106 ;
   1107 ; FAST_AVX-LABEL: fcmp_uge3:
   1108 ; FAST_AVX:       ## %bb.0:
   1109 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1110 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm1
   1111 ; FAST_AVX-NEXT:    setbe %al
   1112 ; FAST_AVX-NEXT:    andb $1, %al
   1113 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1114 ; FAST_AVX-NEXT:    retq
   1115   %1 = fcmp uge float %x, 0.000000e+00
   1116   ret i1 %1
   1117 }
   1118 
   1119 define zeroext i1 @fcmp_ult2(float %x) {
   1120 ; SDAG-LABEL: fcmp_ult2:
   1121 ; SDAG:       ## %bb.0:
   1122 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
   1123 ; SDAG-NEXT:    setp %al
   1124 ; SDAG-NEXT:    retq
   1125 ;
   1126 ; FAST_NOAVX-LABEL: fcmp_ult2:
   1127 ; FAST_NOAVX:       ## %bb.0:
   1128 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
   1129 ; FAST_NOAVX-NEXT:    setp %al
   1130 ; FAST_NOAVX-NEXT:    andb $1, %al
   1131 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1132 ; FAST_NOAVX-NEXT:    retq
   1133 ;
   1134 ; FAST_AVX-LABEL: fcmp_ult2:
   1135 ; FAST_AVX:       ## %bb.0:
   1136 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
   1137 ; FAST_AVX-NEXT:    setp %al
   1138 ; FAST_AVX-NEXT:    andb $1, %al
   1139 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1140 ; FAST_AVX-NEXT:    retq
   1141   %1 = fcmp ult float %x, %x
   1142   ret i1 %1
   1143 }
   1144 
   1145 define zeroext i1 @fcmp_ult3(float %x) {
   1146 ; SDAG-LABEL: fcmp_ult3:
   1147 ; SDAG:       ## %bb.0:
   1148 ; SDAG-NEXT:    xorps %xmm1, %xmm1
   1149 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
   1150 ; SDAG-NEXT:    setb %al
   1151 ; SDAG-NEXT:    retq
   1152 ;
   1153 ; FAST_NOAVX-LABEL: fcmp_ult3:
   1154 ; FAST_NOAVX:       ## %bb.0:
   1155 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1156 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
   1157 ; FAST_NOAVX-NEXT:    setb %al
   1158 ; FAST_NOAVX-NEXT:    andb $1, %al
   1159 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1160 ; FAST_NOAVX-NEXT:    retq
   1161 ;
   1162 ; FAST_AVX-LABEL: fcmp_ult3:
   1163 ; FAST_AVX:       ## %bb.0:
   1164 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1165 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
   1166 ; FAST_AVX-NEXT:    setb %al
   1167 ; FAST_AVX-NEXT:    andb $1, %al
   1168 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1169 ; FAST_AVX-NEXT:    retq
   1170   %1 = fcmp ult float %x, 0.000000e+00
   1171   ret i1 %1
   1172 }
   1173 
   1174 define zeroext i1 @fcmp_ule2(float %x) {
   1175 ; SDAG-LABEL: fcmp_ule2:
   1176 ; SDAG:       ## %bb.0:
   1177 ; SDAG-NEXT:    movb $1, %al
   1178 ; SDAG-NEXT:    retq
   1179 ;
   1180 ; FAST-LABEL: fcmp_ule2:
   1181 ; FAST:       ## %bb.0:
   1182 ; FAST-NEXT:    movb $1, %al
   1183 ; FAST-NEXT:    andb $1, %al
   1184 ; FAST-NEXT:    movzbl %al, %eax
   1185 ; FAST-NEXT:    retq
   1186   %1 = fcmp ule float %x, %x
   1187   ret i1 %1
   1188 }
   1189 
   1190 define zeroext i1 @fcmp_ule3(float %x) {
   1191 ; SDAG-LABEL: fcmp_ule3:
   1192 ; SDAG:       ## %bb.0:
   1193 ; SDAG-NEXT:    xorps %xmm1, %xmm1
   1194 ; SDAG-NEXT:    ucomiss %xmm1, %xmm0
   1195 ; SDAG-NEXT:    setbe %al
   1196 ; SDAG-NEXT:    retq
   1197 ;
   1198 ; FAST_NOAVX-LABEL: fcmp_ule3:
   1199 ; FAST_NOAVX:       ## %bb.0:
   1200 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1201 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
   1202 ; FAST_NOAVX-NEXT:    setbe %al
   1203 ; FAST_NOAVX-NEXT:    andb $1, %al
   1204 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1205 ; FAST_NOAVX-NEXT:    retq
   1206 ;
   1207 ; FAST_AVX-LABEL: fcmp_ule3:
   1208 ; FAST_AVX:       ## %bb.0:
   1209 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1210 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
   1211 ; FAST_AVX-NEXT:    setbe %al
   1212 ; FAST_AVX-NEXT:    andb $1, %al
   1213 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1214 ; FAST_AVX-NEXT:    retq
   1215   %1 = fcmp ule float %x, 0.000000e+00
   1216   ret i1 %1
   1217 }
   1218 
   1219 define zeroext i1 @fcmp_une2(float %x) {
   1220 ; SDAG-LABEL: fcmp_une2:
   1221 ; SDAG:       ## %bb.0:
   1222 ; SDAG-NEXT:    ucomiss %xmm0, %xmm0
   1223 ; SDAG-NEXT:    setp %al
   1224 ; SDAG-NEXT:    retq
   1225 ;
   1226 ; FAST_NOAVX-LABEL: fcmp_une2:
   1227 ; FAST_NOAVX:       ## %bb.0:
   1228 ; FAST_NOAVX-NEXT:    ucomiss %xmm0, %xmm0
   1229 ; FAST_NOAVX-NEXT:    setp %al
   1230 ; FAST_NOAVX-NEXT:    andb $1, %al
   1231 ; FAST_NOAVX-NEXT:    movzbl %al, %eax
   1232 ; FAST_NOAVX-NEXT:    retq
   1233 ;
   1234 ; FAST_AVX-LABEL: fcmp_une2:
   1235 ; FAST_AVX:       ## %bb.0:
   1236 ; FAST_AVX-NEXT:    vucomiss %xmm0, %xmm0
   1237 ; FAST_AVX-NEXT:    setp %al
   1238 ; FAST_AVX-NEXT:    andb $1, %al
   1239 ; FAST_AVX-NEXT:    movzbl %al, %eax
   1240 ; FAST_AVX-NEXT:    retq
   1241   %1 = fcmp une float %x, %x
   1242   ret i1 %1
   1243 }
   1244 
   1245 define zeroext i1 @fcmp_une3(float %x) {
   1246 ; SDAG-LABEL: fcmp_une3:
   1247 ; SDAG:       ## %bb.0:
   1248 ; SDAG-NEXT:    xorps %xmm1, %xmm1
   1249 ; SDAG-NEXT:    cmpneqss %xmm0, %xmm1
   1250 ; SDAG-NEXT:    movd %xmm1, %eax
   1251 ; SDAG-NEXT:    andl $1, %eax
   1252 ; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
   1253 ; SDAG-NEXT:    retq
   1254 ;
   1255 ; FAST_NOAVX-LABEL: fcmp_une3:
   1256 ; FAST_NOAVX:       ## %bb.0:
   1257 ; FAST_NOAVX-NEXT:    xorps %xmm1, %xmm1
   1258 ; FAST_NOAVX-NEXT:    ucomiss %xmm1, %xmm0
   1259 ; FAST_NOAVX-NEXT:    setne %al
   1260 ; FAST_NOAVX-NEXT:    setp %cl
   1261 ; FAST_NOAVX-NEXT:    orb %al, %cl
   1262 ; FAST_NOAVX-NEXT:    andb $1, %cl
   1263 ; FAST_NOAVX-NEXT:    movzbl %cl, %eax
   1264 ; FAST_NOAVX-NEXT:    retq
   1265 ;
   1266 ; FAST_AVX-LABEL: fcmp_une3:
   1267 ; FAST_AVX:       ## %bb.0:
   1268 ; FAST_AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
   1269 ; FAST_AVX-NEXT:    vucomiss %xmm1, %xmm0
   1270 ; FAST_AVX-NEXT:    setne %al
   1271 ; FAST_AVX-NEXT:    setp %cl
   1272 ; FAST_AVX-NEXT:    orb %al, %cl
   1273 ; FAST_AVX-NEXT:    andb $1, %cl
   1274 ; FAST_AVX-NEXT:    movzbl %cl, %eax
   1275 ; FAST_AVX-NEXT:    retq
   1276   %1 = fcmp une float %x, 0.000000e+00
   1277   ret i1 %1
   1278 }
   1279 
   1280 define zeroext i1 @icmp_eq2(i32 %x) {
   1281 ; SDAG-LABEL: icmp_eq2:
   1282 ; SDAG:       ## %bb.0:
   1283 ; SDAG-NEXT:    movb $1, %al
   1284 ; SDAG-NEXT:    retq
   1285 ;
   1286 ; FAST-LABEL: icmp_eq2:
   1287 ; FAST:       ## %bb.0:
   1288 ; FAST-NEXT:    movb $1, %al
   1289 ; FAST-NEXT:    andb $1, %al
   1290 ; FAST-NEXT:    movzbl %al, %eax
   1291 ; FAST-NEXT:    retq
   1292   %1 = icmp eq i32 %x, %x
   1293   ret i1 %1
   1294 }
   1295 
   1296 define zeroext i1 @icmp_ne2(i32 %x) {
   1297 ; SDAG-LABEL: icmp_ne2:
   1298 ; SDAG:       ## %bb.0:
   1299 ; SDAG-NEXT:    xorl %eax, %eax
   1300 ; SDAG-NEXT:    retq
   1301 ;
   1302 ; FAST-LABEL: icmp_ne2:
   1303 ; FAST:       ## %bb.0:
   1304 ; FAST-NEXT:    xorl %eax, %eax
   1305 ; FAST-NEXT:    andb $1, %al
   1306 ; FAST-NEXT:    movzbl %al, %eax
   1307 ; FAST-NEXT:    retq
   1308   %1 = icmp ne i32 %x, %x
   1309   ret i1 %1
   1310 }
   1311 
   1312 define zeroext i1 @icmp_ugt2(i32 %x) {
   1313 ; SDAG-LABEL: icmp_ugt2:
   1314 ; SDAG:       ## %bb.0:
   1315 ; SDAG-NEXT:    xorl %eax, %eax
   1316 ; SDAG-NEXT:    retq
   1317 ;
   1318 ; FAST-LABEL: icmp_ugt2:
   1319 ; FAST:       ## %bb.0:
   1320 ; FAST-NEXT:    xorl %eax, %eax
   1321 ; FAST-NEXT:    andb $1, %al
   1322 ; FAST-NEXT:    movzbl %al, %eax
   1323 ; FAST-NEXT:    retq
   1324   %1 = icmp ugt i32 %x, %x
   1325   ret i1 %1
   1326 }
   1327 
   1328 define zeroext i1 @icmp_uge2(i32 %x) {
   1329 ; SDAG-LABEL: icmp_uge2:
   1330 ; SDAG:       ## %bb.0:
   1331 ; SDAG-NEXT:    movb $1, %al
   1332 ; SDAG-NEXT:    retq
   1333 ;
   1334 ; FAST-LABEL: icmp_uge2:
   1335 ; FAST:       ## %bb.0:
   1336 ; FAST-NEXT:    movb $1, %al
   1337 ; FAST-NEXT:    andb $1, %al
   1338 ; FAST-NEXT:    movzbl %al, %eax
   1339 ; FAST-NEXT:    retq
   1340   %1 = icmp uge i32 %x, %x
   1341   ret i1 %1
   1342 }
   1343 
   1344 define zeroext i1 @icmp_ult2(i32 %x) {
   1345 ; SDAG-LABEL: icmp_ult2:
   1346 ; SDAG:       ## %bb.0:
   1347 ; SDAG-NEXT:    xorl %eax, %eax
   1348 ; SDAG-NEXT:    retq
   1349 ;
   1350 ; FAST-LABEL: icmp_ult2:
   1351 ; FAST:       ## %bb.0:
   1352 ; FAST-NEXT:    xorl %eax, %eax
   1353 ; FAST-NEXT:    andb $1, %al
   1354 ; FAST-NEXT:    movzbl %al, %eax
   1355 ; FAST-NEXT:    retq
   1356   %1 = icmp ult i32 %x, %x
   1357   ret i1 %1
   1358 }
   1359 
   1360 define zeroext i1 @icmp_ule2(i32 %x) {
   1361 ; SDAG-LABEL: icmp_ule2:
   1362 ; SDAG:       ## %bb.0:
   1363 ; SDAG-NEXT:    movb $1, %al
   1364 ; SDAG-NEXT:    retq
   1365 ;
   1366 ; FAST-LABEL: icmp_ule2:
   1367 ; FAST:       ## %bb.0:
   1368 ; FAST-NEXT:    movb $1, %al
   1369 ; FAST-NEXT:    andb $1, %al
   1370 ; FAST-NEXT:    movzbl %al, %eax
   1371 ; FAST-NEXT:    retq
   1372   %1 = icmp ule i32 %x, %x
   1373   ret i1 %1
   1374 }
   1375 
   1376 define zeroext i1 @icmp_sgt2(i32 %x) {
   1377 ; SDAG-LABEL: icmp_sgt2:
   1378 ; SDAG:       ## %bb.0:
   1379 ; SDAG-NEXT:    xorl %eax, %eax
   1380 ; SDAG-NEXT:    retq
   1381 ;
   1382 ; FAST-LABEL: icmp_sgt2:
   1383 ; FAST:       ## %bb.0:
   1384 ; FAST-NEXT:    xorl %eax, %eax
   1385 ; FAST-NEXT:    andb $1, %al
   1386 ; FAST-NEXT:    movzbl %al, %eax
   1387 ; FAST-NEXT:    retq
   1388   %1 = icmp sgt i32 %x, %x
   1389   ret i1 %1
   1390 }
   1391 
   1392 define zeroext i1 @icmp_sge2(i32 %x) {
   1393 ; SDAG-LABEL: icmp_sge2:
   1394 ; SDAG:       ## %bb.0:
   1395 ; SDAG-NEXT:    movb $1, %al
   1396 ; SDAG-NEXT:    retq
   1397 ;
   1398 ; FAST-LABEL: icmp_sge2:
   1399 ; FAST:       ## %bb.0:
   1400 ; FAST-NEXT:    movb $1, %al
   1401 ; FAST-NEXT:    andb $1, %al
   1402 ; FAST-NEXT:    movzbl %al, %eax
   1403 ; FAST-NEXT:    retq
   1404   %1 = icmp sge i32 %x, %x
   1405   ret i1 %1
   1406 }
   1407 
   1408 define zeroext i1 @icmp_slt2(i32 %x) {
   1409 ; SDAG-LABEL: icmp_slt2:
   1410 ; SDAG:       ## %bb.0:
   1411 ; SDAG-NEXT:    xorl %eax, %eax
   1412 ; SDAG-NEXT:    retq
   1413 ;
   1414 ; FAST-LABEL: icmp_slt2:
   1415 ; FAST:       ## %bb.0:
   1416 ; FAST-NEXT:    xorl %eax, %eax
   1417 ; FAST-NEXT:    andb $1, %al
   1418 ; FAST-NEXT:    movzbl %al, %eax
   1419 ; FAST-NEXT:    retq
   1420   %1 = icmp slt i32 %x, %x
   1421   ret i1 %1
   1422 }
   1423 
   1424 define zeroext i1 @icmp_sle2(i32 %x) {
   1425 ; SDAG-LABEL: icmp_sle2:
   1426 ; SDAG:       ## %bb.0:
   1427 ; SDAG-NEXT:    movb $1, %al
   1428 ; SDAG-NEXT:    retq
   1429 ;
   1430 ; FAST-LABEL: icmp_sle2:
   1431 ; FAST:       ## %bb.0:
   1432 ; FAST-NEXT:    movb $1, %al
   1433 ; FAST-NEXT:    andb $1, %al
   1434 ; FAST-NEXT:    movzbl %al, %eax
   1435 ; FAST-NEXT:    retq
   1436   %1 = icmp sle i32 %x, %x
   1437   ret i1 %1
   1438 }
   1439 
   1440