mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
[Attributor][FIX] Do not return CHANGED unconditionally
This caused us to rerun AAMemoryBehaviorFloating::updateImpl over and over again. Unfortunately it turned out to be hard to reproduce the behavior in a reasonable way.
This commit is contained in:
parent
04130ef1fa
commit
d40841959b
@ -7097,6 +7097,9 @@ ChangeStatus AAMemoryBehaviorFloating::updateImpl(Attributor &A) {
|
||||
return ChangeStatus::UNCHANGED;
|
||||
}
|
||||
|
||||
// The current assumed state used to determine a change.
|
||||
auto AssumedState = S.getAssumed();
|
||||
|
||||
// Make sure the value is not captured (except through "return"), if
|
||||
// it is, any information derived would be irrelevant anyway as we cannot
|
||||
// check the potential aliases introduced by the capture. However, no need
|
||||
@ -7105,12 +7108,10 @@ ChangeStatus AAMemoryBehaviorFloating::updateImpl(Attributor &A) {
|
||||
A.getAAFor<AANoCapture>(*this, IRP, DepClassTy::OPTIONAL);
|
||||
if (!ArgNoCaptureAA.isAssumedNoCaptureMaybeReturned()) {
|
||||
S.intersectAssumedBits(FnMemAssumedState);
|
||||
return ChangeStatus::CHANGED;
|
||||
return (AssumedState != getAssumed()) ? ChangeStatus::CHANGED
|
||||
: ChangeStatus::UNCHANGED;
|
||||
}
|
||||
|
||||
// The current assumed state used to determine a change.
|
||||
auto AssumedState = S.getAssumed();
|
||||
|
||||
// Visit and expand uses until all are analyzed or a fixpoint is reached.
|
||||
auto UsePred = [&](const Use &U, bool &Follow) -> bool {
|
||||
Instruction *UserI = cast<Instruction>(U.getUser());
|
||||
|
Loading…
Reference in New Issue
Block a user