@@ -579,7 +579,7 @@ define i1 @ashr_ugt_0(i4 %x) {
579579define i1 @ashr_ugt_0_multiuse (i4 %x , ptr %p ) {
580580; CHECK-LABEL: @ashr_ugt_0_multiuse(
581581; CHECK-NEXT: [[S:%.*]] = ashr i4 [[X:%.*]], 1
582- ; CHECK-NEXT: [[R:%.*]] = icmp ugt i4 [[X ]], 1
582+ ; CHECK-NEXT: [[R:%.*]] = icmp ne i4 [[S ]], 0
583583; CHECK-NEXT: store i4 [[S]], ptr [[P:%.*]], align 1
584584; CHECK-NEXT: ret i1 [[R]]
585585;
@@ -934,7 +934,7 @@ define i1 @lshr_eq_0_multiuse(i8 %x) {
934934; CHECK-LABEL: @lshr_eq_0_multiuse(
935935; CHECK-NEXT: [[S:%.*]] = lshr i8 [[X:%.*]], 2
936936; CHECK-NEXT: call void @use(i8 [[S]])
937- ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X ]], 4
937+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[S ]], 0
938938; CHECK-NEXT: ret i1 [[C]]
939939;
940940 %s = lshr i8 %x , 2
@@ -947,7 +947,7 @@ define i1 @lshr_ne_0_multiuse(i8 %x) {
947947; CHECK-LABEL: @lshr_ne_0_multiuse(
948948; CHECK-NEXT: [[S:%.*]] = lshr i8 [[X:%.*]], 2
949949; CHECK-NEXT: call void @use(i8 [[S]])
950- ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X ]], 3
950+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[S ]], 0
951951; CHECK-NEXT: ret i1 [[C]]
952952;
953953 %s = lshr i8 %x , 2
@@ -960,7 +960,7 @@ define i1 @ashr_eq_0_multiuse(i8 %x) {
960960; CHECK-LABEL: @ashr_eq_0_multiuse(
961961; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
962962; CHECK-NEXT: call void @use(i8 [[S]])
963- ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X ]], 4
963+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[S ]], 0
964964; CHECK-NEXT: ret i1 [[C]]
965965;
966966 %s = ashr i8 %x , 2
@@ -973,7 +973,7 @@ define i1 @ashr_ne_0_multiuse(i8 %x) {
973973; CHECK-LABEL: @ashr_ne_0_multiuse(
974974; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
975975; CHECK-NEXT: call void @use(i8 [[S]])
976- ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X ]], 3
976+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[S ]], 0
977977; CHECK-NEXT: ret i1 [[C]]
978978;
979979 %s = ashr i8 %x , 2
@@ -982,6 +982,46 @@ define i1 @ashr_ne_0_multiuse(i8 %x) {
982982 ret i1 %c
983983}
984984
985+ define i1 @lshr_eq_0 (i8 %x ) {
986+ ; CHECK-LABEL: @lshr_eq_0(
987+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 4
988+ ; CHECK-NEXT: ret i1 [[C]]
989+ ;
990+ %s = lshr i8 %x , 2
991+ %c = icmp eq i8 %s , 0
992+ ret i1 %c
993+ }
994+
995+ define i1 @lshr_ne_0 (i8 %x ) {
996+ ; CHECK-LABEL: @lshr_ne_0(
997+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], 3
998+ ; CHECK-NEXT: ret i1 [[C]]
999+ ;
1000+ %s = lshr i8 %x , 2
1001+ %c = icmp ne i8 %s , 0
1002+ ret i1 %c
1003+ }
1004+
1005+ define i1 @ashr_eq_0 (i8 %x ) {
1006+ ; CHECK-LABEL: @ashr_eq_0(
1007+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 4
1008+ ; CHECK-NEXT: ret i1 [[C]]
1009+ ;
1010+ %s = ashr i8 %x , 2
1011+ %c = icmp eq i8 %s , 0
1012+ ret i1 %c
1013+ }
1014+
1015+ define i1 @ashr_ne_0 (i8 %x ) {
1016+ ; CHECK-LABEL: @ashr_ne_0(
1017+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], 3
1018+ ; CHECK-NEXT: ret i1 [[C]]
1019+ ;
1020+ %s = ashr i8 %x , 2
1021+ %c = icmp ne i8 %s , 0
1022+ ret i1 %c
1023+ }
1024+
9851025define i1 @lshr_exact_eq_0_multiuse (i8 %x ) {
9861026; CHECK-LABEL: @lshr_exact_eq_0_multiuse(
9871027; CHECK-NEXT: [[S:%.*]] = lshr exact i8 [[X:%.*]], 2
0 commit comments