mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
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
This commit is contained in:
parent
98d7dfcbb9
commit
bf65988660
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user