Skip to content

Commit a4b3588

Browse files
committed
[Attributor][FIX] Return CHANGED once a pessimistic fixpoint is reached.
1 parent b4b904e commit a4b3588

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

llvm/lib/Transforms/IPO/Attributor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4275,7 +4275,8 @@ struct AAValueSimplifyImpl : AAValueSimplify {
42754275
// NOTE: Associated value will be returned in a pessimistic fixpoint and is
42764276
// regarded as known. That's why`indicateOptimisticFixpoint` is called.
42774277
SimplifiedAssociatedValue = &getAssociatedValue();
4278-
return indicateOptimisticFixpoint();
4278+
indicateOptimisticFixpoint();
4279+
return ChangeStatus::CHANGED;
42794280
}
42804281

42814282
protected:

llvm/test/Transforms/Attributor/value-simplify.ll

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,53 @@ define void @complicated_args_byval() {
273273
ret void
274274
}
275275

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+
276325
; UTC_ARGS: --turn off

0 commit comments

Comments
 (0)