Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 ; This tries to be a comprehensive test of i64 operations, in | 1 ; This tries to be a comprehensive test of i64 operations, in |
| 2 ; particular the patterns for lowering i64 operations into constituent | 2 ; particular the patterns for lowering i64 operations into constituent |
| 3 ; i32 operations on x86-32. | 3 ; i32 operations on x86-32. |
| 4 | 4 |
| 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 513 | 513 |
| 514 ; ARM32-LABEL: shl64BitSigned | 514 ; ARM32-LABEL: shl64BitSigned |
| 515 ; ARM32: rsb [[T0:r[0-9]+]], r2, #32 | 515 ; ARM32: rsb [[T0:r[0-9]+]], r2, #32 |
| 516 ; ARM32: lsr [[T1:r[0-9]+]], r0, [[T0]] | 516 ; ARM32: lsr [[T1:r[0-9]+]], r0, [[T0]] |
| 517 ; ARM32: orr [[T2:r[0-9]+]], [[T1]], r1, lsl r2 | 517 ; ARM32: orr [[T2:r[0-9]+]], [[T1]], r1, lsl r2 |
| 518 ; ARM32: sub [[T3:r[0-9]+]], r2, #32 | 518 ; ARM32: sub [[T3:r[0-9]+]], r2, #32 |
| 519 ; ARM32: cmp [[T3]], #0 | 519 ; ARM32: cmp [[T3]], #0 |
| 520 ; ARM32: lslge [[T2]], r0, [[T3]] | 520 ; ARM32: lslge [[T2]], r0, [[T3]] |
| 521 ; ARM32: lsl r{{[0-9]+}}, r0, r2 | 521 ; ARM32: lsl r{{[0-9]+}}, r0, r2 |
| 522 | 522 |
| 523 ; MIPS32-LABEL: shl64BitSigned | |
| 524 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]] | |
| 525 ; MIPS32: li [[T2:.*]],-1 | |
| 526 ; MIPS32: xor [[T3:.*]],[[B_LO]],[[T2]] | |
| 527 ; MIPS32: srl [[T4:.*]],[[A_LO:.*]],0x1 | |
| 528 ; MIPS32: srlv [[T5:.*]],[[T4]],[[T3]] | |
| 529 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T5]] | |
| 530 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]] | |
| 531 ; MIPS32: move [[T1_LO:.*]],[[T_LO]] | |
|
Jim Stichnoth
2016/09/21 16:59:25
trailing whitespace
sagar.thakur
2016/09/22 14:45:04
Done.
sagar.thakur
2016/09/22 14:45:04
Done.
| |
| 532 ; MIPS32: andi [[T6:.*]],[[B_LO]],0x20 | |
| 533 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T6]] | |
|
Jim Stichnoth
2016/09/21 16:59:25
trailing whitespace
sagar.thakur
2016/09/22 14:45:04
Done.
sagar.thakur
2016/09/22 14:45:04
Done.
| |
| 534 ; MIPS32: movn [[T1_LO]],zero,[[T6]] | |
| 535 ; MIPS32: move v1,[[T_HI]] | |
| 536 | |
| 523 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) { | 537 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) { |
| 524 entry: | 538 entry: |
| 525 %shl = shl i64 %a, %b | 539 %shl = shl i64 %a, %b |
| 526 %result = trunc i64 %shl to i32 | 540 %result = trunc i64 %shl to i32 |
| 527 ret i32 %result | 541 ret i32 %result |
| 528 } | 542 } |
| 529 ; CHECK-LABEL: shl64BitSignedTrunc | 543 ; CHECK-LABEL: shl64BitSignedTrunc |
| 530 ; CHECK: mov | 544 ; CHECK: mov |
| 531 ; CHECK: shl e | 545 ; CHECK: shl e |
| 532 ; CHECK: test {{.*}},0x20 | 546 ; CHECK: test {{.*}},0x20 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 560 | 574 |
| 561 ; ARM32-LABEL: shl64BitUnsigned | 575 ; ARM32-LABEL: shl64BitUnsigned |
| 562 ; ARM32: rsb | 576 ; ARM32: rsb |
| 563 ; ARM32: lsr | 577 ; ARM32: lsr |
| 564 ; ARM32: orr | 578 ; ARM32: orr |
| 565 ; ARM32: sub | 579 ; ARM32: sub |
| 566 ; ARM32: cmp | 580 ; ARM32: cmp |
| 567 ; ARM32: lslge | 581 ; ARM32: lslge |
| 568 ; ARM32: lsl | 582 ; ARM32: lsl |
| 569 | 583 |
| 584 ; MIPS32-LABEL: shl64BitUnsigned | |
| 585 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]] | |
| 586 ; MIPS32: li [[T2:.*]],-1 | |
| 587 ; MIPS32: xor [[T3:.*]],[[B_LO]],[[T2]] | |
| 588 ; MIPS32: srl [[T4:.*]],[[A_LO:.*]],0x1 | |
| 589 ; MIPS32: srlv [[T5:.*]],[[T4]],[[T3]] | |
| 590 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T5]] | |
| 591 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]] | |
| 592 ; MIPS32: move [[T1_LO:.*]],[[T_LO]] | |
| 593 ; MIPS32: andi [[T6:.*]],[[B_LO]],0x20 | |
| 594 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T6]] | |
| 595 ; MIPS32: movn [[T1_LO]],zero,[[T6]] | |
| 596 ; MIPS32: move v1,[[T_HI]] | |
| 597 | |
| 570 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { | 598 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { |
| 571 entry: | 599 entry: |
| 572 %shr = ashr i64 %a, %b | 600 %shr = ashr i64 %a, %b |
| 573 ret i64 %shr | 601 ret i64 %shr |
| 574 } | 602 } |
| 575 ; CHECK-LABEL: shr64BitSigned | 603 ; CHECK-LABEL: shr64BitSigned |
| 576 ; CHECK: shrd | 604 ; CHECK: shrd |
| 577 ; CHECK: sar | 605 ; CHECK: sar |
| 578 ; CHECK: test {{.*}},0x20 | 606 ; CHECK: test {{.*}},0x20 |
| 579 ; CHECK: je | 607 ; CHECK: je |
| 580 ; CHECK: sar {{.*}},0x1f | 608 ; CHECK: sar {{.*}},0x1f |
| 581 ; | 609 ; |
| 582 ; OPTM1-LABEL: shr64BitSigned | 610 ; OPTM1-LABEL: shr64BitSigned |
| 583 ; OPTM1: shrd | 611 ; OPTM1: shrd |
| 584 ; OPTM1: sar | 612 ; OPTM1: sar |
| 585 ; OPTM1: test {{.*}},0x20 | 613 ; OPTM1: test {{.*}},0x20 |
| 586 ; OPTM1: je | 614 ; OPTM1: je |
| 587 ; OPTM1: sar {{.*}},0x1f | 615 ; OPTM1: sar {{.*}},0x1f |
| 588 | 616 |
| 589 ; ARM32-LABEL: shr64BitSigned | 617 ; ARM32-LABEL: shr64BitSigned |
| 590 ; ARM32: lsr [[T0:r[0-9]+]], r{{[0-9]+}}, r{{[0-9]+}} | 618 ; ARM32: lsr [[T0:r[0-9]+]], r{{[0-9]+}}, r{{[0-9]+}} |
| 591 ; ARM32: rsb [[T1:r[0-9]+]], r{{[0-9]+}}, #32 | 619 ; ARM32: rsb [[T1:r[0-9]+]], r{{[0-9]+}}, #32 |
| 592 ; ARM32: orr r{{[0-9]+}}, [[T0]], r{{[0-9]+}}, lsl [[T1]] | 620 ; ARM32: orr r{{[0-9]+}}, [[T0]], r{{[0-9]+}}, lsl [[T1]] |
| 593 ; ARM32: sub [[T2:r[0-9]+]], r{{[0-9]+}}, #32 | 621 ; ARM32: sub [[T2:r[0-9]+]], r{{[0-9]+}}, #32 |
| 594 ; ARM32: cmp [[T2]], #0 | 622 ; ARM32: cmp [[T2]], #0 |
| 595 ; ARM32: asrge r{{[0-9]+}}, r{{[0-9]+}}, [[T2]] | 623 ; ARM32: asrge r{{[0-9]+}}, r{{[0-9]+}}, [[T2]] |
| 596 ; ARM32: asr r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}} | 624 ; ARM32: asr r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}} |
| 597 | 625 |
| 626 ; MIPS32-LABEL: shr64BitSigned | |
| 627 ; MIPS32: srlv [[T1:.*]],[[A_LO:.*]],[[B_LO:.*]] | |
| 628 ; MIPS32: li [[T2:.*]],-1 | |
| 629 ; MIPS32: xor [[T3:.*]],[[B_LO]],[[T2]] | |
| 630 ; MIPS32: sll [[T4:.*]],[[A_HI:.*]],0x1 | |
| 631 ; MIPS32: sllv [[T5:.*]],[[T4]],[[T3]] | |
| 632 ; MIPS32: or [[T_LO:.*]],[[T1]],[[T5]] | |
| 633 ; MIPS32: srav [[T_HI:.*]],[[A_HI]],[[B_LO]] | |
| 634 ; MIPS32: move [[T_HI1:.*]],[[T_HI]] | |
| 635 ; MIPS32: andi [[T6:.*]],[[B_LO]],0x20 | |
| 636 ; MIPS32: movn [[T_LO1:.*]],[[T_HI]],[[T6]] | |
| 637 ; MIPS32: sra [[T7:.*]],[[A_HI]],0x1f | |
| 638 ; MIPS32: movn [[T_HI1]],[[T7]],[[T6]] | |
| 639 | |
| 598 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) { | 640 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) { |
| 599 entry: | 641 entry: |
| 600 %shr = ashr i64 %a, %b | 642 %shr = ashr i64 %a, %b |
| 601 %result = trunc i64 %shr to i32 | 643 %result = trunc i64 %shr to i32 |
| 602 ret i32 %result | 644 ret i32 %result |
| 603 } | 645 } |
| 604 ; CHECK-LABEL: shr64BitSignedTrunc | 646 ; CHECK-LABEL: shr64BitSignedTrunc |
| 605 ; CHECK: shrd | 647 ; CHECK: shrd |
| 606 ; CHECK: sar | 648 ; CHECK: sar |
| 607 ; CHECK: test {{.*}},0x20 | 649 ; CHECK: test {{.*}},0x20 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 641 | 683 |
| 642 ; ARM32-LABEL: shr64BitUnsigned | 684 ; ARM32-LABEL: shr64BitUnsigned |
| 643 ; ARM32: lsr | 685 ; ARM32: lsr |
| 644 ; ARM32: rsb | 686 ; ARM32: rsb |
| 645 ; ARM32: orr | 687 ; ARM32: orr |
| 646 ; ARM32: sub | 688 ; ARM32: sub |
| 647 ; ARM32: cmp | 689 ; ARM32: cmp |
| 648 ; ARM32: lsrge | 690 ; ARM32: lsrge |
| 649 ; ARM32: lsr | 691 ; ARM32: lsr |
| 650 | 692 |
| 693 ; MIPS32-LABEL: shr64BitUnsigned | |
| 694 ; MIPS32: srlv [[T1:.*]],[[A_LO:.*]],[[B_LO:.*]] | |
| 695 ; MIPS32: li [[T2:.*]],-1 | |
| 696 ; MIPS32: xor [[T3:.*]],[[B_LO]],[[T2]] | |
| 697 ; MIPS32: sll [[T4:.*]],[[A_HI:.*]],0x1 | |
| 698 ; MIPS32: sllv [[T5:.*]],[[T4]],[[T3]] | |
| 699 ; MIPS32: or [[T_LO:.*]],[[T1]],[[T5]] | |
| 700 ; MIPS32: srlv [[T_HI:.*]],[[A_HI]],[[B_LO]] | |
| 701 ; MIPS32: move [[T_HI1:.*]],[[T_HI]] | |
| 702 ; MIPS32: andi [[T6:.*]],[[B_LO]],0x20 | |
| 703 ; MIPS32: movn [[T_LO1:.*]],[[T_HI]],[[T6]] | |
| 704 ; MIPS32: movn [[T_HI1]],zero,[[T6]] | |
| 705 | |
| 651 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) { | 706 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) { |
| 652 entry: | 707 entry: |
| 653 %shr = lshr i64 %a, %b | 708 %shr = lshr i64 %a, %b |
| 654 %result = trunc i64 %shr to i32 | 709 %result = trunc i64 %shr to i32 |
| 655 ret i32 %result | 710 ret i32 %result |
| 656 } | 711 } |
| 657 ; CHECK-LABEL: shr64BitUnsignedTrunc | 712 ; CHECK-LABEL: shr64BitUnsignedTrunc |
| 658 ; CHECK: shrd | 713 ; CHECK: shrd |
| 659 ; CHECK: shr | 714 ; CHECK: shr |
| 660 ; CHECK: test {{.*}},0x20 | 715 ; CHECK: test {{.*}},0x20 |
| (...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2074 %s = lshr i64 %a, 40 | 2129 %s = lshr i64 %a, 40 |
| 2075 %t = trunc i64 %s to i32 | 2130 %t = trunc i64 %s to i32 |
| 2076 %r = sub i32 %t, 1 | 2131 %r = sub i32 %t, 1 |
| 2077 ret i32 %r | 2132 ret i32 %r |
| 2078 ; ARM32-LABEL: subOneToUpperAfterShift | 2133 ; ARM32-LABEL: subOneToUpperAfterShift |
| 2079 ; ARM32: subs | 2134 ; ARM32: subs |
| 2080 ; ARM32: sbc | 2135 ; ARM32: sbc |
| 2081 ; ARM32: lsr | 2136 ; ARM32: lsr |
| 2082 ; ARM32: sub | 2137 ; ARM32: sub |
| 2083 } | 2138 } |
| OLD | NEW |