@@ -702,9 +702,9 @@ define i1 @PR42691_10_logical(i32 %x) {
702702
703703define i1 @substitute_constant_and_eq_eq (i8 %x , i8 %y ) {
704704; CHECK-LABEL: @substitute_constant_and_eq_eq(
705- ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[X:%.*]], 42
706705; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[Y:%.*]], 42
707- ; CHECK-NEXT: [[R:%.*]] = and i1 [[C1]], [[TMP1]]
706+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[Y1:%.*]], 42
707+ ; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP1]], [[TMP2]]
708708; CHECK-NEXT: ret i1 [[R]]
709709;
710710 %c1 = icmp eq i8 %x , 42
@@ -728,9 +728,9 @@ define i1 @substitute_constant_and_eq_eq_logical(i8 %x, i8 %y) {
728728
729729define i1 @substitute_constant_and_eq_eq_commute (i8 %x , i8 %y ) {
730730; CHECK-LABEL: @substitute_constant_and_eq_eq_commute(
731- ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[X:%.*]], 42
732731; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[Y:%.*]], 42
733- ; CHECK-NEXT: [[R:%.*]] = and i1 [[C1]], [[TMP1]]
732+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[Y1:%.*]], 42
733+ ; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP1]], [[TMP2]]
734734; CHECK-NEXT: ret i1 [[R]]
735735;
736736 %c1 = icmp eq i8 %x , 42
@@ -741,9 +741,9 @@ define i1 @substitute_constant_and_eq_eq_commute(i8 %x, i8 %y) {
741741
742742define i1 @substitute_constant_and_eq_eq_commute_logical (i8 %x , i8 %y ) {
743743; CHECK-LABEL: @substitute_constant_and_eq_eq_commute_logical(
744- ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[X:%.*]], 42
745744; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[Y:%.*]], 42
746- ; CHECK-NEXT: [[R:%.*]] = and i1 [[C1]], [[TMP1]]
745+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[Y1:%.*]], 42
746+ ; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP1]], [[TMP2]]
747747; CHECK-NEXT: ret i1 [[R]]
748748;
749749 %c1 = icmp eq i8 %x , 42
@@ -1392,12 +1392,12 @@ define i1 @bitwise_and_bitwise_and_icmps(i8 %x, i8 %y, i8 %z) {
13921392
13931393define i1 @bitwise_and_bitwise_and_icmps_comm1 (i8 %x , i8 %y , i8 %z ) {
13941394; CHECK-LABEL: @bitwise_and_bitwise_and_icmps_comm1(
1395- ; CHECK-NEXT: [[C1 :%.*]] = icmp eq i8 [[Y:%.*]], 42
1395+ ; CHECK-NEXT: [[TMP3 :%.*]] = icmp eq i8 [[Y:%.*]], 42
13961396; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]]
13971397; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
13981398; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[X:%.*]], [[TMP1]]
1399- ; CHECK-NEXT: [[TMP3 :%.*]] = icmp eq i8 [[TMP2]], [[TMP1]]
1400- ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[C1 ]], [[TMP3 ]]
1399+ ; CHECK-NEXT: [[TMP4 :%.*]] = icmp eq i8 [[TMP2]], [[TMP1]]
1400+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[TMP3 ]], [[TMP4 ]]
14011401; CHECK-NEXT: ret i1 [[AND2]]
14021402;
14031403 %c1 = icmp eq i8 %y , 42
@@ -3725,10 +3725,7 @@ define i1 @merge_range_check_or(i8 %a) {
37253725; Just a very complicated way of checking if v1 == 0.
37263726define i1 @complicated_zero_equality_test (i64 %v1 ) {
37273727; CHECK-LABEL: @complicated_zero_equality_test(
3728- ; CHECK-NEXT: [[V2:%.*]] = trunc i64 [[V1:%.*]] to i32
3729- ; CHECK-NEXT: [[V3:%.*]] = icmp eq i32 [[V2]], 0
3730- ; CHECK-NEXT: [[V4:%.*]] = icmp ult i64 [[V1]], 4294967296
3731- ; CHECK-NEXT: [[V5:%.*]] = and i1 [[V4]], [[V3]]
3728+ ; CHECK-NEXT: [[V5:%.*]] = icmp eq i64 [[V1:%.*]], 0
37323729; CHECK-NEXT: ret i1 [[V5]]
37333730;
37343731 %v2 = trunc i64 %v1 to i32
@@ -3737,3 +3734,15 @@ define i1 @complicated_zero_equality_test(i64 %v1) {
37373734 %v5 = and i1 %v4 , %v3
37383735 ret i1 %v5
37393736}
3737+
3738+ define i1 @commuted_complicated_zero_equality_test (i64 %v1 ) {
3739+ ; CHECK-LABEL: @commuted_complicated_zero_equality_test(
3740+ ; CHECK-NEXT: [[V5:%.*]] = icmp eq i64 [[V1:%.*]], 0
3741+ ; CHECK-NEXT: ret i1 [[V5]]
3742+ ;
3743+ %v2 = trunc i64 %v1 to i32
3744+ %v3 = icmp ult i64 %v1 , 4294967296 ; 2 ^ 32
3745+ %v4 = icmp eq i32 %v2 , 0
3746+ %v5 = and i1 %v4 , %v3
3747+ ret i1 %v5
3748+ }
0 commit comments