diff options
| author | Serguei Katkov <serguei.katkov@azul.com> | 2018-02-26 09:26:41 +0000 |
|---|---|---|
| committer | Serguei Katkov <serguei.katkov@azul.com> | 2018-02-26 09:26:41 +0000 |
| commit | c2f74638ac9487d1cdda25146de2a2900790d531 (patch) | |
| tree | 2652b2698cfa1fe7fa190064c7332dfabb5e5738 /llvm/lib/Analysis | |
| parent | a95d2aee7d9f4951f32ee28aea555348186aa0c0 (diff) | |
| download | bcm5719-llvm-c2f74638ac9487d1cdda25146de2a2900790d531.tar.gz bcm5719-llvm-c2f74638ac9487d1cdda25146de2a2900790d531.zip | |
[SCEV] Factor out getUsedLoops
The patch introduces the new function in ScalarEvolution to get
all loops used in specified SCEV.
This is a preparation for re-writing isKnownPredicate utility as
described in https://reviews.llvm.org/D42417.
Reviewers: sanjoy, mkazantsev, reames
Reviewed By: sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D43504
llvm-svn: 326072
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index af1b9ad3037..e75a29bd0a3 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -11341,9 +11341,13 @@ ScalarEvolution::forgetMemoizedResults(const SCEV *S) { RemoveSCEVFromBackedgeMap(PredicatedBackedgeTakenCounts); } -void ScalarEvolution::addToLoopUseLists(const SCEV *S) { +void +ScalarEvolution::getUsedLoops(const SCEV *S, + SmallPtrSetImpl<const Loop *> &LoopsUsed) { struct FindUsedLoops { - SmallPtrSet<const Loop *, 8> LoopsUsed; + FindUsedLoops(SmallPtrSetImpl<const Loop *> &LoopsUsed) + : LoopsUsed(LoopsUsed) {} + SmallPtrSetImpl<const Loop *> &LoopsUsed; bool follow(const SCEV *S) { if (auto *AR = dyn_cast<SCEVAddRecExpr>(S)) LoopsUsed.insert(AR->getLoop()); @@ -11353,10 +11357,14 @@ void ScalarEvolution::addToLoopUseLists(const SCEV *S) { bool isDone() const { return false; } }; - FindUsedLoops F; + FindUsedLoops F(LoopsUsed); SCEVTraversal<FindUsedLoops>(F).visitAll(S); +} - for (auto *L : F.LoopsUsed) +void ScalarEvolution::addToLoopUseLists(const SCEV *S) { + SmallPtrSet<const Loop *, 8> LoopsUsed; + getUsedLoops(S, LoopsUsed); + for (auto *L : LoopsUsed) LoopUsers[L].push_back(S); } |

