Home | History | Annotate | Download | only in llvm2ice_tests
      1 ; This test checks support for vector arithmetic.
      2 
      3 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 \
      4 ; RUN:   | FileCheck %s
      5 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 \
      6 ; RUN:   | FileCheck %s
      7 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 -mattr=sse4.1 \
      8 ; RUN:   | FileCheck --check-prefix=SSE41 %s
      9 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 -mattr=sse4.1 \
     10 ; RUN:   | FileCheck --check-prefix=SSE41 %s
     11 
     12 ; RUN: %if --need=target_MIPS32 --need=allow_dump \
     13 ; RUN:   --command %p2i --filetype=asm --assemble --disassemble --target \
     14 ; RUN:   mips32 -i %s --args -O2 -allow-externally-defined-symbols \
     15 ; RUN:   | %if --need=target_MIPS32 --need=allow_dump \
     16 ; RUN:   --command FileCheck --check-prefix MIPS32 %s
     17 
     18 define internal <4 x float> @test_fadd(<4 x float> %arg0, <4 x float> %arg1) {
     19 entry:
     20   %res = fadd <4 x float> %arg0, %arg1
     21   ret <4 x float> %res
     22 ; CHECK-LABEL: test_fadd
     23 ; CHECK: addps
     24 ; MIPS32-LABEL: test_fadd
     25 ; MIPS32: 	add.s
     26 ; MIPS32: 	add.s
     27 ; MIPS32: 	add.s
     28 ; MIPS32: 	add.s
     29 }
     30 
     31 define internal <4 x float> @test_fsub(<4 x float> %arg0, <4 x float> %arg1) {
     32 entry:
     33   %res = fsub <4 x float> %arg0, %arg1
     34   ret <4 x float> %res
     35 ; CHECK-LABEL: test_fsub
     36 ; CHECK: subps
     37 ; MIPS32-LABEL: test_fsub
     38 ; MIPS32: 	sub.s
     39 ; MIPS32: 	sub.s
     40 ; MIPS32: 	sub.s
     41 ; MIPS32: 	sub.s
     42 }
     43 
     44 define internal <4 x float> @test_fmul(<4 x float> %arg0, <4 x float> %arg1) {
     45 entry:
     46   %res = fmul <4 x float> %arg0, %arg1
     47   ret <4 x float> %res
     48 ; CHECK-LABEL: test_fmul
     49 ; CHECK: mulps
     50 ; MIPS32-LABEL: test_fmul
     51 ; MIPS32: 	mul.s
     52 ; MIPS32: 	mul.s
     53 ; MIPS32: 	mul.s
     54 ; MIPS32: 	mul.s
     55 }
     56 
     57 define internal <4 x float> @test_fdiv(<4 x float> %arg0, <4 x float> %arg1) {
     58 entry:
     59   %res = fdiv <4 x float> %arg0, %arg1
     60   ret <4 x float> %res
     61 ; CHECK-LABEL: test_fdiv
     62 ; CHECK: divps
     63 ; MIPS32-LABEL: test_fdiv
     64 ; MIPS32: 	div.s
     65 ; MIPS32: 	div.s
     66 ; MIPS32: 	div.s
     67 ; MIPS32: 	div.s
     68 }
     69 
     70 define internal <4 x float> @test_frem(<4 x float> %arg0, <4 x float> %arg1) {
     71 entry:
     72   %res = frem <4 x float> %arg0, %arg1
     73   ret <4 x float> %res
     74 ; CHECK-LABEL: test_frem
     75 ; CHECK: fmodf
     76 ; CHECK: fmodf
     77 ; CHECK: fmodf
     78 ; CHECK: fmodf
     79 }
     80 
     81 define internal <16 x i8> @test_add_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
     82 entry:
     83   %res = add <16 x i8> %arg0, %arg1
     84   ret <16 x i8> %res
     85 ; CHECK-LABEL: test_add_v16i8
     86 ; CHECK: paddb
     87 ; MIPS32-LABEL: test_add_v16i8
     88 ; MIPS32: 	addu
     89 ; MIPS32: 	addu
     90 ; MIPS32: 	addu
     91 ; MIPS32: 	addu
     92 ; MIPS32: 	addu
     93 ; MIPS32: 	addu
     94 ; MIPS32: 	addu
     95 ; MIPS32: 	addu
     96 ; MIPS32: 	addu
     97 ; MIPS32: 	addu
     98 ; MIPS32: 	addu
     99 ; MIPS32: 	addu
    100 ; MIPS32: 	addu
    101 ; MIPS32: 	addu
    102 ; MIPS32: 	addu
    103 ; MIPS32: 	addu
    104 }
    105 
    106 define internal <16 x i8> @test_and_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    107 entry:
    108   %res = and <16 x i8> %arg0, %arg1
    109   ret <16 x i8> %res
    110 ; CHECK-LABEL: test_and_v16i8
    111 ; CHECK: pand
    112 ; MIPS32-LABEL: test_and_v16i8
    113 ; MIPS32: 	and
    114 ; MIPS32: 	and
    115 ; MIPS32: 	and
    116 ; MIPS32: 	and
    117 ; MIPS32: 	and
    118 ; MIPS32: 	and
    119 ; MIPS32: 	and
    120 ; MIPS32: 	and
    121 ; MIPS32: 	and
    122 ; MIPS32: 	and
    123 ; MIPS32: 	and
    124 ; MIPS32: 	and
    125 ; MIPS32: 	and
    126 ; MIPS32: 	and
    127 ; MIPS32: 	and
    128 ; MIPS32: 	and
    129 }
    130 
    131 define internal <16 x i8> @test_or_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    132 entry:
    133   %res = or <16 x i8> %arg0, %arg1
    134   ret <16 x i8> %res
    135 ; CHECK-LABEL: test_or_v16i8
    136 ; CHECK: por
    137 ; MIPS32-LABEL: test_or_v16i8
    138 ; MIPS32: 	or
    139 ; MIPS32: 	or
    140 ; MIPS32: 	or
    141 ; MIPS32: 	or
    142 ; MIPS32: 	or
    143 ; MIPS32: 	or
    144 ; MIPS32: 	or
    145 ; MIPS32: 	or
    146 ; MIPS32: 	or
    147 ; MIPS32: 	or
    148 ; MIPS32: 	or
    149 ; MIPS32: 	or
    150 ; MIPS32: 	or
    151 ; MIPS32: 	or
    152 ; MIPS32: 	or
    153 ; MIPS32: 	or
    154 }
    155 
    156 define internal <16 x i8> @test_xor_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    157 entry:
    158   %res = xor <16 x i8> %arg0, %arg1
    159   ret <16 x i8> %res
    160 ; CHECK-LABEL: test_xor_v16i8
    161 ; CHECK: pxor
    162 ; MIPS32-LABEL: test_xor_v16i8
    163 ; MIPS32: 	xor
    164 ; MIPS32: 	xor
    165 ; MIPS32: 	xor
    166 ; MIPS32: 	xor
    167 ; MIPS32: 	xor
    168 ; MIPS32: 	xor
    169 ; MIPS32: 	xor
    170 ; MIPS32: 	xor
    171 ; MIPS32: 	xor
    172 ; MIPS32: 	xor
    173 ; MIPS32: 	xor
    174 ; MIPS32: 	xor
    175 ; MIPS32: 	xor
    176 ; MIPS32: 	xor
    177 ; MIPS32: 	xor
    178 ; MIPS32: 	xor
    179 }
    180 
    181 define internal <16 x i8> @test_sub_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    182 entry:
    183   %res = sub <16 x i8> %arg0, %arg1
    184   ret <16 x i8> %res
    185 ; CHECK-LABEL: test_sub_v16i8
    186 ; CHECK: psubb
    187 ; MIPS32-LABEL: test_sub_v16i8
    188 ; MIPS32: 	subu
    189 ; MIPS32: 	subu
    190 ; MIPS32: 	subu
    191 ; MIPS32: 	subu
    192 ; MIPS32: 	subu
    193 ; MIPS32: 	subu
    194 ; MIPS32: 	subu
    195 ; MIPS32: 	subu
    196 ; MIPS32: 	subu
    197 ; MIPS32: 	subu
    198 ; MIPS32: 	subu
    199 ; MIPS32: 	subu
    200 ; MIPS32: 	subu
    201 ; MIPS32: 	subu
    202 ; MIPS32: 	subu
    203 ; MIPS32: 	subu
    204 }
    205 
    206 define internal <16 x i8> @test_mul_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    207 entry:
    208   %res = mul <16 x i8> %arg0, %arg1
    209   ret <16 x i8> %res
    210 ; CHECK-LABEL: test_mul_v16i8
    211 ; CHECK: imul
    212 ; CHECK: imul
    213 ; CHECK: imul
    214 ; CHECK: imul
    215 ; CHECK: imul
    216 ; CHECK: imul
    217 ; CHECK: imul
    218 ; CHECK: imul
    219 ; CHECK: imul
    220 ; CHECK: imul
    221 ; CHECK: imul
    222 ; CHECK: imul
    223 ; CHECK: imul
    224 ; CHECK: imul
    225 ; CHECK: imul
    226 ; CHECK: imul
    227 ; MIPS32-LABEL: test_mul_v16i8
    228 ; MIPS32: 	mul
    229 ; MIPS32: 	mul
    230 ; MIPS32: 	mul
    231 ; MIPS32: 	mul
    232 ; MIPS32: 	mul
    233 ; MIPS32: 	mul
    234 ; MIPS32: 	mul
    235 ; MIPS32: 	mul
    236 ; MIPS32: 	mul
    237 ; MIPS32: 	mul
    238 ; MIPS32: 	mul
    239 ; MIPS32: 	mul
    240 ; MIPS32: 	mul
    241 ; MIPS32: 	mul
    242 ; MIPS32: 	mul
    243 ; MIPS32: 	mul
    244 }
    245 
    246 define internal <16 x i8> @test_shl_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    247 entry:
    248   %res = shl <16 x i8> %arg0, %arg1
    249   ret <16 x i8> %res
    250 ; CHECK-LABEL: test_shl_v16i8
    251 ; CHECK: shl
    252 ; CHECK: shl
    253 ; CHECK: shl
    254 ; CHECK: shl
    255 ; CHECK: shl
    256 ; CHECK: shl
    257 ; CHECK: shl
    258 ; CHECK: shl
    259 ; CHECK: shl
    260 ; CHECK: shl
    261 ; CHECK: shl
    262 ; CHECK: shl
    263 ; CHECK: shl
    264 ; CHECK: shl
    265 ; CHECK: shl
    266 ; CHECK: shl
    267 ; MIPS32-LABEL: test_shl_v16i8
    268 ; MIPS32: 	sllv
    269 ; MIPS32: 	sllv
    270 ; MIPS32: 	sllv
    271 ; MIPS32: 	sllv
    272 ; MIPS32: 	sllv
    273 ; MIPS32: 	sllv
    274 ; MIPS32: 	sllv
    275 ; MIPS32: 	sllv
    276 ; MIPS32: 	sllv
    277 ; MIPS32: 	sllv
    278 ; MIPS32: 	sllv
    279 ; MIPS32: 	sllv
    280 ; MIPS32: 	sllv
    281 ; MIPS32: 	sllv
    282 ; MIPS32: 	sllv
    283 ; MIPS32: 	sllv
    284 }
    285 
    286 define internal <16 x i8> @test_lshr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    287 entry:
    288   %res = lshr <16 x i8> %arg0, %arg1
    289   ret <16 x i8> %res
    290 ; CHECK-LABEL: test_lshr_v16i8
    291 ; CHECK: shr
    292 ; CHECK: shr
    293 ; CHECK: shr
    294 ; CHECK: shr
    295 ; CHECK: shr
    296 ; CHECK: shr
    297 ; CHECK: shr
    298 ; CHECK: shr
    299 ; CHECK: shr
    300 ; CHECK: shr
    301 ; CHECK: shr
    302 ; CHECK: shr
    303 ; CHECK: shr
    304 ; CHECK: shr
    305 ; CHECK: shr
    306 ; CHECK: shr
    307 ; MIPS32-LABEL: test_lshr_v16i8
    308 ; MIPS32: 	srlv
    309 ; MIPS32: 	srlv
    310 ; MIPS32: 	srlv
    311 ; MIPS32: 	srlv
    312 ; MIPS32: 	srlv
    313 ; MIPS32: 	srlv
    314 ; MIPS32: 	srlv
    315 ; MIPS32: 	srlv
    316 ; MIPS32: 	srlv
    317 ; MIPS32: 	srlv
    318 ; MIPS32: 	srlv
    319 ; MIPS32: 	srlv
    320 ; MIPS32: 	srlv
    321 ; MIPS32: 	srlv
    322 ; MIPS32: 	srlv
    323 ; MIPS32: 	srlv
    324 }
    325 
    326 define internal <16 x i8> @test_ashr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    327 entry:
    328   %res = ashr <16 x i8> %arg0, %arg1
    329   ret <16 x i8> %res
    330 ; CHECK-LABEL: test_ashr_v16i8
    331 ; CHECK: sar
    332 ; CHECK: sar
    333 ; CHECK: sar
    334 ; CHECK: sar
    335 ; CHECK: sar
    336 ; CHECK: sar
    337 ; CHECK: sar
    338 ; CHECK: sar
    339 ; CHECK: sar
    340 ; CHECK: sar
    341 ; CHECK: sar
    342 ; CHECK: sar
    343 ; CHECK: sar
    344 ; CHECK: sar
    345 ; CHECK: sar
    346 ; CHECK: sar
    347 ; MIPS32-LABEL: test_ashr_v16i8
    348 ; MIPS32: 	srav
    349 ; MIPS32: 	srav
    350 ; MIPS32: 	srav
    351 ; MIPS32: 	srav
    352 ; MIPS32: 	srav
    353 ; MIPS32: 	srav
    354 ; MIPS32: 	srav
    355 ; MIPS32: 	srav
    356 ; MIPS32: 	srav
    357 ; MIPS32: 	srav
    358 ; MIPS32: 	srav
    359 ; MIPS32: 	srav
    360 ; MIPS32: 	srav
    361 ; MIPS32: 	srav
    362 ; MIPS32: 	srav
    363 ; MIPS32: 	srav
    364 }
    365 
    366 define internal <16 x i8> @test_udiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    367 entry:
    368   %res = udiv <16 x i8> %arg0, %arg1
    369   ret <16 x i8> %res
    370 ; CHECK-LABEL: test_udiv_v16i8
    371 ; CHECK: div
    372 ; CHECK: div
    373 ; CHECK: div
    374 ; CHECK: div
    375 ; CHECK: div
    376 ; CHECK: div
    377 ; CHECK: div
    378 ; CHECK: div
    379 ; CHECK: div
    380 ; CHECK: div
    381 ; CHECK: div
    382 ; CHECK: div
    383 ; CHECK: div
    384 ; CHECK: div
    385 ; CHECK: div
    386 ; CHECK: div
    387 ; MIPS32-LABEL: test_udiv_v16i8
    388 ; MIPS32: 	divu
    389 ; MIPS32: 	divu
    390 ; MIPS32: 	divu
    391 ; MIPS32: 	divu
    392 ; MIPS32: 	divu
    393 ; MIPS32: 	divu
    394 ; MIPS32: 	divu
    395 ; MIPS32: 	divu
    396 ; MIPS32: 	divu
    397 ; MIPS32: 	divu
    398 ; MIPS32: 	divu
    399 ; MIPS32: 	divu
    400 ; MIPS32: 	divu
    401 ; MIPS32: 	divu
    402 ; MIPS32: 	divu
    403 ; MIPS32: 	divu
    404 }
    405 
    406 define internal <16 x i8> @test_sdiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    407 entry:
    408   %res = sdiv <16 x i8> %arg0, %arg1
    409   ret <16 x i8> %res
    410 ; CHECK-LABEL: test_sdiv_v16i8
    411 ; CHECK: idiv
    412 ; CHECK: idiv
    413 ; CHECK: idiv
    414 ; CHECK: idiv
    415 ; CHECK: idiv
    416 ; CHECK: idiv
    417 ; CHECK: idiv
    418 ; CHECK: idiv
    419 ; CHECK: idiv
    420 ; CHECK: idiv
    421 ; CHECK: idiv
    422 ; CHECK: idiv
    423 ; CHECK: idiv
    424 ; CHECK: idiv
    425 ; CHECK: idiv
    426 ; CHECK: idiv
    427 ; MIPS32-LABEL: test_sdiv_v16i8
    428 ; MIPS32: 	div
    429 ; MIPS32: 	div
    430 ; MIPS32: 	div
    431 ; MIPS32: 	div
    432 ; MIPS32: 	div
    433 ; MIPS32: 	div
    434 ; MIPS32: 	div
    435 ; MIPS32: 	div
    436 ; MIPS32: 	div
    437 ; MIPS32: 	div
    438 ; MIPS32: 	div
    439 ; MIPS32: 	div
    440 ; MIPS32: 	div
    441 ; MIPS32: 	div
    442 ; MIPS32: 	div
    443 ; MIPS32: 	div
    444 }
    445 
    446 define internal <16 x i8> @test_urem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    447 entry:
    448   %res = urem <16 x i8> %arg0, %arg1
    449   ret <16 x i8> %res
    450 ; CHECK-LABEL: test_urem_v16i8
    451 ; CHECK: div
    452 ; CHECK: div
    453 ; CHECK: div
    454 ; CHECK: div
    455 ; CHECK: div
    456 ; CHECK: div
    457 ; CHECK: div
    458 ; CHECK: div
    459 ; CHECK: div
    460 ; CHECK: div
    461 ; CHECK: div
    462 ; CHECK: div
    463 ; CHECK: div
    464 ; CHECK: div
    465 ; CHECK: div
    466 ; CHECK: div
    467 ; MIPS32-LABEL: test_urem_v16i8
    468 ; MIPS32: 	divu
    469 ; MIPS32: 	divu
    470 ; MIPS32: 	divu
    471 ; MIPS32: 	divu
    472 ; MIPS32: 	divu
    473 ; MIPS32: 	divu
    474 ; MIPS32: 	divu
    475 ; MIPS32: 	divu
    476 ; MIPS32: 	divu
    477 ; MIPS32: 	divu
    478 ; MIPS32: 	divu
    479 ; MIPS32: 	divu
    480 ; MIPS32: 	divu
    481 ; MIPS32: 	divu
    482 ; MIPS32: 	divu
    483 ; MIPS32: 	divu
    484 }
    485 
    486 define internal <16 x i8> @test_srem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) {
    487 entry:
    488   %res = srem <16 x i8> %arg0, %arg1
    489   ret <16 x i8> %res
    490 ; CHECK-LABEL: test_srem_v16i8
    491 ; CHECK: idiv
    492 ; CHECK: idiv
    493 ; CHECK: idiv
    494 ; CHECK: idiv
    495 ; CHECK: idiv
    496 ; CHECK: idiv
    497 ; CHECK: idiv
    498 ; CHECK: idiv
    499 ; CHECK: idiv
    500 ; CHECK: idiv
    501 ; CHECK: idiv
    502 ; CHECK: idiv
    503 ; CHECK: idiv
    504 ; CHECK: idiv
    505 ; CHECK: idiv
    506 ; CHECK: idiv
    507 ; MIPS32-LABEL: test_srem_v16i8
    508 ; MIPS32: 	div
    509 ; MIPS32: 	div
    510 ; MIPS32: 	div
    511 ; MIPS32: 	div
    512 ; MIPS32: 	div
    513 ; MIPS32: 	div
    514 ; MIPS32: 	div
    515 ; MIPS32: 	div
    516 ; MIPS32: 	div
    517 ; MIPS32: 	div
    518 ; MIPS32: 	div
    519 ; MIPS32: 	div
    520 ; MIPS32: 	div
    521 ; MIPS32: 	div
    522 ; MIPS32: 	div
    523 ; MIPS32: 	div
    524 }
    525 
    526 define internal <8 x i16> @test_add_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    527 entry:
    528   %res = add <8 x i16> %arg0, %arg1
    529   ret <8 x i16> %res
    530 ; CHECK-LABEL: test_add_v8i16
    531 ; CHECK: paddw
    532 ; MIPS32-LABEL: test_add_v8i16
    533 ; MIPS32: 	addu
    534 ; MIPS32: 	addu
    535 ; MIPS32: 	addu
    536 ; MIPS32: 	addu
    537 ; MIPS32: 	addu
    538 ; MIPS32: 	addu
    539 ; MIPS32: 	addu
    540 ; MIPS32: 	addu
    541 }
    542 
    543 define internal <8 x i16> @test_and_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    544 entry:
    545   %res = and <8 x i16> %arg0, %arg1
    546   ret <8 x i16> %res
    547 ; CHECK-LABEL: test_and_v8i16
    548 ; CHECK: pand
    549 ; MIPS32-LABEL: test_and_v8i16
    550 ; MIPS32: 	andi
    551 ; MIPS32: 	andi
    552 ; MIPS32: 	andi
    553 ; MIPS32: 	andi
    554 ; MIPS32: 	andi
    555 ; MIPS32: 	andi
    556 ; MIPS32: 	andi
    557 ; MIPS32: 	andi
    558 }
    559 
    560 define internal <8 x i16> @test_or_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    561 entry:
    562   %res = or <8 x i16> %arg0, %arg1
    563   ret <8 x i16> %res
    564 ; CHECK-LABEL: test_or_v8i16
    565 ; CHECK: por
    566 ; MIPS32-LABEL: test_or_v8i16
    567 ; MIPS32: 	or
    568 ; MIPS32: 	or
    569 ; MIPS32: 	or
    570 ; MIPS32: 	or
    571 ; MIPS32: 	or
    572 ; MIPS32: 	or
    573 ; MIPS32: 	or
    574 ; MIPS32: 	or
    575 }
    576 
    577 define internal <8 x i16> @test_xor_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    578 entry:
    579   %res = xor <8 x i16> %arg0, %arg1
    580   ret <8 x i16> %res
    581 ; CHECK-LABEL: test_xor_v8i16
    582 ; CHECK: pxor
    583 ; MIPS32-LABEL: test_xor_v8i16
    584 ; MIPS32: 	xor
    585 ; MIPS32: 	xor
    586 ; MIPS32: 	xor
    587 ; MIPS32: 	xor
    588 ; MIPS32: 	xor
    589 ; MIPS32: 	xor
    590 ; MIPS32: 	xor
    591 ; MIPS32: 	xor
    592 }
    593 
    594 define internal <8 x i16> @test_sub_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    595 entry:
    596   %res = sub <8 x i16> %arg0, %arg1
    597   ret <8 x i16> %res
    598 ; CHECK-LABEL: test_sub_v8i16
    599 ; CHECK: psubw
    600 ; MIPS32-LABEL: test_sub_v8i16
    601 ; MIPS32: 	subu
    602 ; MIPS32: 	subu
    603 ; MIPS32: 	subu
    604 ; MIPS32: 	subu
    605 ; MIPS32: 	subu
    606 ; MIPS32: 	subu
    607 ; MIPS32: 	subu
    608 ; MIPS32: 	subu
    609 }
    610 
    611 define internal <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    612 entry:
    613   %res = mul <8 x i16> %arg0, %arg1
    614   ret <8 x i16> %res
    615 ; CHECK-LABEL: test_mul_v8i16
    616 ; CHECK: pmullw
    617 ; MIPS32-LABEL: test_mul_v8i16
    618 ; MIPS32: 	mul
    619 ; MIPS32: 	mul
    620 ; MIPS32: 	mul
    621 ; MIPS32: 	mul
    622 ; MIPS32: 	mul
    623 ; MIPS32: 	mul
    624 ; MIPS32: 	mul
    625 ; MIPS32: 	mul
    626 }
    627 
    628 define internal <8 x i16> @test_shl_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    629 entry:
    630   %res = shl <8 x i16> %arg0, %arg1
    631   ret <8 x i16> %res
    632 ; CHECK-LABEL: test_shl_v8i16
    633 ; CHECK: shl
    634 ; CHECK: shl
    635 ; CHECK: shl
    636 ; CHECK: shl
    637 ; CHECK: shl
    638 ; CHECK: shl
    639 ; CHECK: shl
    640 ; CHECK: shl
    641 ; MIPS32-LABEL: test_shl_v8i16
    642 ; MIPS32: 	sllv
    643 ; MIPS32: 	sllv
    644 ; MIPS32: 	sllv
    645 ; MIPS32: 	sllv
    646 ; MIPS32: 	sllv
    647 ; MIPS32: 	sllv
    648 ; MIPS32: 	sllv
    649 ; MIPS32: 	sllv
    650 }
    651 
    652 define internal <8 x i16> @test_lshr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    653 entry:
    654   %res = lshr <8 x i16> %arg0, %arg1
    655   ret <8 x i16> %res
    656 ; CHECK-LABEL: test_lshr_v8i16
    657 ; CHECK: shr
    658 ; CHECK: shr
    659 ; CHECK: shr
    660 ; CHECK: shr
    661 ; CHECK: shr
    662 ; CHECK: shr
    663 ; CHECK: shr
    664 ; CHECK: shr
    665 ; MIPS32-LABEL: test_lshr_v8i16
    666 ; MIPS32: 	srlv
    667 ; MIPS32: 	srlv
    668 ; MIPS32: 	srlv
    669 ; MIPS32: 	srlv
    670 ; MIPS32: 	srlv
    671 ; MIPS32: 	srlv
    672 ; MIPS32: 	srlv
    673 ; MIPS32: 	srlv
    674 }
    675 
    676 define internal <8 x i16> @test_ashr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    677 entry:
    678   %res = ashr <8 x i16> %arg0, %arg1
    679   ret <8 x i16> %res
    680 ; CHECK-LABEL: test_ashr_v8i16
    681 ; CHECK: sar
    682 ; CHECK: sar
    683 ; CHECK: sar
    684 ; CHECK: sar
    685 ; CHECK: sar
    686 ; CHECK: sar
    687 ; CHECK: sar
    688 ; CHECK: sar
    689 ; MIPS32-LABEL: test_ashr_v8i16
    690 ; MIPS32: 	srav
    691 ; MIPS32: 	srav
    692 ; MIPS32: 	srav
    693 ; MIPS32: 	srav
    694 ; MIPS32: 	srav
    695 ; MIPS32: 	srav
    696 ; MIPS32: 	srav
    697 ; MIPS32: 	srav
    698 }
    699 
    700 define internal <8 x i16> @test_udiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    701 entry:
    702   %res = udiv <8 x i16> %arg0, %arg1
    703   ret <8 x i16> %res
    704 ; CHECK-LABEL: test_udiv_v8i16
    705 ; CHECK: div
    706 ; CHECK: div
    707 ; CHECK: div
    708 ; CHECK: div
    709 ; CHECK: div
    710 ; CHECK: div
    711 ; CHECK: div
    712 ; CHECK: div
    713 ; MIPS32-LABEL: test_udiv_v8i16
    714 ; MIPS32: 	divu
    715 ; MIPS32: 	divu
    716 ; MIPS32: 	divu
    717 ; MIPS32: 	divu
    718 ; MIPS32: 	divu
    719 ; MIPS32: 	divu
    720 ; MIPS32: 	divu
    721 ; MIPS32: 	divu
    722 }
    723 
    724 define internal <8 x i16> @test_sdiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    725 entry:
    726   %res = sdiv <8 x i16> %arg0, %arg1
    727   ret <8 x i16> %res
    728 ; CHECK-LABEL: test_sdiv_v8i16
    729 ; CHECK: idiv
    730 ; CHECK: idiv
    731 ; CHECK: idiv
    732 ; CHECK: idiv
    733 ; CHECK: idiv
    734 ; CHECK: idiv
    735 ; CHECK: idiv
    736 ; CHECK: idiv
    737 ; MIPS32-LABEL: test_sdiv_v8i16
    738 ; MIPS32: 	div
    739 ; MIPS32: 	div
    740 ; MIPS32: 	div
    741 ; MIPS32: 	div
    742 ; MIPS32: 	div
    743 ; MIPS32: 	div
    744 ; MIPS32: 	div
    745 ; MIPS32: 	div
    746 }
    747 
    748 define internal <8 x i16> @test_urem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    749 entry:
    750   %res = urem <8 x i16> %arg0, %arg1
    751   ret <8 x i16> %res
    752 ; CHECK-LABEL: test_urem_v8i16
    753 ; CHECK: div
    754 ; CHECK: div
    755 ; CHECK: div
    756 ; CHECK: div
    757 ; CHECK: div
    758 ; CHECK: div
    759 ; CHECK: div
    760 ; CHECK: div
    761 ; MIPS32-LABEL: test_urem_v8i16
    762 ; MIPS32: 	divu
    763 ; MIPS32: 	divu
    764 ; MIPS32: 	divu
    765 ; MIPS32: 	divu
    766 ; MIPS32: 	divu
    767 ; MIPS32: 	divu
    768 ; MIPS32: 	divu
    769 ; MIPS32: 	divu
    770 }
    771 
    772 define internal <8 x i16> @test_srem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) {
    773 entry:
    774   %res = srem <8 x i16> %arg0, %arg1
    775   ret <8 x i16> %res
    776 ; CHECK-LABEL: test_srem_v8i16
    777 ; CHECK: idiv
    778 ; CHECK: idiv
    779 ; CHECK: idiv
    780 ; CHECK: idiv
    781 ; CHECK: idiv
    782 ; CHECK: idiv
    783 ; CHECK: idiv
    784 ; CHECK: idiv
    785 ; MIPS32-LABEL: test_srem_v8i16
    786 ; MIPS32: 	div
    787 ; MIPS32: 	div
    788 ; MIPS32: 	div
    789 ; MIPS32: 	div
    790 ; MIPS32: 	div
    791 ; MIPS32: 	div
    792 ; MIPS32: 	div
    793 ; MIPS32: 	div
    794 }
    795 
    796 define internal <4 x i32> @test_add_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    797 entry:
    798   %res = add <4 x i32> %arg0, %arg1
    799   ret <4 x i32> %res
    800 ; CHECK-LABEL: test_add_v4i32
    801 ; CHECK: paddd
    802 ; MIPS32-LABEL: test_add_v4i32
    803 ; MIPS32: 	addu
    804 ; MIPS32: 	addu
    805 ; MIPS32: 	addu
    806 ; MIPS32: 	addu
    807 }
    808 
    809 define internal <4 x i32> @test_and_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    810 entry:
    811   %res = and <4 x i32> %arg0, %arg1
    812   ret <4 x i32> %res
    813 ; CHECK-LABEL: test_and_v4i32
    814 ; CHECK: pand
    815 ; MIPS32-LABEL: test_and_v4i32
    816 ; MIPS32: 	and
    817 ; MIPS32: 	and
    818 ; MIPS32: 	and
    819 ; MIPS32: 	and
    820 }
    821 
    822 define internal <4 x i32> @test_or_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    823 entry:
    824   %res = or <4 x i32> %arg0, %arg1
    825   ret <4 x i32> %res
    826 ; CHECK-LABEL: test_or_v4i32
    827 ; CHECK: por
    828 ; MIPS32-LABEL: test_or_v4i32
    829 ; MIPS32: 	or
    830 ; MIPS32: 	or
    831 ; MIPS32: 	or
    832 ; MIPS32: 	or
    833 }
    834 
    835 define internal <4 x i32> @test_xor_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    836 entry:
    837   %res = xor <4 x i32> %arg0, %arg1
    838   ret <4 x i32> %res
    839 ; CHECK-LABEL: test_xor_v4i32
    840 ; CHECK: pxor
    841 ; MIPS32-LABEL: test_xor_v4i32
    842 ; MIPS32: 	xor
    843 ; MIPS32: 	xor
    844 ; MIPS32: 	xor
    845 ; MIPS32: 	xor
    846 }
    847 
    848 define internal <4 x i32> @test_sub_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    849 entry:
    850   %res = sub <4 x i32> %arg0, %arg1
    851   ret <4 x i32> %res
    852 ; CHECK-LABEL: test_sub_v4i32
    853 ; CHECK: psubd
    854 ; MIPS32-LABEL: test_sub_v4i32
    855 ; MIPS32: 	subu
    856 ; MIPS32: 	subu
    857 ; MIPS32: 	subu
    858 ; MIPS32: 	subu
    859 }
    860 
    861 define internal <4 x i32> @test_mul_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    862 entry:
    863   %res = mul <4 x i32> %arg0, %arg1
    864   ret <4 x i32> %res
    865 ; CHECK-LABEL: test_mul_v4i32
    866 ; CHECK: pmuludq
    867 ; CHECK: pmuludq
    868 ;
    869 ; SSE41-LABEL: test_mul_v4i32
    870 ; SSE41: pmulld
    871 ; MIPS32-LABEL: test_mul_v4i32
    872 ; MIPS32: 	mul
    873 ; MIPS32: 	mul
    874 ; MIPS32: 	mul
    875 ; MIPS32: 	mul
    876 }
    877 
    878 define internal <4 x i32> @test_shl_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    879 entry:
    880   %res = shl <4 x i32> %arg0, %arg1
    881   ret <4 x i32> %res
    882 ; CHECK-LABEL: test_shl_v4i32
    883 ; CHECK: shl
    884 ; CHECK: shl
    885 ; CHECK: shl
    886 ; CHECK: shl
    887 
    888 ; This line is to ensure that pmulld is generated in test_mul_v4i32 above.
    889 ; SSE41-LABEL: test_shl_v4i32
    890 ; MIPS32-LABEL: test_shl_v4i32
    891 ; MIPS32: 	sllv
    892 ; MIPS32: 	sllv
    893 ; MIPS32: 	sllv
    894 ; MIPS32: 	sllv
    895 }
    896 
    897 define internal <4 x i32> @test_lshr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    898 entry:
    899   %res = lshr <4 x i32> %arg0, %arg1
    900   ret <4 x i32> %res
    901 ; CHECK-LABEL: test_lshr_v4i32
    902 ; CHECK: shr
    903 ; CHECK: shr
    904 ; CHECK: shr
    905 ; CHECK: shr
    906 ; MIPS32-LABEL: test_lshr_v4i32
    907 ; MIPS32: 	srlv
    908 ; MIPS32: 	srlv
    909 ; MIPS32: 	srlv
    910 ; MIPS32: 	srlv
    911 }
    912 
    913 define internal <4 x i32> @test_ashr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    914 entry:
    915   %res = ashr <4 x i32> %arg0, %arg1
    916   ret <4 x i32> %res
    917 ; CHECK-LABEL: test_ashr_v4i32
    918 ; CHECK: sar
    919 ; CHECK: sar
    920 ; CHECK: sar
    921 ; CHECK: sar
    922 ; MIPS32-LABEL: test_ashr_v4i32
    923 ; MIPS32: 	srav
    924 ; MIPS32: 	srav
    925 ; MIPS32: 	srav
    926 ; MIPS32: 	srav
    927 }
    928 
    929 define internal <4 x i32> @test_udiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    930 entry:
    931   %res = udiv <4 x i32> %arg0, %arg1
    932   ret <4 x i32> %res
    933 ; CHECK-LABEL: test_udiv_v4i32
    934 ; CHECK: div
    935 ; CHECK: div
    936 ; CHECK: div
    937 ; CHECK: div
    938 ; MIPS32-LABEL: test_udiv_v4i32
    939 ; MIPS32: 	divu
    940 ; MIPS32: 	divu
    941 ; MIPS32: 	divu
    942 ; MIPS32: 	divu
    943 }
    944 
    945 define internal <4 x i32> @test_sdiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    946 entry:
    947   %res = sdiv <4 x i32> %arg0, %arg1
    948   ret <4 x i32> %res
    949 ; CHECK-LABEL: test_sdiv_v4i32
    950 ; CHECK: idiv
    951 ; CHECK: idiv
    952 ; CHECK: idiv
    953 ; CHECK: idiv
    954 ; MIPS32-LABEL: test_sdiv_v4i32
    955 ; MIPS32: 	div
    956 ; MIPS32: 	div
    957 ; MIPS32: 	div
    958 ; MIPS32: 	div
    959 }
    960 
    961 define internal <4 x i32> @test_urem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    962 entry:
    963   %res = urem <4 x i32> %arg0, %arg1
    964   ret <4 x i32> %res
    965 ; CHECK-LABEL: test_urem_v4i32
    966 ; CHECK: div
    967 ; CHECK: div
    968 ; CHECK: div
    969 ; CHECK: div
    970 ; MIPS32-LABEL: test_urem_v4i32
    971 ; MIPS32: 	divu
    972 ; MIPS32: 	divu
    973 ; MIPS32: 	divu
    974 ; MIPS32: 	divu
    975 }
    976 
    977 define internal <4 x i32> @test_srem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) {
    978 entry:
    979   %res = srem <4 x i32> %arg0, %arg1
    980   ret <4 x i32> %res
    981 ; CHECK-LABEL: test_srem_v4i32
    982 ; CHECK: idiv
    983 ; CHECK: idiv
    984 ; CHECK: idiv
    985 ; CHECK: idiv
    986 ; MIPS32-LABEL: test_srem_v4i32
    987 ; MIPS32: 	div
    988 ; MIPS32: 	div
    989 ; MIPS32: 	div
    990 ; MIPS32: 	div
    991 }
    992