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=i686-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=X32
      3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=X64
      4 
      5 define i8 @test1(i8 %x) nounwind {
      6 ; X32-LABEL: test1:
      7 ; X32:       ## %bb.0:
      8 ; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
      9 ; X32-NEXT:    andb $1, %al
     10 ; X32-NEXT:    negb %al
     11 ; X32-NEXT:    retl
     12 ;
     13 ; X64-LABEL: test1:
     14 ; X64:       ## %bb.0:
     15 ; X64-NEXT:    andb $1, %dil
     16 ; X64-NEXT:    negb %dil
     17 ; X64-NEXT:    movl %edi, %eax
     18 ; X64-NEXT:    retq
     19   %z = trunc i8 %x to i1
     20   %u = sext i1 %z to i8
     21   ret i8 %u
     22 }
     23 
     24 define i16 @test2(i16 %x) nounwind {
     25 ; X32-LABEL: test2:
     26 ; X32:       ## %bb.0:
     27 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
     28 ; X32-NEXT:    andb $1, %al
     29 ; X32-NEXT:    negb %al
     30 ; X32-NEXT:    movsbl %al, %eax
     31 ; X32-NEXT:    ## kill: def $ax killed $ax killed $eax
     32 ; X32-NEXT:    retl
     33 ;
     34 ; X64-LABEL: test2:
     35 ; X64:       ## %bb.0:
     36 ; X64-NEXT:    andb $1, %dil
     37 ; X64-NEXT:    negb %dil
     38 ; X64-NEXT:    movsbl %dil, %eax
     39 ; X64-NEXT:    ## kill: def $ax killed $ax killed $eax
     40 ; X64-NEXT:    retq
     41   %z = trunc i16 %x to i1
     42   %u = sext i1 %z to i16
     43   ret i16 %u
     44 }
     45 
     46 define i32 @test3(i32 %x) nounwind {
     47 ; X32-LABEL: test3:
     48 ; X32:       ## %bb.0:
     49 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
     50 ; X32-NEXT:    andb $1, %al
     51 ; X32-NEXT:    negb %al
     52 ; X32-NEXT:    movsbl %al, %eax
     53 ; X32-NEXT:    retl
     54 ;
     55 ; X64-LABEL: test3:
     56 ; X64:       ## %bb.0:
     57 ; X64-NEXT:    andb $1, %dil
     58 ; X64-NEXT:    negb %dil
     59 ; X64-NEXT:    movsbl %dil, %eax
     60 ; X64-NEXT:    retq
     61   %z = trunc i32 %x to i1
     62   %u = sext i1 %z to i32
     63   ret i32 %u
     64 }
     65 
     66 define i32 @test4(i32 %x) nounwind {
     67 ; X32-LABEL: test4:
     68 ; X32:       ## %bb.0:
     69 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
     70 ; X32-NEXT:    andb $1, %al
     71 ; X32-NEXT:    negb %al
     72 ; X32-NEXT:    movsbl %al, %eax
     73 ; X32-NEXT:    retl
     74 ;
     75 ; X64-LABEL: test4:
     76 ; X64:       ## %bb.0:
     77 ; X64-NEXT:    andb $1, %dil
     78 ; X64-NEXT:    negb %dil
     79 ; X64-NEXT:    movsbl %dil, %eax
     80 ; X64-NEXT:    retq
     81   %z = trunc i32 %x to i1
     82   %u = sext i1 %z to i32
     83   ret i32 %u
     84 }
     85 
     86 define i8 @test5(i8 %x) nounwind {
     87 ; X32-LABEL: test5:
     88 ; X32:       ## %bb.0:
     89 ; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
     90 ; X32-NEXT:    andb $1, %al
     91 ; X32-NEXT:    retl
     92 ;
     93 ; X64-LABEL: test5:
     94 ; X64:       ## %bb.0:
     95 ; X64-NEXT:    andb $1, %dil
     96 ; X64-NEXT:    movl %edi, %eax
     97 ; X64-NEXT:    retq
     98   %z = trunc i8 %x to i1
     99   %u = zext i1 %z to i8
    100   ret i8 %u
    101 }
    102 
    103 define i16 @test6(i16 %x) nounwind {
    104 ; X32-LABEL: test6:
    105 ; X32:       ## %bb.0:
    106 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    107 ; X32-NEXT:    andb $1, %al
    108 ; X32-NEXT:    movzbl %al, %eax
    109 ; X32-NEXT:    ## kill: def $ax killed $ax killed $eax
    110 ; X32-NEXT:    retl
    111 ;
    112 ; X64-LABEL: test6:
    113 ; X64:       ## %bb.0:
    114 ; X64-NEXT:    andb $1, %dil
    115 ; X64-NEXT:    movzbl %dil, %eax
    116 ; X64-NEXT:    ## kill: def $ax killed $ax killed $eax
    117 ; X64-NEXT:    retq
    118   %z = trunc i16 %x to i1
    119   %u = zext i1 %z to i16
    120   ret i16 %u
    121 }
    122 
    123 define i32 @test7(i32 %x) nounwind {
    124 ; X32-LABEL: test7:
    125 ; X32:       ## %bb.0:
    126 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    127 ; X32-NEXT:    andb $1, %al
    128 ; X32-NEXT:    movzbl %al, %eax
    129 ; X32-NEXT:    retl
    130 ;
    131 ; X64-LABEL: test7:
    132 ; X64:       ## %bb.0:
    133 ; X64-NEXT:    andb $1, %dil
    134 ; X64-NEXT:    movzbl %dil, %eax
    135 ; X64-NEXT:    retq
    136   %z = trunc i32 %x to i1
    137   %u = zext i1 %z to i32
    138   ret i32 %u
    139 }
    140 
    141 define i32 @test8(i32 %x) nounwind {
    142 ; X32-LABEL: test8:
    143 ; X32:       ## %bb.0:
    144 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    145 ; X32-NEXT:    andb $1, %al
    146 ; X32-NEXT:    movzbl %al, %eax
    147 ; X32-NEXT:    retl
    148 ;
    149 ; X64-LABEL: test8:
    150 ; X64:       ## %bb.0:
    151 ; X64-NEXT:    andb $1, %dil
    152 ; X64-NEXT:    movzbl %dil, %eax
    153 ; X64-NEXT:    retq
    154   %z = trunc i32 %x to i1
    155   %u = zext i1 %z to i32
    156   ret i32 %u
    157 }
    158 
    159 define i16 @test9(i8 %x) nounwind {
    160 ; X32-LABEL: test9:
    161 ; X32:       ## %bb.0:
    162 ; X32-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
    163 ; X32-NEXT:    ## kill: def $ax killed $ax killed $eax
    164 ; X32-NEXT:    retl
    165 ;
    166 ; X64-LABEL: test9:
    167 ; X64:       ## %bb.0:
    168 ; X64-NEXT:    movsbl %dil, %eax
    169 ; X64-NEXT:    ## kill: def $ax killed $ax killed $eax
    170 ; X64-NEXT:    retq
    171   %u = sext i8 %x to i16
    172   ret i16 %u
    173 }
    174 
    175 define i32 @test10(i8 %x) nounwind {
    176 ; X32-LABEL: test10:
    177 ; X32:       ## %bb.0:
    178 ; X32-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
    179 ; X32-NEXT:    retl
    180 ;
    181 ; X64-LABEL: test10:
    182 ; X64:       ## %bb.0:
    183 ; X64-NEXT:    movsbl %dil, %eax
    184 ; X64-NEXT:    retq
    185   %u = sext i8 %x to i32
    186   ret i32 %u
    187 }
    188 
    189 define i64 @test11(i8 %x) nounwind {
    190 ; X32-LABEL: test11:
    191 ; X32:       ## %bb.0:
    192 ; X32-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
    193 ; X32-NEXT:    movl %eax, %edx
    194 ; X32-NEXT:    sarl $31, %edx
    195 ; X32-NEXT:    retl
    196 ;
    197 ; X64-LABEL: test11:
    198 ; X64:       ## %bb.0:
    199 ; X64-NEXT:    movsbq %dil, %rax
    200 ; X64-NEXT:    retq
    201   %u = sext i8 %x to i64
    202   ret i64 %u
    203 }
    204 
    205 define i16 @test12(i8 %x) nounwind {
    206 ; X32-LABEL: test12:
    207 ; X32:       ## %bb.0:
    208 ; X32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
    209 ; X32-NEXT:    ## kill: def $ax killed $ax killed $eax
    210 ; X32-NEXT:    retl
    211 ;
    212 ; X64-LABEL: test12:
    213 ; X64:       ## %bb.0:
    214 ; X64-NEXT:    movzbl %dil, %eax
    215 ; X64-NEXT:    ## kill: def $ax killed $ax killed $eax
    216 ; X64-NEXT:    retq
    217   %u = zext i8 %x to i16
    218   ret i16 %u
    219 }
    220 
    221 define i32 @test13(i8 %x) nounwind {
    222 ; X32-LABEL: test13:
    223 ; X32:       ## %bb.0:
    224 ; X32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
    225 ; X32-NEXT:    retl
    226 ;
    227 ; X64-LABEL: test13:
    228 ; X64:       ## %bb.0:
    229 ; X64-NEXT:    movzbl %dil, %eax
    230 ; X64-NEXT:    retq
    231   %u = zext i8 %x to i32
    232   ret i32 %u
    233 }
    234 
    235 define i64 @test14(i8 %x) nounwind {
    236 ; X32-LABEL: test14:
    237 ; X32:       ## %bb.0:
    238 ; X32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
    239 ; X32-NEXT:    xorl %edx, %edx
    240 ; X32-NEXT:    retl
    241 ;
    242 ; X64-LABEL: test14:
    243 ; X64:       ## %bb.0:
    244 ; X64-NEXT:    movzbl %dil, %eax
    245 ; X64-NEXT:    retq
    246   %u = zext i8 %x to i64
    247   ret i64 %u
    248 }
    249 
    250 define i32 @test15(i16 %x) nounwind {
    251 ; X32-LABEL: test15:
    252 ; X32:       ## %bb.0:
    253 ; X32-NEXT:    movswl {{[0-9]+}}(%esp), %eax
    254 ; X32-NEXT:    retl
    255 ;
    256 ; X64-LABEL: test15:
    257 ; X64:       ## %bb.0:
    258 ; X64-NEXT:    movswl %di, %eax
    259 ; X64-NEXT:    retq
    260   %u = sext i16 %x to i32
    261   ret i32 %u
    262 }
    263 
    264 define i64 @test16(i16 %x) nounwind {
    265 ; X32-LABEL: test16:
    266 ; X32:       ## %bb.0:
    267 ; X32-NEXT:    movswl {{[0-9]+}}(%esp), %eax
    268 ; X32-NEXT:    movl %eax, %edx
    269 ; X32-NEXT:    sarl $31, %edx
    270 ; X32-NEXT:    retl
    271 ;
    272 ; X64-LABEL: test16:
    273 ; X64:       ## %bb.0:
    274 ; X64-NEXT:    movswq %di, %rax
    275 ; X64-NEXT:    retq
    276   %u = sext i16 %x to i64
    277   ret i64 %u
    278 }
    279 
    280 define i32 @test17(i16 %x) nounwind {
    281 ; X32-LABEL: test17:
    282 ; X32:       ## %bb.0:
    283 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    284 ; X32-NEXT:    retl
    285 ;
    286 ; X64-LABEL: test17:
    287 ; X64:       ## %bb.0:
    288 ; X64-NEXT:    movzwl %di, %eax
    289 ; X64-NEXT:    retq
    290   %u = zext i16 %x to i32
    291   ret i32 %u
    292 }
    293 
    294 define i64 @test18(i16 %x) nounwind {
    295 ; X32-LABEL: test18:
    296 ; X32:       ## %bb.0:
    297 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    298 ; X32-NEXT:    xorl %edx, %edx
    299 ; X32-NEXT:    retl
    300 ;
    301 ; X64-LABEL: test18:
    302 ; X64:       ## %bb.0:
    303 ; X64-NEXT:    movzwl %di, %eax
    304 ; X64-NEXT:    retq
    305   %u = zext i16 %x to i64
    306   ret i64 %u
    307 }
    308 
    309 define i64 @test19(i32 %x) nounwind {
    310 ; X32-LABEL: test19:
    311 ; X32:       ## %bb.0:
    312 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    313 ; X32-NEXT:    movl %eax, %edx
    314 ; X32-NEXT:    sarl $31, %edx
    315 ; X32-NEXT:    retl
    316 ;
    317 ; X64-LABEL: test19:
    318 ; X64:       ## %bb.0:
    319 ; X64-NEXT:    movslq %edi, %rax
    320 ; X64-NEXT:    retq
    321   %u = sext i32 %x to i64
    322   ret i64 %u
    323 }
    324 
    325 define i64 @test20(i32 %x) nounwind {
    326 ; X32-LABEL: test20:
    327 ; X32:       ## %bb.0:
    328 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    329 ; X32-NEXT:    xorl %edx, %edx
    330 ; X32-NEXT:    retl
    331 ;
    332 ; X64-LABEL: test20:
    333 ; X64:       ## %bb.0:
    334 ; X64-NEXT:    movl %edi, %eax
    335 ; X64-NEXT:    retq
    336   %u = zext i32 %x to i64
    337   ret i64 %u
    338 }
    339