diff options
| author | Alina Sbirlea <asbirlea@google.com> | 2017-09-15 00:04:16 +0000 |
|---|---|---|
| committer | Alina Sbirlea <asbirlea@google.com> | 2017-09-15 00:04:16 +0000 |
| commit | 7ed5856a3226f19f47d39a16ff17a5a0a4448020 (patch) | |
| tree | abacaf240c9a0fd1a20625acacff1cdb602347e2 /llvm | |
| parent | f716931bb27aebb67a0a1b79e84bf4c11d951694 (diff) | |
| download | bcm5719-llvm-7ed5856a3226f19f47d39a16ff17a5a0a4448020.tar.gz bcm5719-llvm-7ed5856a3226f19f47d39a16ff17a5a0a4448020.zip | |
Refactor collectChildrenInLoop to LoopUtils [NFC]
Summary: Move to LoopUtils method that collects all children of a node inside a loop.
Reviewers: majnemer, sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D37870
llvm-svn: 313322
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Transforms/Utils/LoopUtils.h | 5 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LICM.cpp | 23 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 21 |
3 files changed, 26 insertions, 23 deletions
diff --git a/llvm/include/llvm/Transforms/Utils/LoopUtils.h b/llvm/include/llvm/Transforms/Utils/LoopUtils.h index cabd5655589..75b32902f30 100644 --- a/llvm/include/llvm/Transforms/Utils/LoopUtils.h +++ b/llvm/include/llvm/Transforms/Utils/LoopUtils.h @@ -455,6 +455,11 @@ bool promoteLoopAccessesToScalars(const SmallSetVector<Value *, 8> &, Loop *, AliasSetTracker *, LoopSafetyInfo *, OptimizationRemarkEmitter *); +/// Does a BFS from a given node to all of its children inside a given loop. +/// The returned vector of nodes includes the starting point. +SmallVector<DomTreeNode *, 16> collectChildrenInLoop(DomTreeNode *N, + const Loop *CurLoop); + /// \brief Computes safety information for a loop /// checks loop body & header for the possibility of may throw /// exception, it takes LoopSafetyInfo and loop as argument. diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index 0241ec8c70c..f45d362e077 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -345,29 +345,6 @@ bool LoopInvariantCodeMotion::runOnLoop(Loop *L, AliasAnalysis *AA, return Changed; } -// Does a BFS from a given node to all of its children inside a given loop. -// The returned vector of nodes includes the starting point. -static SmallVector<DomTreeNode *, 16> -collectChildrenInLoop(DomTreeNode *N, const Loop *CurLoop) { - SmallVector<DomTreeNode *, 16> Worklist; - auto add_region_to_worklist = [&](DomTreeNode *DTN) { - // Only include subregions in the top level loop. - BasicBlock *BB = DTN->getBlock(); - if (CurLoop->contains(BB)) - Worklist.push_back(DTN); - }; - - add_region_to_worklist(N); - - for (size_t I = 0; I < Worklist.size(); I++) { - DomTreeNode *DTN = Worklist[I]; - for (DomTreeNode *Child : DTN->getChildren()) - add_region_to_worklist(Child); - } - - return Worklist; -} - /// Walk the specified region of the CFG (defined by all blocks dominated by /// the specified block, and that are in the current loop) in reverse depth /// first order w.r.t the DominatorTree. This allows us to visit uses before diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index f2015c6389b..bd89b6b2630 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -1116,6 +1116,27 @@ Optional<const MDOperand *> llvm::findStringMetadataForLoop(Loop *TheLoop, return None; } +/// Does a BFS from a given node to all of its children inside a given loop. +/// The returned vector of nodes includes the starting point. +SmallVector<DomTreeNode *, 16> +llvm::collectChildrenInLoop(DomTreeNode *N, const Loop *CurLoop) { + SmallVector<DomTreeNode *, 16> Worklist; + auto AddRegionToWorklist = [&](DomTreeNode *DTN) { + // Only include subregions in the top level loop. + BasicBlock *BB = DTN->getBlock(); + if (CurLoop->contains(BB)) + Worklist.push_back(DTN); + }; + + AddRegionToWorklist(N); + + for (size_t I = 0; I < Worklist.size(); I++) + for (DomTreeNode *Child : Worklist[I]->getChildren()) + AddRegionToWorklist(Child); + + return Worklist; +} + /// Returns true if the instruction in a loop is guaranteed to execute at least /// once. bool llvm::isGuaranteedToExecute(const Instruction &Inst, |

