@@ -108,9 +108,8 @@ define <3 x i4> @partial_undef_vec() {
108108define i32 @early_freeze_test1 (i32 %x , i32 %y ) {
109109; CHECK-LABEL: define i32 @early_freeze_test1(
110110; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
111- ; CHECK-NEXT: [[X_FR:%.*]] = freeze i32 [[X]]
112- ; CHECK-NEXT: [[Y_FR:%.*]] = freeze i32 [[Y]]
113- ; CHECK-NEXT: [[V1:%.*]] = add i32 [[X_FR]], [[Y_FR]]
111+ ; CHECK-NEXT: [[V4:%.*]] = add i32 [[X]], [[Y]]
112+ ; CHECK-NEXT: [[V1:%.*]] = freeze i32 [[V4]]
114113; CHECK-NEXT: [[V2:%.*]] = shl i32 [[V1]], 1
115114; CHECK-NEXT: [[V3:%.*]] = and i32 [[V2]], 2
116115; CHECK-NEXT: ret i32 [[V3]]
@@ -944,14 +943,14 @@ define void @fold_phi_gep_phi_offset(ptr %init, ptr %end, i64 noundef %n) {
944943; CHECK-LABEL: define void @fold_phi_gep_phi_offset(
945944; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 noundef [[N:%.*]]) {
946945; CHECK-NEXT: [[ENTRY:.*]]:
947- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
948946; CHECK-NEXT: br label %[[LOOP:.*]]
949947; CHECK: [[LOOP]]:
950- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0 ]], %[[ENTRY]] ], [ [[I_NEXT :%.*]], %[[LOOP]] ]
948+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[INIT ]], %[[ENTRY]] ], [ [[I_NEXT_FR :%.*]], %[[LOOP]] ]
951949; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
952950; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
953- ; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
954- ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
951+ ; CHECK-NEXT: [[I_NEXT:%.*]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
952+ ; CHECK-NEXT: [[I_NEXT_FR]] = freeze ptr [[I_NEXT]]
953+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT_FR]], [[END]]
955954; CHECK-NEXT: br i1 [[COND]], label %[[LOOP]], label %[[EXIT:.*]]
956955; CHECK: [[EXIT]]:
957956; CHECK-NEXT: ret void
@@ -978,13 +977,13 @@ define void @fold_phi_gep_inbounds_phi_offset(ptr %init, ptr %end, i64 noundef %
978977; CHECK-LABEL: define void @fold_phi_gep_inbounds_phi_offset(
979978; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 noundef [[N:%.*]]) {
980979; CHECK-NEXT: [[ENTRY:.*]]:
981- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
982980; CHECK-NEXT: br label %[[LOOP:.*]]
983981; CHECK: [[LOOP]]:
984- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0 ]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
982+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[INIT ]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
985983; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
986984; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
987- ; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
985+ ; CHECK-NEXT: [[I_NEXT1:%.*]] = getelementptr inbounds i8, ptr [[I]], i64 [[OFF_NEXT]]
986+ ; CHECK-NEXT: [[I_NEXT]] = freeze ptr [[I_NEXT1]]
988987; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
989988; CHECK-NEXT: br i1 [[COND]], label %[[LOOP]], label %[[EXIT:.*]]
990989; CHECK: [[EXIT]]:
@@ -1011,14 +1010,13 @@ define void @fold_phi_gep_phi_offset_multiple(ptr %init, ptr %end, i64 %n) {
10111010; CHECK-LABEL: define void @fold_phi_gep_phi_offset_multiple(
10121011; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 [[N:%.*]]) {
10131012; CHECK-NEXT: [[ENTRY:.*]]:
1014- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
1015- ; CHECK-NEXT: [[TMP1:%.*]] = freeze i64 [[N]]
10161013; CHECK-NEXT: br label %[[LOOP:.*]]
10171014; CHECK: [[LOOP]]:
1018- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0 ]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
1019- ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[TMP1 ]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
1015+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[INIT ]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
1016+ ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N ]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
10201017; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
1021- ; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
1018+ ; CHECK-NEXT: [[I_NEXT1:%.*]] = getelementptr inbounds i8, ptr [[I]], i64 [[OFF_NEXT]]
1019+ ; CHECK-NEXT: [[I_NEXT]] = freeze ptr [[I_NEXT1]]
10221020; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
10231021; CHECK-NEXT: br i1 [[COND]], label %[[LOOP]], label %[[EXIT:.*]]
10241022; CHECK: [[EXIT]]:
@@ -1671,13 +1669,13 @@ define i32 @pr171435_2(ptr noundef %arg, i32 noundef %arg1) "instcombine-no-veri
16711669; CHECK: [[BB_7]]:
16721670; CHECK-NEXT: br label %[[BB_8]]
16731671; CHECK: [[BB_8]]:
1674- ; CHECK-NEXT: [[PHI9:%.*]] = phi i32 [ [[CALL6]], %[[BB_5]] ], [ poison, %[[BB_7]] ]
1675- ; CHECK-NEXT: [[PHI9_FR:%.*]] = freeze i32 [[PHI9]]
1672+ ; CHECK-NEXT: [[PHI9_FR:%.*]] = phi i32 [ [[CALL6]], %[[BB_5]] ], [ poison, %[[BB_7]] ]
16761673; CHECK-NEXT: [[AND:%.*]] = and i32 [[PHI9_FR]], 1
16771674; CHECK-NEXT: [[ASHR:%.*]] = lshr i32 [[PHI9_FR]], 1
16781675; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[ASHR]], [[AND]]
16791676; CHECK-NEXT: [[ADD10:%.*]] = add i32 [[PHI]], [[ADD]]
1680- ; CHECK-NEXT: [[AND11:%.*]] = and i32 [[ADD10]], 255
1677+ ; CHECK-NEXT: [[ADD10_FR:%.*]] = freeze i32 [[ADD10]]
1678+ ; CHECK-NEXT: [[AND11:%.*]] = and i32 [[ADD10_FR]], 255
16811679; CHECK-NEXT: [[ICMP12:%.*]] = icmp eq i32 [[AND11]], 0
16821680; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[ICMP12]], i32 [[PHI]], i32 [[AND11]]
16831681; CHECK-NEXT: br label %[[BB_13]]
0 commit comments