| OLD | NEW |
| 1 ; This tests the NaCl intrinsics not related to atomic operations. | 1 ; This tests the NaCl intrinsics not related to atomic operations. |
| 2 | 2 |
| 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 4 ; RUN: --target x8632 --sandbox -i %s --args -O2 \ | 4 ; RUN: --target x8632 --sandbox -i %s --args -O2 \ |
| 5 ; RUN: -allow-externally-defined-symbols \ | 5 ; RUN: -allow-externally-defined-symbols \ |
| 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 8 ; RUN: --target x8632 --sandbox -i %s --args -Om1 \ | 8 ; RUN: --target x8632 --sandbox -i %s --args -Om1 \ |
| 9 ; RUN: -allow-externally-defined-symbols \ | 9 ; RUN: -allow-externally-defined-symbols \ |
| 10 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 10 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 %r = call i32 @llvm.ctlz.i32(i32 123456, i1 false) | 411 %r = call i32 @llvm.ctlz.i32(i32 123456, i1 false) |
| 412 ret i32 %r | 412 ret i32 %r |
| 413 } | 413 } |
| 414 ; Could potentially constant fold this, but the front-end should have done that. | 414 ; Could potentially constant fold this, but the front-end should have done that. |
| 415 ; The dest operand must be a register and the source operand must be a register | 415 ; The dest operand must be a register and the source operand must be a register |
| 416 ; or memory. | 416 ; or memory. |
| 417 ; CHECK-LABEL: test_ctlz_32_const | 417 ; CHECK-LABEL: test_ctlz_32_const |
| 418 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} | 418 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} |
| 419 ; ARM32-LABEL: test_ctlz_32_const | 419 ; ARM32-LABEL: test_ctlz_32_const |
| 420 ; ARM32: clz | 420 ; ARM32: clz |
| 421 ; MIPS32-LABEL: test_ctlz_32_const |
| 422 ; MIPS32: clz |
| 421 | 423 |
| 422 define internal i32 @test_ctlz_32_ignored(i32 %x) { | 424 define internal i32 @test_ctlz_32_ignored(i32 %x) { |
| 423 entry: | 425 entry: |
| 424 %ignored = call i32 @llvm.ctlz.i32(i32 %x, i1 false) | 426 %ignored = call i32 @llvm.ctlz.i32(i32 %x, i1 false) |
| 425 ret i32 1 | 427 ret i32 1 |
| 426 } | 428 } |
| 427 ; CHECKO2REM-LABEL: test_ctlz_32_ignored | 429 ; CHECKO2REM-LABEL: test_ctlz_32_ignored |
| 428 ; CHECKO2REM-NOT: bsr | 430 ; CHECKO2REM-NOT: bsr |
| 429 | 431 |
| 430 define internal i64 @test_ctlz_64(i64 %x) { | 432 define internal i64 @test_ctlz_64(i64 %x) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 443 ; CHECK: xor [[REG_RES2]],0x1f | 445 ; CHECK: xor [[REG_RES2]],0x1f |
| 444 ; CHECK: test [[REG_UPPER:.*]],[[REG_UPPER]] | 446 ; CHECK: test [[REG_UPPER:.*]],[[REG_UPPER]] |
| 445 ; CHECK: cmove [[REG_RES2]],[[REG_RES1]] | 447 ; CHECK: cmove [[REG_RES2]],[[REG_RES1]] |
| 446 ; CHECK: mov {{.*}},0x0 | 448 ; CHECK: mov {{.*}},0x0 |
| 447 ; ARM32-LABEL: test_ctlz_64 | 449 ; ARM32-LABEL: test_ctlz_64 |
| 448 ; ARM32: clz | 450 ; ARM32: clz |
| 449 ; ARM32: cmp {{.*}}, #0 | 451 ; ARM32: cmp {{.*}}, #0 |
| 450 ; ARM32: add {{.*}}, #32 | 452 ; ARM32: add {{.*}}, #32 |
| 451 ; ARM32: clzne | 453 ; ARM32: clzne |
| 452 ; ARM32: mov {{.*}}, #0 | 454 ; ARM32: mov {{.*}}, #0 |
| 455 ; MIPS32-LABEL: test_ctlz_64 |
| 456 ; MIPS32: clz |
| 457 ; MIPS32: clz |
| 458 ; MIPS32: addiu |
| 459 ; MIPS32: movn |
| 460 ; MIPS32: addiu |
| 453 | 461 |
| 454 define internal i32 @test_ctlz_64_const(i64 %x) { | 462 define internal i32 @test_ctlz_64_const(i64 %x) { |
| 455 entry: | 463 entry: |
| 456 %r = call i64 @llvm.ctlz.i64(i64 123456789012, i1 false) | 464 %r = call i64 @llvm.ctlz.i64(i64 123456789012, i1 false) |
| 457 %r2 = trunc i64 %r to i32 | 465 %r2 = trunc i64 %r to i32 |
| 458 ret i32 %r2 | 466 ret i32 %r2 |
| 459 } | 467 } |
| 460 ; CHECK-LABEL: test_ctlz_64_const | 468 ; CHECK-LABEL: test_ctlz_64_const |
| 461 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} | 469 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} |
| 462 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} | 470 ; CHECK: bsr e{{.*}},{{.*}}e{{.*}} |
| 463 ; ARM32-LABEL: test_ctlz_64 | 471 ; ARM32-LABEL: test_ctlz_64 |
| 464 ; ARM32: clz | 472 ; ARM32: clz |
| 465 ; ARM32: clzne | 473 ; ARM32: clzne |
| 474 ; MIPS32-LABEL: test_ctlz_64_const |
| 475 ; MIPS32: clz |
| 476 ; MIPS32: clz |
| 477 ; MIPS32: addiu |
| 478 ; MIPS32: movn |
| 479 ; MIPS32: addiu |
| 466 | 480 |
| 467 define internal i32 @test_ctlz_64_ignored(i64 %x) { | 481 define internal i32 @test_ctlz_64_ignored(i64 %x) { |
| 468 entry: | 482 entry: |
| 469 %ignored = call i64 @llvm.ctlz.i64(i64 1234567890, i1 false) | 483 %ignored = call i64 @llvm.ctlz.i64(i64 1234567890, i1 false) |
| 470 ret i32 2 | 484 ret i32 2 |
| 471 } | 485 } |
| 472 ; CHECKO2REM-LABEL: test_ctlz_64_ignored | 486 ; CHECKO2REM-LABEL: test_ctlz_64_ignored |
| 473 ; CHECKO2REM-NOT: bsr | 487 ; CHECKO2REM-NOT: bsr |
| 474 | 488 |
| 475 define internal i32 @test_cttz_32(i32 %x) { | 489 define internal i32 @test_cttz_32(i32 %x) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 ; CHECK: cmove [[REG_RES2]],[[REG_RES1]] | 521 ; CHECK: cmove [[REG_RES2]],[[REG_RES1]] |
| 508 ; CHECK: mov {{.*}},0x0 | 522 ; CHECK: mov {{.*}},0x0 |
| 509 ; ARM32-LABEL: test_cttz_64 | 523 ; ARM32-LABEL: test_cttz_64 |
| 510 ; ARM32: rbit | 524 ; ARM32: rbit |
| 511 ; ARM32: rbit | 525 ; ARM32: rbit |
| 512 ; ARM32: clz | 526 ; ARM32: clz |
| 513 ; ARM32: cmp {{.*}}, #0 | 527 ; ARM32: cmp {{.*}}, #0 |
| 514 ; ARM32: add {{.*}}, #32 | 528 ; ARM32: add {{.*}}, #32 |
| 515 ; ARM32: clzne | 529 ; ARM32: clzne |
| 516 ; ARM32: mov {{.*}}, #0 | 530 ; ARM32: mov {{.*}}, #0 |
| 531 ; MIPS32-LABEL: test_cttz_64 |
| 532 ; MIPS32: addiu |
| 533 ; MIPS32: nor |
| 534 ; MIPS32: and |
| 535 ; MIPS32: clz |
| 536 ; MIPS32: li |
| 537 ; MIPS32: subu |
| 538 ; MIPS32: addiu |
| 539 ; MIPS32: nor |
| 540 ; MIPS32: and |
| 541 ; MIPS32: clz |
| 542 ; MIPS32: li |
| 543 ; MIPS32: subu |
| 517 | 544 |
| 518 define internal i32 @test_popcount_32(i32 %x) { | 545 define internal i32 @test_popcount_32(i32 %x) { |
| 519 entry: | 546 entry: |
| 520 %r = call i32 @llvm.ctpop.i32(i32 %x) | 547 %r = call i32 @llvm.ctpop.i32(i32 %x) |
| 521 ret i32 %r | 548 ret i32 %r |
| 522 } | 549 } |
| 523 ; CHECK-LABEL: test_popcount_32 | 550 ; CHECK-LABEL: test_popcount_32 |
| 524 ; CHECK: call {{.*}} R_{{.*}} __popcountsi2 | 551 ; CHECK: call {{.*}} R_{{.*}} __popcountsi2 |
| 525 ; ARM32-LABEL: test_popcount_32 | 552 ; ARM32-LABEL: test_popcount_32 |
| 526 ; ARM32: bl {{.*}} __popcountsi2 | 553 ; ARM32: bl {{.*}} __popcountsi2 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 ; CHECK: lea {{.*}},[esp+0x10] | 636 ; CHECK: lea {{.*}},[esp+0x10] |
| 610 ; CHECK: lea {{.*}},[esp+0x10] | 637 ; CHECK: lea {{.*}},[esp+0x10] |
| 611 ; CHECK: call | 638 ; CHECK: call |
| 612 ; CHECK: mov esp,{{.*}} | 639 ; CHECK: mov esp,{{.*}} |
| 613 ; CHECK: mov esp,ebp | 640 ; CHECK: mov esp,ebp |
| 614 ; ARM32-LABEL: test_stacksave_multiple | 641 ; ARM32-LABEL: test_stacksave_multiple |
| 615 ; ARM32: mov {{.*}}, sp | 642 ; ARM32: mov {{.*}}, sp |
| 616 ; ARM32: mov {{.*}}, sp | 643 ; ARM32: mov {{.*}}, sp |
| 617 ; ARM32: mov {{.*}}, sp | 644 ; ARM32: mov {{.*}}, sp |
| 618 ; ARM32: mov sp, {{.*}} | 645 ; ARM32: mov sp, {{.*}} |
| OLD | NEW |