Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 2359713003: [Subzero][MIPS32] Implements 64-bit shl, lshr, ashr for MIPS (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Added lowering of shifts operations with constant shift amount Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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: nor [[T2:.*]],[[B_LO]],zero
526 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1
527 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]]
528 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]]
529 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]]
530 ; MIPS32: move [[T1_LO:.*]],[[T_LO]]
531 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
532 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]]
533 ; MIPS32: movn [[T1_LO]],zero,[[T5]]
534 ; MIPS32: move v1,[[T_HI]]
535
523 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) { 536 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) {
524 entry: 537 entry:
525 %shl = shl i64 %a, %b 538 %shl = shl i64 %a, %b
526 %result = trunc i64 %shl to i32 539 %result = trunc i64 %shl to i32
527 ret i32 %result 540 ret i32 %result
528 } 541 }
529 ; CHECK-LABEL: shl64BitSignedTrunc 542 ; CHECK-LABEL: shl64BitSignedTrunc
530 ; CHECK: mov 543 ; CHECK: mov
531 ; CHECK: shl e 544 ; CHECK: shl e
532 ; CHECK: test {{.*}},0x20 545 ; CHECK: test {{.*}},0x20
(...skipping 27 matching lines...) Expand all
560 573
561 ; ARM32-LABEL: shl64BitUnsigned 574 ; ARM32-LABEL: shl64BitUnsigned
562 ; ARM32: rsb 575 ; ARM32: rsb
563 ; ARM32: lsr 576 ; ARM32: lsr
564 ; ARM32: orr 577 ; ARM32: orr
565 ; ARM32: sub 578 ; ARM32: sub
566 ; ARM32: cmp 579 ; ARM32: cmp
567 ; ARM32: lslge 580 ; ARM32: lslge
568 ; ARM32: lsl 581 ; ARM32: lsl
569 582
583 ; MIPS32-LABEL: shl64BitUnsigned
584 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]]
585 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero
586 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1
587 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]]
588 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]]
589 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]]
590 ; MIPS32: move [[T1_LO:.*]],[[T_LO]]
591 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
592 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]]
593 ; MIPS32: movn [[T1_LO]],zero,[[T5]]
594 ; MIPS32: move v1,[[T_HI]]
595
570 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { 596 define internal i64 @shr64BitSigned(i64 %a, i64 %b) {
571 entry: 597 entry:
572 %shr = ashr i64 %a, %b 598 %shr = ashr i64 %a, %b
573 ret i64 %shr 599 ret i64 %shr
574 } 600 }
575 ; CHECK-LABEL: shr64BitSigned 601 ; CHECK-LABEL: shr64BitSigned
576 ; CHECK: shrd 602 ; CHECK: shrd
577 ; CHECK: sar 603 ; CHECK: sar
578 ; CHECK: test {{.*}},0x20 604 ; CHECK: test {{.*}},0x20
579 ; CHECK: je 605 ; CHECK: je
580 ; CHECK: sar {{.*}},0x1f 606 ; CHECK: sar {{.*}},0x1f
581 ; 607 ;
582 ; OPTM1-LABEL: shr64BitSigned 608 ; OPTM1-LABEL: shr64BitSigned
583 ; OPTM1: shrd 609 ; OPTM1: shrd
584 ; OPTM1: sar 610 ; OPTM1: sar
585 ; OPTM1: test {{.*}},0x20 611 ; OPTM1: test {{.*}},0x20
586 ; OPTM1: je 612 ; OPTM1: je
587 ; OPTM1: sar {{.*}},0x1f 613 ; OPTM1: sar {{.*}},0x1f
588 614
589 ; ARM32-LABEL: shr64BitSigned 615 ; ARM32-LABEL: shr64BitSigned
590 ; ARM32: lsr [[T0:r[0-9]+]], r{{[0-9]+}}, r{{[0-9]+}} 616 ; ARM32: lsr [[T0:r[0-9]+]], r{{[0-9]+}}, r{{[0-9]+}}
591 ; ARM32: rsb [[T1:r[0-9]+]], r{{[0-9]+}}, #32 617 ; ARM32: rsb [[T1:r[0-9]+]], r{{[0-9]+}}, #32
592 ; ARM32: orr r{{[0-9]+}}, [[T0]], r{{[0-9]+}}, lsl [[T1]] 618 ; ARM32: orr r{{[0-9]+}}, [[T0]], r{{[0-9]+}}, lsl [[T1]]
593 ; ARM32: sub [[T2:r[0-9]+]], r{{[0-9]+}}, #32 619 ; ARM32: sub [[T2:r[0-9]+]], r{{[0-9]+}}, #32
594 ; ARM32: cmp [[T2]], #0 620 ; ARM32: cmp [[T2]], #0
595 ; ARM32: asrge r{{[0-9]+}}, r{{[0-9]+}}, [[T2]] 621 ; ARM32: asrge r{{[0-9]+}}, r{{[0-9]+}}, [[T2]]
596 ; ARM32: asr r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}} 622 ; ARM32: asr r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}}
597 623
624 ; MIPS32-LABEL: shr64BitSigned
625 ; MIPS32: srlv [[T1:.*]],[[A_LO:.*]],[[B_LO:.*]]
626 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero
627 ; MIPS32: sll [[T3:.*]],[[A_HI:.*]],0x1
628 ; MIPS32: sllv [[T4:.*]],[[T3]],[[T2]]
629 ; MIPS32: or [[T_LO:.*]],[[T1]],[[T4]]
630 ; MIPS32: srav [[T_HI:.*]],[[A_HI]],[[B_LO]]
631 ; MIPS32: move [[T_HI1:.*]],[[T_HI]]
632 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
633 ; MIPS32: movn [[T_LO1:.*]],[[T_HI]],[[T5]]
634 ; MIPS32: sra [[T6:.*]],[[A_HI]],0x1f
635 ; MIPS32: movn [[T_HI1]],[[T6]],[[T5]]
636
598 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) { 637 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) {
599 entry: 638 entry:
600 %shr = ashr i64 %a, %b 639 %shr = ashr i64 %a, %b
601 %result = trunc i64 %shr to i32 640 %result = trunc i64 %shr to i32
602 ret i32 %result 641 ret i32 %result
603 } 642 }
604 ; CHECK-LABEL: shr64BitSignedTrunc 643 ; CHECK-LABEL: shr64BitSignedTrunc
605 ; CHECK: shrd 644 ; CHECK: shrd
606 ; CHECK: sar 645 ; CHECK: sar
607 ; CHECK: test {{.*}},0x20 646 ; CHECK: test {{.*}},0x20
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 680
642 ; ARM32-LABEL: shr64BitUnsigned 681 ; ARM32-LABEL: shr64BitUnsigned
643 ; ARM32: lsr 682 ; ARM32: lsr
644 ; ARM32: rsb 683 ; ARM32: rsb
645 ; ARM32: orr 684 ; ARM32: orr
646 ; ARM32: sub 685 ; ARM32: sub
647 ; ARM32: cmp 686 ; ARM32: cmp
648 ; ARM32: lsrge 687 ; ARM32: lsrge
649 ; ARM32: lsr 688 ; ARM32: lsr
650 689
690 ; MIPS32-LABEL: shr64BitUnsigned
691 ; MIPS32: srlv [[T1:.*]],[[A_LO:.*]],[[B_LO:.*]]
692 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero
693 ; MIPS32: sll [[T3:.*]],[[A_HI:.*]],0x1
694 ; MIPS32: sllv [[T4:.*]],[[T3]],[[T2]]
695 ; MIPS32: or [[T_LO:.*]],[[T1]],[[T4]]
696 ; MIPS32: srlv [[T_HI:.*]],[[A_HI]],[[B_LO]]
697 ; MIPS32: move [[T_HI1:.*]],[[T_HI]]
698 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
699 ; MIPS32: movn [[T_LO1:.*]],[[T_HI]],[[T5]]
700 ; MIPS32: movn [[T_HI1]],zero,[[T5]]
701
651 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) { 702 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) {
652 entry: 703 entry:
653 %shr = lshr i64 %a, %b 704 %shr = lshr i64 %a, %b
654 %result = trunc i64 %shr to i32 705 %result = trunc i64 %shr to i32
655 ret i32 %result 706 ret i32 %result
656 } 707 }
657 ; CHECK-LABEL: shr64BitUnsignedTrunc 708 ; CHECK-LABEL: shr64BitUnsignedTrunc
658 ; CHECK: shrd 709 ; CHECK: shrd
659 ; CHECK: shr 710 ; CHECK: shr
660 ; CHECK: test {{.*}},0x20 711 ; CHECK: test {{.*}},0x20
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after
2074 %s = lshr i64 %a, 40 2125 %s = lshr i64 %a, 40
2075 %t = trunc i64 %s to i32 2126 %t = trunc i64 %s to i32
2076 %r = sub i32 %t, 1 2127 %r = sub i32 %t, 1
2077 ret i32 %r 2128 ret i32 %r
2078 ; ARM32-LABEL: subOneToUpperAfterShift 2129 ; ARM32-LABEL: subOneToUpperAfterShift
2079 ; ARM32: subs 2130 ; ARM32: subs
2080 ; ARM32: sbc 2131 ; ARM32: sbc
2081 ; ARM32: lsr 2132 ; ARM32: lsr
2082 ; ARM32: sub 2133 ; ARM32: sub
2083 } 2134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698