@@ -273,4 +273,53 @@ define void @complicated_args_byval() {
273
273
ret void
274
274
}
275
275
276
+ define void @fixpoint_changed (i32* %p ) {
277
+ ; CHECK-LABEL: define {{[^@]+}}@fixpoint_changed
278
+ ; CHECK-SAME: (i32* nocapture nofree writeonly [[P:%.*]])
279
+ ; CHECK-NEXT: entry:
280
+ ; CHECK-NEXT: br label [[FOR_COND:%.*]]
281
+ ; CHECK: for.cond:
282
+ ; CHECK-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ]
283
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30
284
+ ; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
285
+ ; CHECK: for.body:
286
+ ; CHECK-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [
287
+ ; CHECK-NEXT: i32 1, label [[SW_BB:%.*]]
288
+ ; CHECK-NEXT: ]
289
+ ; CHECK: sw.bb:
290
+ ; CHECK-NEXT: br label [[SW_EPILOG]]
291
+ ; CHECK: sw.epilog:
292
+ ; CHECK-NEXT: [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ]
293
+ ; CHECK-NEXT: store i32 [[X_0]], i32* [[P]]
294
+ ; CHECK-NEXT: [[INC]] = add nsw i32 [[J_0]], 1
295
+ ; CHECK-NEXT: br label [[FOR_COND]]
296
+ ; CHECK: for.end:
297
+ ; CHECK-NEXT: ret void
298
+ ;
299
+ entry:
300
+ br label %for.cond
301
+
302
+ for.cond:
303
+ %j.0 = phi i32 [ 0 , %entry ], [ %inc , %sw.epilog ]
304
+ %cmp = icmp slt i32 %j.0 , 30
305
+ br i1 %cmp , label %for.body , label %for.end
306
+
307
+ for.body:
308
+ switch i32 %j.0 , label %sw.epilog [
309
+ i32 1 , label %sw.bb
310
+ ]
311
+
312
+ sw.bb:
313
+ br label %sw.epilog
314
+
315
+ sw.epilog:
316
+ %x.0 = phi i32 [ 255 , %for.body ], [ 253 , %sw.bb ]
317
+ store i32 %x.0 , i32* %p
318
+ %inc = add nsw i32 %j.0 , 1
319
+ br label %for.cond
320
+
321
+ for.end:
322
+ ret void
323
+ }
324
+
276
325
; UTC_ARGS: --turn off
0 commit comments