Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s                             -mtriple=x86_64-apple-darwin10 | FileCheck %s
      2 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s
      3 
      4 define i32 @fcmp_oeq(float %x, float %y) {
      5 ; CHECK-LABEL: fcmp_oeq
      6 ; CHECK:       ucomiss  %xmm1, %xmm0
      7 ; CHECK-NEXT:  jne {{LBB.+_1}}
      8 ; CHECK-NEXT:  jp {{LBB.+_1}}
      9   %1 = fcmp oeq float %x, %y
     10   br i1 %1, label %bb1, label %bb2
     11 bb2:
     12   ret i32 1
     13 bb1:
     14   ret i32 0
     15 }
     16 
     17 define i32 @fcmp_ogt(float %x, float %y) {
     18 ; CHECK-LABEL: fcmp_ogt
     19 ; CHECK:       ucomiss  %xmm1, %xmm0
     20 ; CHECK-NEXT:  jbe {{LBB.+_1}}
     21   %1 = fcmp ogt float %x, %y
     22   br i1 %1, label %bb1, label %bb2
     23 bb2:
     24   ret i32 1
     25 bb1:
     26   ret i32 0
     27 }
     28 
     29 define i32 @fcmp_oge(float %x, float %y) {
     30 ; CHECK-LABEL: fcmp_oge
     31 ; CHECK:       ucomiss  %xmm1, %xmm0
     32 ; CHECK-NEXT:  jb {{LBB.+_1}}
     33   %1 = fcmp oge float %x, %y
     34   br i1 %1, label %bb1, label %bb2
     35 bb2:
     36   ret i32 1
     37 bb1:
     38   ret i32 0
     39 }
     40 
     41 define i32 @fcmp_olt(float %x, float %y) {
     42 ; CHECK-LABEL: fcmp_olt
     43 ; CHECK:       ucomiss  %xmm0, %xmm1
     44 ; CHECK-NEXT:  jbe {{LBB.+_1}}
     45   %1 = fcmp olt float %x, %y
     46   br i1 %1, label %bb1, label %bb2
     47 bb2:
     48   ret i32 1
     49 bb1:
     50   ret i32 0
     51 }
     52 
     53 define i32 @fcmp_ole(float %x, float %y) {
     54 ; CHECK-LABEL: fcmp_ole
     55 ; CHECK:       ucomiss  %xmm0, %xmm1
     56 ; CHECK-NEXT:  jb {{LBB.+_1}}
     57   %1 = fcmp ole float %x, %y
     58   br i1 %1, label %bb1, label %bb2
     59 bb2:
     60   ret i32 1
     61 bb1:
     62   ret i32 0
     63 }
     64 
     65 define i32 @fcmp_one(float %x, float %y) {
     66 ; CHECK-LABEL: fcmp_one
     67 ; CHECK:       ucomiss  %xmm1, %xmm0
     68 ; CHECK-NEXT:  je {{LBB.+_1}}
     69   %1 = fcmp one float %x, %y
     70   br i1 %1, label %bb1, label %bb2
     71 bb2:
     72   ret i32 1
     73 bb1:
     74   ret i32 0
     75 }
     76 
     77 define i32 @fcmp_ord(float %x, float %y) {
     78 ; CHECK-LABEL: fcmp_ord
     79 ; CHECK:       ucomiss  %xmm1, %xmm0
     80 ; CHECK-NEXT:  jp {{LBB.+_1}}
     81   %1 = fcmp ord float %x, %y
     82   br i1 %1, label %bb1, label %bb2
     83 bb2:
     84   ret i32 1
     85 bb1:
     86   ret i32 0
     87 }
     88 
     89 define i32 @fcmp_uno(float %x, float %y) {
     90 ; CHECK-LABEL: fcmp_uno
     91 ; CHECK:       ucomiss  %xmm1, %xmm0
     92 ; CHECK-NEXT:  jp {{LBB.+_2}}
     93   %1 = fcmp uno float %x, %y
     94   br i1 %1, label %bb1, label %bb2
     95 bb2:
     96   ret i32 1
     97 bb1:
     98   ret i32 0
     99 }
    100 
    101 define i32 @fcmp_ueq(float %x, float %y) {
    102 ; CHECK-LABEL: fcmp_ueq
    103 ; CHECK:       ucomiss  %xmm1, %xmm0
    104 ; CHECK-NEXT:  je {{LBB.+_2}}
    105   %1 = fcmp ueq float %x, %y
    106   br i1 %1, label %bb1, label %bb2
    107 bb2:
    108   ret i32 1
    109 bb1:
    110   ret i32 0
    111 }
    112 
    113 define i32 @fcmp_ugt(float %x, float %y) {
    114 ; CHECK-LABEL: fcmp_ugt
    115 ; CHECK:       ucomiss  %xmm0, %xmm1
    116 ; CHECK-NEXT:  jae {{LBB.+_1}}
    117   %1 = fcmp ugt float %x, %y
    118   br i1 %1, label %bb1, label %bb2
    119 bb2:
    120   ret i32 1
    121 bb1:
    122   ret i32 0
    123 }
    124 
    125 define i32 @fcmp_uge(float %x, float %y) {
    126 ; CHECK-LABEL: fcmp_uge
    127 ; CHECK:       ucomiss  %xmm0, %xmm1
    128 ; CHECK-NEXT:  ja {{LBB.+_1}}
    129   %1 = fcmp uge float %x, %y
    130   br i1 %1, label %bb1, label %bb2
    131 bb2:
    132   ret i32 1
    133 bb1:
    134   ret i32 0
    135 }
    136 
    137 define i32 @fcmp_ult(float %x, float %y) {
    138 ; CHECK-LABEL: fcmp_ult
    139 ; CHECK:       ucomiss  %xmm1, %xmm0
    140 ; CHECK-NEXT:  jae {{LBB.+_1}}
    141   %1 = fcmp ult float %x, %y
    142   br i1 %1, label %bb1, label %bb2
    143 bb2:
    144   ret i32 1
    145 bb1:
    146   ret i32 0
    147 }
    148 
    149 define i32 @fcmp_ule(float %x, float %y) {
    150 ; CHECK-LABEL: fcmp_ule
    151 ; CHECK:       ucomiss  %xmm1, %xmm0
    152 ; CHECK-NEXT:  ja {{LBB.+_1}}
    153   %1 = fcmp ule float %x, %y
    154   br i1 %1, label %bb1, label %bb2
    155 bb2:
    156   ret i32 1
    157 bb1:
    158   ret i32 0
    159 }
    160 
    161 define i32 @fcmp_une(float %x, float %y) {
    162 ; CHECK-LABEL: fcmp_une
    163 ; CHECK:       ucomiss  %xmm1, %xmm0
    164 ; CHECK-NEXT:  jne {{LBB.+_2}}
    165 ; CHECK-NEXT:  jnp {{LBB.+_1}}
    166   %1 = fcmp une float %x, %y
    167   br i1 %1, label %bb1, label %bb2
    168 bb2:
    169   ret i32 1
    170 bb1:
    171   ret i32 0
    172 }
    173 
    174 define i32 @icmp_eq(i32 %x, i32 %y) {
    175 ; CHECK-LABEL: icmp_eq
    176 ; CHECK:       cmpl %esi, %edi
    177 ; CHECK-NEXT:  jne {{LBB.+_1}}
    178   %1 = icmp eq i32 %x, %y
    179   br i1 %1, label %bb1, label %bb2
    180 bb2:
    181   ret i32 1
    182 bb1:
    183   ret i32 0
    184 }
    185 
    186 define i32 @icmp_ne(i32 %x, i32 %y) {
    187 ; CHECK-LABEL: icmp_ne
    188 ; CHECK:       cmpl %esi, %edi
    189 ; CHECK-NEXT:  je {{LBB.+_1}}
    190   %1 = icmp ne i32 %x, %y
    191   br i1 %1, label %bb1, label %bb2
    192 bb2:
    193   ret i32 1
    194 bb1:
    195   ret i32 0
    196 }
    197 
    198 define i32 @icmp_ugt(i32 %x, i32 %y) {
    199 ; CHECK-LABEL: icmp_ugt
    200 ; CHECK:       cmpl %esi, %edi
    201 ; CHECK-NEXT:  jbe {{LBB.+_1}}
    202   %1 = icmp ugt i32 %x, %y
    203   br i1 %1, label %bb1, label %bb2
    204 bb2:
    205   ret i32 1
    206 bb1:
    207   ret i32 0
    208 }
    209 
    210 define i32 @icmp_uge(i32 %x, i32 %y) {
    211 ; CHECK-LABEL: icmp_uge
    212 ; CHECK:       cmpl %esi, %edi
    213 ; CHECK-NEXT:  jb {{LBB.+_1}}
    214   %1 = icmp uge i32 %x, %y
    215   br i1 %1, label %bb1, label %bb2
    216 bb2:
    217   ret i32 1
    218 bb1:
    219   ret i32 0
    220 }
    221 
    222 define i32 @icmp_ult(i32 %x, i32 %y) {
    223 ; CHECK-LABEL: icmp_ult
    224 ; CHECK:       cmpl %esi, %edi
    225 ; CHECK-NEXT:  jae {{LBB.+_1}}
    226   %1 = icmp ult i32 %x, %y
    227   br i1 %1, label %bb1, label %bb2
    228 bb2:
    229   ret i32 1
    230 bb1:
    231   ret i32 0
    232 }
    233 
    234 define i32 @icmp_ule(i32 %x, i32 %y) {
    235 ; CHECK-LABEL: icmp_ule
    236 ; CHECK:       cmpl %esi, %edi
    237 ; CHECK-NEXT:  ja {{LBB.+_1}}
    238   %1 = icmp ule i32 %x, %y
    239   br i1 %1, label %bb1, label %bb2
    240 bb2:
    241   ret i32 1
    242 bb1:
    243   ret i32 0
    244 }
    245 
    246 define i32 @icmp_sgt(i32 %x, i32 %y) {
    247 ; CHECK-LABEL: icmp_sgt
    248 ; CHECK:       cmpl %esi, %edi
    249 ; CHECK-NEXT:  jle {{LBB.+_1}}
    250   %1 = icmp sgt i32 %x, %y
    251   br i1 %1, label %bb1, label %bb2
    252 bb2:
    253   ret i32 1
    254 bb1:
    255   ret i32 0
    256 }
    257 
    258 define i32 @icmp_sge(i32 %x, i32 %y) {
    259 ; CHECK-LABEL: icmp_sge
    260 ; CHECK:       cmpl %esi, %edi
    261 ; CHECK-NEXT:  jl {{LBB.+_1}}
    262   %1 = icmp sge i32 %x, %y
    263   br i1 %1, label %bb1, label %bb2
    264 bb2:
    265   ret i32 1
    266 bb1:
    267   ret i32 0
    268 }
    269 
    270 define i32 @icmp_slt(i32 %x, i32 %y) {
    271 ; CHECK-LABEL: icmp_slt
    272 ; CHECK:       cmpl %esi, %edi
    273 ; CHECK-NEXT:  jge {{LBB.+_1}}
    274   %1 = icmp slt i32 %x, %y
    275   br i1 %1, label %bb1, label %bb2
    276 bb2:
    277   ret i32 1
    278 bb1:
    279   ret i32 0
    280 }
    281 
    282 define i32 @icmp_sle(i32 %x, i32 %y) {
    283 ; CHECK-LABEL: icmp_sle
    284 ; CHECK:       cmpl %esi, %edi
    285 ; CHECK-NEXT:  jg {{LBB.+_1}}
    286   %1 = icmp sle i32 %x, %y
    287   br i1 %1, label %bb1, label %bb2
    288 bb2:
    289   ret i32 1
    290 bb1:
    291   ret i32 0
    292 }
    293 
    294