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