Skip to content

Commit

Permalink
[SCEV] Fully invalidate SCEVUnknown on RAUW
Browse files Browse the repository at this point in the history
When a SCEVUnknown gets RAUWd, we currently drop it from the folding
set, but don't forget memoized values. I believe we should be
treating RAUW the same way as deletion here and invalidate all
caches and dependent expressions.

I don't have any specific cases where this causes issues right now,
but it does address the FIXME in https://reviews.llvm.org/D119488.

Differential Revision: https://reviews.llvm.org/D120033
  • Loading branch information
nikic committed Mar 7, 2022
1 parent 7b969b0 commit 8133778
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions llvm/lib/Analysis/ScalarEvolution.cpp
Expand Up @@ -526,12 +526,13 @@ void SCEVUnknown::deleted() {
}

void SCEVUnknown::allUsesReplacedWith(Value *New) {
// Clear this SCEVUnknown from various maps.
SE->forgetMemoizedResults(this);

// Remove this SCEVUnknown from the uniquing map.
SE->UniqueSCEVs.RemoveNode(this);

// Update this SCEVUnknown to point to the new value. This is needed
// because there may still be outstanding SCEVs which still point to
// this SCEVUnknown.
// Replace the value pointer in case someone is still using this SCEVUnknown.
setValPtr(New);
}

Expand Down

0 comments on commit 8133778

Please sign in to comment.