diff options
author | Florian Hahn <flo@fhahn.com> | 2023-02-27 20:38:39 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2023-02-27 20:38:39 +0100 |
commit | 2f3c748c45ff7f9022ffa88d5a06a856a1b15ace (patch) | |
tree | 9c6c762dd4a50109aad8b64a02d7c29ae24be319 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 31d6a572579a5d1d9ae14a1a9d4ffbdb1b098e49 (diff) | |
download | llvm-2f3c748c45ff7f9022ffa88d5a06a856a1b15ace.zip llvm-2f3c748c45ff7f9022ffa88d5a06a856a1b15ace.tar.gz llvm-2f3c748c45ff7f9022ffa88d5a06a856a1b15ace.tar.bz2 |
[SCEV] Hoist common cleanup code to function. (NFC)
This allows for easier updating of common code in follow-on patches.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D144847
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 49 |
1 files changed, 21 insertions, 28 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index a820879..f997b19 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -8415,6 +8415,25 @@ void ScalarEvolution::forgetAllLoops() { FoldCache.clear(); FoldCacheUser.clear(); } +void ScalarEvolution::visitAndClearUsers( + SmallVectorImpl<Instruction *> &Worklist, + SmallPtrSetImpl<Instruction *> &Visited, + SmallVectorImpl<const SCEV *> &ToForget) { + while (!Worklist.empty()) { + Instruction *I = Worklist.pop_back_val(); + + ValueExprMapType::iterator It = + ValueExprMap.find_as(static_cast<Value *>(I)); + if (It != ValueExprMap.end()) { + eraseValueFromMap(It->first); + ToForget.push_back(It->second); + if (PHINode *PN = dyn_cast<PHINode>(I)) + ConstantEvolutionLoopExitValue.erase(PN); + } + + PushDefUseChildren(I, Worklist, Visited); + } +} void ScalarEvolution::forgetLoop(const Loop *L) { SmallVector<const Loop *, 16> LoopWorklist(1, L); @@ -8448,21 +8467,7 @@ void ScalarEvolution::forgetLoop(const Loop *L) { // Drop information about expressions based on loop-header PHIs. PushLoopPHIs(CurrL, Worklist, Visited); - - while (!Worklist.empty()) { - Instruction *I = Worklist.pop_back_val(); - - ValueExprMapType::iterator It = - ValueExprMap.find_as(static_cast<Value *>(I)); - if (It != ValueExprMap.end()) { - eraseValueFromMap(It->first); - ToForget.push_back(It->second); - if (PHINode *PN = dyn_cast<PHINode>(I)) - ConstantEvolutionLoopExitValue.erase(PN); - } - - PushDefUseChildren(I, Worklist, Visited); - } + visitAndClearUsers(Worklist, Visited, ToForget); LoopPropertiesCache.erase(CurrL); // Forget all contained loops too, to avoid dangling entries in the @@ -8486,20 +8491,8 @@ void ScalarEvolution::forgetValue(Value *V) { SmallVector<const SCEV *, 8> ToForget; Worklist.push_back(I); Visited.insert(I); + visitAndClearUsers(Worklist, Visited, ToForget); - while (!Worklist.empty()) { - I = Worklist.pop_back_val(); - ValueExprMapType::iterator It = - ValueExprMap.find_as(static_cast<Value *>(I)); - if (It != ValueExprMap.end()) { - eraseValueFromMap(It->first); - ToForget.push_back(It->second); - if (PHINode *PN = dyn_cast<PHINode>(I)) - ConstantEvolutionLoopExitValue.erase(PN); - } - - PushDefUseChildren(I, Worklist, Visited); - } forgetMemoizedResults(ToForget); } |