|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
|
3 |
| -; RUN: | FileCheck %s -check-prefix=RV64I |
| 3 | +; RUN: | FileCheck %s -check-prefixes=CHECK,RV64I |
4 | 4 | ; RUN: llc -mtriple=riscv64 -mattr=+xtheadbb -verify-machineinstrs < %s \
|
5 |
| -; RUN: | FileCheck %s -check-prefixes=RV64XTHEADBB,RV64XTHEADBB-NOB |
| 5 | +; RUN: | FileCheck %s -check-prefixes=CHECK,RV64XTHEADBB,RV64XTHEADBB-NOB |
6 | 6 | ; RUN: llc -mtriple=riscv64 -mattr=+xtheadbb,+b -verify-machineinstrs < %s \
|
7 |
| -; RUN: | FileCheck %s -check-prefixes=RV64XTHEADBB,RV64XTHEADBB-B |
| 7 | +; RUN: | FileCheck %s -check-prefixes=CHECK,RV64XTHEADBB,RV64XTHEADBB-B |
8 | 8 |
|
9 | 9 | declare i32 @llvm.ctlz.i32(i32, i1)
|
10 | 10 |
|
@@ -711,57 +711,37 @@ define signext i32 @sexti1_i32_2(i1 %a) nounwind {
|
711 | 711 |
|
712 | 712 | ; Make sure we don't use not+th.ext
|
713 | 713 | define zeroext i8 @sexti1_i32_setcc(i32 signext %a) {
|
714 |
| -; RV64I-LABEL: sexti1_i32_setcc: |
715 |
| -; RV64I: # %bb.0: |
716 |
| -; RV64I-NEXT: srli a0, a0, 63 |
717 |
| -; RV64I-NEXT: addi a0, a0, -1 |
718 |
| -; RV64I-NEXT: zext.b a0, a0 |
719 |
| -; RV64I-NEXT: ret |
720 |
| -; |
721 |
| -; RV64XTHEADBB-LABEL: sexti1_i32_setcc: |
722 |
| -; RV64XTHEADBB: # %bb.0: |
723 |
| -; RV64XTHEADBB-NEXT: srli a0, a0, 63 |
724 |
| -; RV64XTHEADBB-NEXT: addi a0, a0, -1 |
725 |
| -; RV64XTHEADBB-NEXT: zext.b a0, a0 |
726 |
| -; RV64XTHEADBB-NEXT: ret |
| 714 | +; CHECK-LABEL: sexti1_i32_setcc: |
| 715 | +; CHECK: # %bb.0: |
| 716 | +; CHECK-NEXT: srli a0, a0, 63 |
| 717 | +; CHECK-NEXT: addi a0, a0, -1 |
| 718 | +; CHECK-NEXT: zext.b a0, a0 |
| 719 | +; CHECK-NEXT: ret |
727 | 720 | %icmp = icmp sgt i32 %a, -1
|
728 | 721 | %sext = sext i1 %icmp to i8
|
729 | 722 | ret i8 %sext
|
730 | 723 | }
|
731 | 724 |
|
732 | 725 | ; Make sure we don't use seqz+th.ext instead of snez+addi
|
733 | 726 | define signext i32 @sexti1_i32_setcc_2(i32 signext %a, i32 signext %b) {
|
734 |
| -; RV64I-LABEL: sexti1_i32_setcc_2: |
735 |
| -; RV64I: # %bb.0: |
736 |
| -; RV64I-NEXT: xor a0, a0, a1 |
737 |
| -; RV64I-NEXT: snez a0, a0 |
738 |
| -; RV64I-NEXT: addi a0, a0, -1 |
739 |
| -; RV64I-NEXT: ret |
740 |
| -; |
741 |
| -; RV64XTHEADBB-LABEL: sexti1_i32_setcc_2: |
742 |
| -; RV64XTHEADBB: # %bb.0: |
743 |
| -; RV64XTHEADBB-NEXT: xor a0, a0, a1 |
744 |
| -; RV64XTHEADBB-NEXT: snez a0, a0 |
745 |
| -; RV64XTHEADBB-NEXT: addi a0, a0, -1 |
746 |
| -; RV64XTHEADBB-NEXT: ret |
| 727 | +; CHECK-LABEL: sexti1_i32_setcc_2: |
| 728 | +; CHECK: # %bb.0: |
| 729 | +; CHECK-NEXT: xor a0, a0, a1 |
| 730 | +; CHECK-NEXT: snez a0, a0 |
| 731 | +; CHECK-NEXT: addi a0, a0, -1 |
| 732 | +; CHECK-NEXT: ret |
747 | 733 | %icmp = icmp eq i32 %a, %b
|
748 | 734 | %sext = sext i1 %icmp to i32
|
749 | 735 | ret i32 %sext
|
750 | 736 | }
|
751 | 737 |
|
752 | 738 | ; Make sure we don't use th.ext instead of neg.
|
753 | 739 | define signext i32 @sexti1_i32_setcc_3(i32 signext %a, i32 signext %b) {
|
754 |
| -; RV64I-LABEL: sexti1_i32_setcc_3: |
755 |
| -; RV64I: # %bb.0: |
756 |
| -; RV64I-NEXT: slt a0, a0, a1 |
757 |
| -; RV64I-NEXT: neg a0, a0 |
758 |
| -; RV64I-NEXT: ret |
759 |
| -; |
760 |
| -; RV64XTHEADBB-LABEL: sexti1_i32_setcc_3: |
761 |
| -; RV64XTHEADBB: # %bb.0: |
762 |
| -; RV64XTHEADBB-NEXT: slt a0, a0, a1 |
763 |
| -; RV64XTHEADBB-NEXT: neg a0, a0 |
764 |
| -; RV64XTHEADBB-NEXT: ret |
| 740 | +; CHECK-LABEL: sexti1_i32_setcc_3: |
| 741 | +; CHECK: # %bb.0: |
| 742 | +; CHECK-NEXT: slt a0, a0, a1 |
| 743 | +; CHECK-NEXT: neg a0, a0 |
| 744 | +; CHECK-NEXT: ret |
765 | 745 | %icmp = icmp slt i32 %a, %b
|
766 | 746 | %sext = sext i1 %icmp to i32
|
767 | 747 | ret i32 %sext
|
@@ -800,57 +780,37 @@ define i64 @sexti1_i64_2(i1 %a) nounwind {
|
800 | 780 |
|
801 | 781 | ; Make sure we don't use not+th.ext
|
802 | 782 | define zeroext i8 @sexti1_i64_setcc(i64 %a) {
|
803 |
| -; RV64I-LABEL: sexti1_i64_setcc: |
804 |
| -; RV64I: # %bb.0: |
805 |
| -; RV64I-NEXT: srli a0, a0, 63 |
806 |
| -; RV64I-NEXT: addi a0, a0, -1 |
807 |
| -; RV64I-NEXT: zext.b a0, a0 |
808 |
| -; RV64I-NEXT: ret |
809 |
| -; |
810 |
| -; RV64XTHEADBB-LABEL: sexti1_i64_setcc: |
811 |
| -; RV64XTHEADBB: # %bb.0: |
812 |
| -; RV64XTHEADBB-NEXT: srli a0, a0, 63 |
813 |
| -; RV64XTHEADBB-NEXT: addi a0, a0, -1 |
814 |
| -; RV64XTHEADBB-NEXT: zext.b a0, a0 |
815 |
| -; RV64XTHEADBB-NEXT: ret |
| 783 | +; CHECK-LABEL: sexti1_i64_setcc: |
| 784 | +; CHECK: # %bb.0: |
| 785 | +; CHECK-NEXT: srli a0, a0, 63 |
| 786 | +; CHECK-NEXT: addi a0, a0, -1 |
| 787 | +; CHECK-NEXT: zext.b a0, a0 |
| 788 | +; CHECK-NEXT: ret |
816 | 789 | %icmp = icmp sgt i64 %a, -1
|
817 | 790 | %sext = sext i1 %icmp to i8
|
818 | 791 | ret i8 %sext
|
819 | 792 | }
|
820 | 793 |
|
821 | 794 | ; Make sure we don't use seqz+th.ext instead of snez+addi
|
822 | 795 | define i64 @sexti1_i64_setcc_2(i64 %a, i64 %b) {
|
823 |
| -; RV64I-LABEL: sexti1_i64_setcc_2: |
824 |
| -; RV64I: # %bb.0: |
825 |
| -; RV64I-NEXT: xor a0, a0, a1 |
826 |
| -; RV64I-NEXT: snez a0, a0 |
827 |
| -; RV64I-NEXT: addi a0, a0, -1 |
828 |
| -; RV64I-NEXT: ret |
829 |
| -; |
830 |
| -; RV64XTHEADBB-LABEL: sexti1_i64_setcc_2: |
831 |
| -; RV64XTHEADBB: # %bb.0: |
832 |
| -; RV64XTHEADBB-NEXT: xor a0, a0, a1 |
833 |
| -; RV64XTHEADBB-NEXT: snez a0, a0 |
834 |
| -; RV64XTHEADBB-NEXT: addi a0, a0, -1 |
835 |
| -; RV64XTHEADBB-NEXT: ret |
| 796 | +; CHECK-LABEL: sexti1_i64_setcc_2: |
| 797 | +; CHECK: # %bb.0: |
| 798 | +; CHECK-NEXT: xor a0, a0, a1 |
| 799 | +; CHECK-NEXT: snez a0, a0 |
| 800 | +; CHECK-NEXT: addi a0, a0, -1 |
| 801 | +; CHECK-NEXT: ret |
836 | 802 | %icmp = icmp eq i64 %a, %b
|
837 | 803 | %sext = sext i1 %icmp to i64
|
838 | 804 | ret i64 %sext
|
839 | 805 | }
|
840 | 806 |
|
841 | 807 | ; Make sure we don't use th.ext instead of neg.
|
842 | 808 | define i64 @sexti1_i64_setcc_3(i64 %a, i64 %b) {
|
843 |
| -; RV64I-LABEL: sexti1_i64_setcc_3: |
844 |
| -; RV64I: # %bb.0: |
845 |
| -; RV64I-NEXT: slt a0, a0, a1 |
846 |
| -; RV64I-NEXT: neg a0, a0 |
847 |
| -; RV64I-NEXT: ret |
848 |
| -; |
849 |
| -; RV64XTHEADBB-LABEL: sexti1_i64_setcc_3: |
850 |
| -; RV64XTHEADBB: # %bb.0: |
851 |
| -; RV64XTHEADBB-NEXT: slt a0, a0, a1 |
852 |
| -; RV64XTHEADBB-NEXT: neg a0, a0 |
853 |
| -; RV64XTHEADBB-NEXT: ret |
| 809 | +; CHECK-LABEL: sexti1_i64_setcc_3: |
| 810 | +; CHECK: # %bb.0: |
| 811 | +; CHECK-NEXT: slt a0, a0, a1 |
| 812 | +; CHECK-NEXT: neg a0, a0 |
| 813 | +; CHECK-NEXT: ret |
854 | 814 | %icmp = icmp slt i64 %a, %b
|
855 | 815 | %sext = sext i1 %icmp to i64
|
856 | 816 | ret i64 %sext
|
@@ -920,17 +880,11 @@ define signext i32 @sexth_i32(i32 signext %a) nounwind {
|
920 | 880 | }
|
921 | 881 |
|
922 | 882 | define signext i32 @no_sexth_i32(i32 signext %a) nounwind {
|
923 |
| -; RV64I-LABEL: no_sexth_i32: |
924 |
| -; RV64I: # %bb.0: |
925 |
| -; RV64I-NEXT: slli a0, a0, 49 |
926 |
| -; RV64I-NEXT: srai a0, a0, 48 |
927 |
| -; RV64I-NEXT: ret |
928 |
| -; |
929 |
| -; RV64XTHEADBB-LABEL: no_sexth_i32: |
930 |
| -; RV64XTHEADBB: # %bb.0: |
931 |
| -; RV64XTHEADBB-NEXT: slli a0, a0, 49 |
932 |
| -; RV64XTHEADBB-NEXT: srai a0, a0, 48 |
933 |
| -; RV64XTHEADBB-NEXT: ret |
| 883 | +; CHECK-LABEL: no_sexth_i32: |
| 884 | +; CHECK: # %bb.0: |
| 885 | +; CHECK-NEXT: slli a0, a0, 49 |
| 886 | +; CHECK-NEXT: srai a0, a0, 48 |
| 887 | +; CHECK-NEXT: ret |
934 | 888 | %shl = shl i32 %a, 17
|
935 | 889 | %shr = ashr exact i32 %shl, 16
|
936 | 890 | ret i32 %shr
|
@@ -958,17 +912,11 @@ define i64 @sexth_i64(i64 %a) nounwind {
|
958 | 912 | }
|
959 | 913 |
|
960 | 914 | define i64 @no_sexth_i64(i64 %a) nounwind {
|
961 |
| -; RV64I-LABEL: no_sexth_i64: |
962 |
| -; RV64I: # %bb.0: |
963 |
| -; RV64I-NEXT: slli a0, a0, 49 |
964 |
| -; RV64I-NEXT: srai a0, a0, 48 |
965 |
| -; RV64I-NEXT: ret |
966 |
| -; |
967 |
| -; RV64XTHEADBB-LABEL: no_sexth_i64: |
968 |
| -; RV64XTHEADBB: # %bb.0: |
969 |
| -; RV64XTHEADBB-NEXT: slli a0, a0, 49 |
970 |
| -; RV64XTHEADBB-NEXT: srai a0, a0, 48 |
971 |
| -; RV64XTHEADBB-NEXT: ret |
| 915 | +; CHECK-LABEL: no_sexth_i64: |
| 916 | +; CHECK: # %bb.0: |
| 917 | +; CHECK-NEXT: slli a0, a0, 49 |
| 918 | +; CHECK-NEXT: srai a0, a0, 48 |
| 919 | +; CHECK-NEXT: ret |
972 | 920 | %shl = shl i64 %a, 49
|
973 | 921 | %shr = ashr exact i64 %shl, 48
|
974 | 922 | ret i64 %shr
|
@@ -1067,15 +1015,10 @@ define i64 @zext_bf2_i64(i64 %a) nounwind {
|
1067 | 1015 | }
|
1068 | 1016 |
|
1069 | 1017 | define i64 @zext_i64_srliw(i64 %a) nounwind {
|
1070 |
| -; RV64I-LABEL: zext_i64_srliw: |
1071 |
| -; RV64I: # %bb.0: |
1072 |
| -; RV64I-NEXT: srliw a0, a0, 16 |
1073 |
| -; RV64I-NEXT: ret |
1074 |
| -; |
1075 |
| -; RV64XTHEADBB-LABEL: zext_i64_srliw: |
1076 |
| -; RV64XTHEADBB: # %bb.0: |
1077 |
| -; RV64XTHEADBB-NEXT: srliw a0, a0, 16 |
1078 |
| -; RV64XTHEADBB-NEXT: ret |
| 1018 | +; CHECK-LABEL: zext_i64_srliw: |
| 1019 | +; CHECK: # %bb.0: |
| 1020 | +; CHECK-NEXT: srliw a0, a0, 16 |
| 1021 | +; CHECK-NEXT: ret |
1079 | 1022 | %1 = lshr i64 %a, 16
|
1080 | 1023 | %and = and i64 %1, 65535
|
1081 | 1024 | ret i64 %and
|
|
0 commit comments