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 -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:  jnp {{LBB.+_2}}
      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:  jp  {{LBB.+_2}}
    166 ; CHECK-NEXT:  jmp {{LBB.+_1}}
    167   %1 = fcmp une float %x, %y
    168   br i1 %1, label %bb1, label %bb2
    169 bb2:
    170   ret i32 1
    171 bb1:
    172   ret i32 0
    173 }
    174 
    175 define i32 @icmp_eq(i32 %x, i32 %y) {
    176 ; CHECK-LABEL: icmp_eq
    177 ; CHECK:       cmpl %esi, %edi
    178 ; CHECK-NEXT:  jne {{LBB.+_1}}
    179   %1 = icmp eq i32 %x, %y
    180   br i1 %1, label %bb1, label %bb2
    181 bb2:
    182   ret i32 1
    183 bb1:
    184   ret i32 0
    185 }
    186 
    187 define i32 @icmp_ne(i32 %x, i32 %y) {
    188 ; CHECK-LABEL: icmp_ne
    189 ; CHECK:       cmpl %esi, %edi
    190 ; CHECK-NEXT:  je {{LBB.+_1}}
    191   %1 = icmp ne i32 %x, %y
    192   br i1 %1, label %bb1, label %bb2
    193 bb2:
    194   ret i32 1
    195 bb1:
    196   ret i32 0
    197 }
    198 
    199 define i32 @icmp_ugt(i32 %x, i32 %y) {
    200 ; CHECK-LABEL: icmp_ugt
    201 ; CHECK:       cmpl %esi, %edi
    202 ; CHECK-NEXT:  jbe {{LBB.+_1}}
    203   %1 = icmp ugt i32 %x, %y
    204   br i1 %1, label %bb1, label %bb2
    205 bb2:
    206   ret i32 1
    207 bb1:
    208   ret i32 0
    209 }
    210 
    211 define i32 @icmp_uge(i32 %x, i32 %y) {
    212 ; CHECK-LABEL: icmp_uge
    213 ; CHECK:       cmpl %esi, %edi
    214 ; CHECK-NEXT:  jb {{LBB.+_1}}
    215   %1 = icmp uge i32 %x, %y
    216   br i1 %1, label %bb1, label %bb2
    217 bb2:
    218   ret i32 1
    219 bb1:
    220   ret i32 0
    221 }
    222 
    223 define i32 @icmp_ult(i32 %x, i32 %y) {
    224 ; CHECK-LABEL: icmp_ult
    225 ; CHECK:       cmpl %esi, %edi
    226 ; CHECK-NEXT:  jae {{LBB.+_1}}
    227   %1 = icmp ult i32 %x, %y
    228   br i1 %1, label %bb1, label %bb2
    229 bb2:
    230   ret i32 1
    231 bb1:
    232   ret i32 0
    233 }
    234 
    235 define i32 @icmp_ule(i32 %x, i32 %y) {
    236 ; CHECK-LABEL: icmp_ule
    237 ; CHECK:       cmpl %esi, %edi
    238 ; CHECK-NEXT:  ja {{LBB.+_1}}
    239   %1 = icmp ule i32 %x, %y
    240   br i1 %1, label %bb1, label %bb2
    241 bb2:
    242   ret i32 1
    243 bb1:
    244   ret i32 0
    245 }
    246 
    247 define i32 @icmp_sgt(i32 %x, i32 %y) {
    248 ; CHECK-LABEL: icmp_sgt
    249 ; CHECK:       cmpl %esi, %edi
    250 ; CHECK-NEXT:  jle {{LBB.+_1}}
    251   %1 = icmp sgt i32 %x, %y
    252   br i1 %1, label %bb1, label %bb2
    253 bb2:
    254   ret i32 1
    255 bb1:
    256   ret i32 0
    257 }
    258 
    259 define i32 @icmp_sge(i32 %x, i32 %y) {
    260 ; CHECK-LABEL: icmp_sge
    261 ; CHECK:       cmpl %esi, %edi
    262 ; CHECK-NEXT:  jl {{LBB.+_1}}
    263   %1 = icmp sge i32 %x, %y
    264   br i1 %1, label %bb1, label %bb2
    265 bb2:
    266   ret i32 1
    267 bb1:
    268   ret i32 0
    269 }
    270 
    271 define i32 @icmp_slt(i32 %x, i32 %y) {
    272 ; CHECK-LABEL: icmp_slt
    273 ; CHECK:       cmpl %esi, %edi
    274 ; CHECK-NEXT:  jge {{LBB.+_1}}
    275   %1 = icmp slt i32 %x, %y
    276   br i1 %1, label %bb1, label %bb2
    277 bb2:
    278   ret i32 1
    279 bb1:
    280   ret i32 0
    281 }
    282 
    283 define i32 @icmp_sle(i32 %x, i32 %y) {
    284 ; CHECK-LABEL: icmp_sle
    285 ; CHECK:       cmpl %esi, %edi
    286 ; CHECK-NEXT:  jg {{LBB.+_1}}
    287   %1 = icmp sle i32 %x, %y
    288   br i1 %1, label %bb1, label %bb2
    289 bb2:
    290   ret i32 1
    291 bb1:
    292   ret i32 0
    293 }
    294 
    295