Home | History | Annotate | Download | only in X86
      1 ; Test the basic functionality of integer element promotions of different types.
      2 ; This tests checks passing of arguments, loading and storing to memory and
      3 ; basic arithmetic.
      4 ; RUN: llc -march=x86 -promote-elements < %s
      5 ; RUN: llc -march=x86-64 -promote-elements < %s
      6 
      7 define <1 x i8> @test_1xi8(<1 x i8> %x, <1 x i8>* %b) {
      8   %bb = load <1 x i8>* %b
      9   %tt = xor <1 x i8> %x, %bb
     10   store <1 x i8> %tt, <1 x i8>* %b
     11   br label %next
     12 
     13 next:
     14   ret <1 x i8> %tt
     15 }
     16 
     17 
     18 define <1 x i16> @test_1xi16(<1 x i16> %x, <1 x i16>* %b) {
     19   %bb = load <1 x i16>* %b
     20   %tt = xor <1 x i16> %x, %bb
     21   store <1 x i16> %tt, <1 x i16>* %b
     22   br label %next
     23 
     24 next:
     25   ret <1 x i16> %tt
     26 }
     27 
     28 
     29 define <1 x i32> @test_1xi32(<1 x i32> %x, <1 x i32>* %b) {
     30   %bb = load <1 x i32>* %b
     31   %tt = xor <1 x i32> %x, %bb
     32   store <1 x i32> %tt, <1 x i32>* %b
     33   br label %next
     34 
     35 next:
     36   ret <1 x i32> %tt
     37 }
     38 
     39 
     40 define <1 x i64> @test_1xi64(<1 x i64> %x, <1 x i64>* %b) {
     41   %bb = load <1 x i64>* %b
     42   %tt = xor <1 x i64> %x, %bb
     43   store <1 x i64> %tt, <1 x i64>* %b
     44   br label %next
     45 
     46 next:
     47   ret <1 x i64> %tt
     48 }
     49 
     50 
     51 define <1 x i128> @test_1xi128(<1 x i128> %x, <1 x i128>* %b) {
     52   %bb = load <1 x i128>* %b
     53   %tt = xor <1 x i128> %x, %bb
     54   store <1 x i128> %tt, <1 x i128>* %b
     55   br label %next
     56 
     57 next:
     58   ret <1 x i128> %tt
     59 }
     60 
     61 
     62 define <1 x i256> @test_1xi256(<1 x i256> %x, <1 x i256>* %b) {
     63   %bb = load <1 x i256>* %b
     64   %tt = xor <1 x i256> %x, %bb
     65   store <1 x i256> %tt, <1 x i256>* %b
     66   br label %next
     67 
     68 next:
     69   ret <1 x i256> %tt
     70 }
     71 
     72 
     73 define <1 x i512> @test_1xi512(<1 x i512> %x, <1 x i512>* %b) {
     74   %bb = load <1 x i512>* %b
     75   %tt = xor <1 x i512> %x, %bb
     76   store <1 x i512> %tt, <1 x i512>* %b
     77   br label %next
     78 
     79 next:
     80   ret <1 x i512> %tt
     81 }
     82 
     83 
     84 define <2 x i8> @test_2xi8(<2 x i8> %x, <2 x i8>* %b) {
     85   %bb = load <2 x i8>* %b
     86   %tt = xor <2 x i8> %x, %bb
     87   store <2 x i8> %tt, <2 x i8>* %b
     88   br label %next
     89 
     90 next:
     91   ret <2 x i8> %tt
     92 }
     93 
     94 
     95 define <2 x i16> @test_2xi16(<2 x i16> %x, <2 x i16>* %b) {
     96   %bb = load <2 x i16>* %b
     97   %tt = xor <2 x i16> %x, %bb
     98   store <2 x i16> %tt, <2 x i16>* %b
     99   br label %next
    100 
    101 next:
    102   ret <2 x i16> %tt
    103 }
    104 
    105 
    106 define <2 x i32> @test_2xi32(<2 x i32> %x, <2 x i32>* %b) {
    107   %bb = load <2 x i32>* %b
    108   %tt = xor <2 x i32> %x, %bb
    109   store <2 x i32> %tt, <2 x i32>* %b
    110   br label %next
    111 
    112 next:
    113   ret <2 x i32> %tt
    114 }
    115 
    116 
    117 define <2 x i64> @test_2xi64(<2 x i64> %x, <2 x i64>* %b) {
    118   %bb = load <2 x i64>* %b
    119   %tt = xor <2 x i64> %x, %bb
    120   store <2 x i64> %tt, <2 x i64>* %b
    121   br label %next
    122 
    123 next:
    124   ret <2 x i64> %tt
    125 }
    126 
    127 
    128 define <2 x i128> @test_2xi128(<2 x i128> %x, <2 x i128>* %b) {
    129   %bb = load <2 x i128>* %b
    130   %tt = xor <2 x i128> %x, %bb
    131   store <2 x i128> %tt, <2 x i128>* %b
    132   br label %next
    133 
    134 next:
    135   ret <2 x i128> %tt
    136 }
    137 
    138 
    139 define <2 x i256> @test_2xi256(<2 x i256> %x, <2 x i256>* %b) {
    140   %bb = load <2 x i256>* %b
    141   %tt = xor <2 x i256> %x, %bb
    142   store <2 x i256> %tt, <2 x i256>* %b
    143   br label %next
    144 
    145 next:
    146   ret <2 x i256> %tt
    147 }
    148 
    149 
    150 define <2 x i512> @test_2xi512(<2 x i512> %x, <2 x i512>* %b) {
    151   %bb = load <2 x i512>* %b
    152   %tt = xor <2 x i512> %x, %bb
    153   store <2 x i512> %tt, <2 x i512>* %b
    154   br label %next
    155 
    156 next:
    157   ret <2 x i512> %tt
    158 }
    159 
    160 
    161 define <3 x i8> @test_3xi8(<3 x i8> %x, <3 x i8>* %b) {
    162   %bb = load <3 x i8>* %b
    163   %tt = xor <3 x i8> %x, %bb
    164   store <3 x i8> %tt, <3 x i8>* %b
    165   br label %next
    166 
    167 next:
    168   ret <3 x i8> %tt
    169 }
    170 
    171 
    172 define <3 x i16> @test_3xi16(<3 x i16> %x, <3 x i16>* %b) {
    173   %bb = load <3 x i16>* %b
    174   %tt = xor <3 x i16> %x, %bb
    175   store <3 x i16> %tt, <3 x i16>* %b
    176   br label %next
    177 
    178 next:
    179   ret <3 x i16> %tt
    180 }
    181 
    182 
    183 define <3 x i32> @test_3xi32(<3 x i32> %x, <3 x i32>* %b) {
    184   %bb = load <3 x i32>* %b
    185   %tt = xor <3 x i32> %x, %bb
    186   store <3 x i32> %tt, <3 x i32>* %b
    187   br label %next
    188 
    189 next:
    190   ret <3 x i32> %tt
    191 }
    192 
    193 
    194 define <3 x i64> @test_3xi64(<3 x i64> %x, <3 x i64>* %b) {
    195   %bb = load <3 x i64>* %b
    196   %tt = xor <3 x i64> %x, %bb
    197   store <3 x i64> %tt, <3 x i64>* %b
    198   br label %next
    199 
    200 next:
    201   ret <3 x i64> %tt
    202 }
    203 
    204 
    205 define <3 x i128> @test_3xi128(<3 x i128> %x, <3 x i128>* %b) {
    206   %bb = load <3 x i128>* %b
    207   %tt = xor <3 x i128> %x, %bb
    208   store <3 x i128> %tt, <3 x i128>* %b
    209   br label %next
    210 
    211 next:
    212   ret <3 x i128> %tt
    213 }
    214 
    215 
    216 define <3 x i256> @test_3xi256(<3 x i256> %x, <3 x i256>* %b) {
    217   %bb = load <3 x i256>* %b
    218   %tt = xor <3 x i256> %x, %bb
    219   store <3 x i256> %tt, <3 x i256>* %b
    220   br label %next
    221 
    222 next:
    223   ret <3 x i256> %tt
    224 }
    225 
    226 
    227 define <3 x i512> @test_3xi512(<3 x i512> %x, <3 x i512>* %b) {
    228   %bb = load <3 x i512>* %b
    229   %tt = xor <3 x i512> %x, %bb
    230   store <3 x i512> %tt, <3 x i512>* %b
    231   br label %next
    232 
    233 next:
    234   ret <3 x i512> %tt
    235 }
    236 
    237 
    238 define <4 x i8> @test_4xi8(<4 x i8> %x, <4 x i8>* %b) {
    239   %bb = load <4 x i8>* %b
    240   %tt = xor <4 x i8> %x, %bb
    241   store <4 x i8> %tt, <4 x i8>* %b
    242   br label %next
    243 
    244 next:
    245   ret <4 x i8> %tt
    246 }
    247 
    248 
    249 define <4 x i16> @test_4xi16(<4 x i16> %x, <4 x i16>* %b) {
    250   %bb = load <4 x i16>* %b
    251   %tt = xor <4 x i16> %x, %bb
    252   store <4 x i16> %tt, <4 x i16>* %b
    253   br label %next
    254 
    255 next:
    256   ret <4 x i16> %tt
    257 }
    258 
    259 
    260 define <4 x i32> @test_4xi32(<4 x i32> %x, <4 x i32>* %b) {
    261   %bb = load <4 x i32>* %b
    262   %tt = xor <4 x i32> %x, %bb
    263   store <4 x i32> %tt, <4 x i32>* %b
    264   br label %next
    265 
    266 next:
    267   ret <4 x i32> %tt
    268 }
    269 
    270 
    271 define <4 x i64> @test_4xi64(<4 x i64> %x, <4 x i64>* %b) {
    272   %bb = load <4 x i64>* %b
    273   %tt = xor <4 x i64> %x, %bb
    274   store <4 x i64> %tt, <4 x i64>* %b
    275   br label %next
    276 
    277 next:
    278   ret <4 x i64> %tt
    279 }
    280 
    281 
    282 define <4 x i128> @test_4xi128(<4 x i128> %x, <4 x i128>* %b) {
    283   %bb = load <4 x i128>* %b
    284   %tt = xor <4 x i128> %x, %bb
    285   store <4 x i128> %tt, <4 x i128>* %b
    286   br label %next
    287 
    288 next:
    289   ret <4 x i128> %tt
    290 }
    291 
    292 
    293 define <4 x i256> @test_4xi256(<4 x i256> %x, <4 x i256>* %b) {
    294   %bb = load <4 x i256>* %b
    295   %tt = xor <4 x i256> %x, %bb
    296   store <4 x i256> %tt, <4 x i256>* %b
    297   br label %next
    298 
    299 next:
    300   ret <4 x i256> %tt
    301 }
    302 
    303 
    304 define <4 x i512> @test_4xi512(<4 x i512> %x, <4 x i512>* %b) {
    305   %bb = load <4 x i512>* %b
    306   %tt = xor <4 x i512> %x, %bb
    307   store <4 x i512> %tt, <4 x i512>* %b
    308   br label %next
    309 
    310 next:
    311   ret <4 x i512> %tt
    312 }
    313 
    314 
    315 define <5 x i8> @test_5xi8(<5 x i8> %x, <5 x i8>* %b) {
    316   %bb = load <5 x i8>* %b
    317   %tt = xor <5 x i8> %x, %bb
    318   store <5 x i8> %tt, <5 x i8>* %b
    319   br label %next
    320 
    321 next:
    322   ret <5 x i8> %tt
    323 }
    324 
    325 
    326 define <5 x i16> @test_5xi16(<5 x i16> %x, <5 x i16>* %b) {
    327   %bb = load <5 x i16>* %b
    328   %tt = xor <5 x i16> %x, %bb
    329   store <5 x i16> %tt, <5 x i16>* %b
    330   br label %next
    331 
    332 next:
    333   ret <5 x i16> %tt
    334 }
    335 
    336 
    337 define <5 x i32> @test_5xi32(<5 x i32> %x, <5 x i32>* %b) {
    338   %bb = load <5 x i32>* %b
    339   %tt = xor <5 x i32> %x, %bb
    340   store <5 x i32> %tt, <5 x i32>* %b
    341   br label %next
    342 
    343 next:
    344   ret <5 x i32> %tt
    345 }
    346 
    347 
    348 define <5 x i64> @test_5xi64(<5 x i64> %x, <5 x i64>* %b) {
    349   %bb = load <5 x i64>* %b
    350   %tt = xor <5 x i64> %x, %bb
    351   store <5 x i64> %tt, <5 x i64>* %b
    352   br label %next
    353 
    354 next:
    355   ret <5 x i64> %tt
    356 }
    357 
    358 
    359 define <5 x i128> @test_5xi128(<5 x i128> %x, <5 x i128>* %b) {
    360   %bb = load <5 x i128>* %b
    361   %tt = xor <5 x i128> %x, %bb
    362   store <5 x i128> %tt, <5 x i128>* %b
    363   br label %next
    364 
    365 next:
    366   ret <5 x i128> %tt
    367 }
    368 
    369 
    370 define <5 x i256> @test_5xi256(<5 x i256> %x, <5 x i256>* %b) {
    371   %bb = load <5 x i256>* %b
    372   %tt = xor <5 x i256> %x, %bb
    373   store <5 x i256> %tt, <5 x i256>* %b
    374   br label %next
    375 
    376 next:
    377   ret <5 x i256> %tt
    378 }
    379 
    380 
    381 define <5 x i512> @test_5xi512(<5 x i512> %x, <5 x i512>* %b) {
    382   %bb = load <5 x i512>* %b
    383   %tt = xor <5 x i512> %x, %bb
    384   store <5 x i512> %tt, <5 x i512>* %b
    385   br label %next
    386 
    387 next:
    388   ret <5 x i512> %tt
    389 }
    390 
    391 
    392