@@ -106,9 +106,10 @@ define <3 x i4> @partial_undef_vec() {
106106; Move the freeze forward to prevent poison from spreading.
107107
108108define i32 @early_freeze_test1 (i32 %x , i32 %y ) {
109- ; CHECK-LABEL: @early_freeze_test1(
110- ; CHECK-NEXT: [[X_FR:%.*]] = freeze i32 [[X:%.*]]
111- ; CHECK-NEXT: [[Y_FR:%.*]] = freeze i32 [[Y:%.*]]
109+ ; CHECK-LABEL: define i32 @early_freeze_test1(
110+ ; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
111+ ; CHECK-NEXT: [[X_FR:%.*]] = freeze i32 [[X]]
112+ ; CHECK-NEXT: [[Y_FR:%.*]] = freeze i32 [[Y]]
112113; CHECK-NEXT: [[V1:%.*]] = add i32 [[X_FR]], [[Y_FR]]
113114; CHECK-NEXT: [[V2:%.*]] = shl i32 [[V1]], 1
114115; CHECK-NEXT: [[V3:%.*]] = and i32 [[V2]], 2
@@ -153,8 +154,9 @@ define i32 @early_freeze_test3(i32 %v1) {
153154}
154155
155156define i32 @early_freeze_test4 (i32 %v1 ) {
156- ; CHECK-LABEL: @early_freeze_test4(
157- ; CHECK-NEXT: [[V1_FR:%.*]] = freeze i32 [[V1:%.*]]
157+ ; CHECK-LABEL: define i32 @early_freeze_test4(
158+ ; CHECK-SAME: i32 [[V1:%.*]]) {
159+ ; CHECK-NEXT: [[V1_FR:%.*]] = freeze i32 [[V1]]
158160; CHECK-NEXT: [[V2:%.*]] = mul i32 [[V1_FR]], [[V1_FR]]
159161; CHECK-NEXT: ret i32 [[V2]]
160162;
@@ -188,12 +190,12 @@ define void @freeze_dominated_uses_test2(i32 %v) {
188190; CHECK-NEXT: call void @use_p32(ptr nonnull [[A]])
189191; CHECK-NEXT: call void @use_i32(i32 [[V_FR]])
190192; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[V_FR]], 0
191- ; CHECK-NEXT: br i1 [[COND]], label %[[BB0 :.*]], label %[[BB1 :.*]]
192- ; CHECK: [[BB0 ]]:
193+ ; CHECK-NEXT: br i1 [[COND]], label %[[BB_0 :.*]], label %[[BB_1 :.*]]
194+ ; CHECK: [[BB_0 ]]:
193195; CHECK-NEXT: call void @use_i32(i32 [[V_FR]])
194196; CHECK-NEXT: call void @use_i32(i32 [[V_FR]])
195197; CHECK-NEXT: br label %[[END:.*]]
196- ; CHECK: [[BB1 ]]:
198+ ; CHECK: [[BB_1 ]]:
197199; CHECK-NEXT: call void @use_i32(i32 [[V_FR]])
198200; CHECK-NEXT: br label %[[END]]
199201; CHECK: [[END]]:
@@ -204,15 +206,15 @@ entry:
204206 call void @use_p32 (ptr %a )
205207 call void @use_i32 (i32 %v )
206208 %cond = icmp eq i32 %v , 0
207- br i1 %cond , label %bb0 , label %bb1
209+ br i1 %cond , label %bb.0 , label %bb.1
208210
209- bb0 :
211+ bb. 0 :
210212 %v.fr = freeze i32 %v
211213 call void @use_i32 (i32 %v.fr )
212214 call void @use_i32 (i32 %v )
213215 br label %end
214216
215- bb1 :
217+ bb. 1 :
216218 call void @use_i32 (i32 %v )
217219 br label %end
218220
@@ -228,11 +230,11 @@ define void @freeze_dominated_uses_test3(i32 %v, i1 %cond) {
228230; CHECK-NEXT: [[ENTRY:.*:]]
229231; CHECK-NEXT: [[V_FR1:%.*]] = freeze i32 [[V]]
230232; CHECK-NEXT: call void @use_i32(i32 [[V_FR1]])
231- ; CHECK-NEXT: br i1 [[COND]], label %[[BB0 :.*]], label %[[BB1 :.*]]
232- ; CHECK: [[BB0 ]]:
233+ ; CHECK-NEXT: br i1 [[COND]], label %[[BB_0 :.*]], label %[[BB_1 :.*]]
234+ ; CHECK: [[BB_0 ]]:
233235; CHECK-NEXT: call void @use_i32(i32 [[V_FR1]])
234236; CHECK-NEXT: br label %[[END:.*]]
235- ; CHECK: [[BB1 ]]:
237+ ; CHECK: [[BB_1 ]]:
236238; CHECK-NEXT: call void @use_i32(i32 [[V_FR1]])
237239; CHECK-NEXT: br label %[[END]]
238240; CHECK: [[END]]:
@@ -241,14 +243,14 @@ define void @freeze_dominated_uses_test3(i32 %v, i1 %cond) {
241243entry:
242244 %v.fr1 = freeze i32 %v
243245 call void @use_i32 (i32 %v.fr1 )
244- br i1 %cond , label %bb0 , label %bb1
246+ br i1 %cond , label %bb.0 , label %bb.1
245247
246- bb0 :
248+ bb. 0 :
247249 %v.fr2 = freeze i32 %v
248250 call void @use_i32 (i32 %v.fr2 )
249251 br label %end
250252
251- bb1 :
253+ bb. 1 :
252254 call void @use_i32 (i32 %v )
253255 br label %end
254256
@@ -939,18 +941,19 @@ exit: ; preds = %loop
939941; The recurrence for the GEP offset can't produce poison so the freeze should
940942; be pushed through to the ptr.
941943define void @fold_phi_gep_phi_offset (ptr %init , ptr %end , i64 noundef %n ) {
942- ; CHECK-LABEL: @fold_phi_gep_phi_offset(
943- ; CHECK-NEXT: entry:
944- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT:%.*]]
945- ; CHECK-NEXT: br label [[LOOP:%.*]]
946- ; CHECK: loop:
947- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
948- ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N:%.*]], [[ENTRY]] ], [ [[OFF_NEXT:%.*]], [[LOOP]] ]
944+ ; CHECK-LABEL: define void @fold_phi_gep_phi_offset(
945+ ; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 noundef [[N:%.*]]) {
946+ ; CHECK-NEXT: [[ENTRY:.*]]:
947+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
948+ ; CHECK-NEXT: br label %[[LOOP:.*]]
949+ ; CHECK: [[LOOP]]:
950+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
951+ ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
949952; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
950953; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
951- ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END:%.* ]]
952- ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:% .*]]
953- ; CHECK: exit :
954+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
955+ ; CHECK-NEXT: br i1 [[COND]], label % [[LOOP]], label % [[EXIT:.*]]
956+ ; CHECK: [[EXIT]] :
954957; CHECK-NEXT: ret void
955958;
956959entry:
@@ -972,18 +975,19 @@ exit: ; preds = %loop
972975; Offset is still guaranteed not to be poison, so the freeze can be moved
973976; here if we strip inbounds from the GEP.
974977define void @fold_phi_gep_inbounds_phi_offset (ptr %init , ptr %end , i64 noundef %n ) {
975- ; CHECK-LABEL: @fold_phi_gep_inbounds_phi_offset(
976- ; CHECK-NEXT: entry:
977- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT:%.*]]
978- ; CHECK-NEXT: br label [[LOOP:%.*]]
979- ; CHECK: loop:
980- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
981- ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N:%.*]], [[ENTRY]] ], [ [[OFF_NEXT:%.*]], [[LOOP]] ]
978+ ; CHECK-LABEL: define void @fold_phi_gep_inbounds_phi_offset(
979+ ; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 noundef [[N:%.*]]) {
980+ ; CHECK-NEXT: [[ENTRY:.*]]:
981+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
982+ ; CHECK-NEXT: br label %[[LOOP:.*]]
983+ ; CHECK: [[LOOP]]:
984+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
985+ ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
982986; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
983987; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
984- ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END:%.* ]]
985- ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:% .*]]
986- ; CHECK: exit :
988+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
989+ ; CHECK-NEXT: br i1 [[COND]], label % [[LOOP]], label % [[EXIT:.*]]
990+ ; CHECK: [[EXIT]] :
987991; CHECK-NEXT: ret void
988992;
989993entry:
@@ -1004,19 +1008,20 @@ exit: ; preds = %loop
10041008
10051009; Same as previous, but also requires freezing %n.
10061010define void @fold_phi_gep_phi_offset_multiple (ptr %init , ptr %end , i64 %n ) {
1007- ; CHECK-LABEL: @fold_phi_gep_phi_offset_multiple(
1008- ; CHECK-NEXT: entry:
1009- ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT:%.*]]
1010- ; CHECK-NEXT: [[TMP1:%.*]] = freeze i64 [[N:%.*]]
1011- ; CHECK-NEXT: br label [[LOOP:%.*]]
1012- ; CHECK: loop:
1013- ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1014- ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[TMP1]], [[ENTRY]] ], [ [[OFF_NEXT:%.*]], [[LOOP]] ]
1011+ ; CHECK-LABEL: define void @fold_phi_gep_phi_offset_multiple(
1012+ ; CHECK-SAME: ptr [[INIT:%.*]], ptr [[END:%.*]], i64 [[N:%.*]]) {
1013+ ; CHECK-NEXT: [[ENTRY:.*]]:
1014+ ; CHECK-NEXT: [[TMP0:%.*]] = freeze ptr [[INIT]]
1015+ ; CHECK-NEXT: [[TMP1:%.*]] = freeze i64 [[N]]
1016+ ; CHECK-NEXT: br label %[[LOOP:.*]]
1017+ ; CHECK: [[LOOP]]:
1018+ ; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[TMP0]], %[[ENTRY]] ], [ [[I_NEXT:%.*]], %[[LOOP]] ]
1019+ ; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[TMP1]], %[[ENTRY]] ], [ [[OFF_NEXT:%.*]], %[[LOOP]] ]
10151020; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
10161021; CHECK-NEXT: [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
1017- ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END:%.* ]]
1018- ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:% .*]]
1019- ; CHECK: exit :
1022+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END]]
1023+ ; CHECK-NEXT: br i1 [[COND]], label % [[LOOP]], label % [[EXIT:.*]]
1024+ ; CHECK: [[EXIT]] :
10201025; CHECK-NEXT: ret void
10211026;
10221027entry:
0 commit comments