Changeset View
Changeset View
Standalone View
Standalone View
llvm/include/llvm/Analysis/LoopInfoImpl.h
Show First 20 Lines • Show All 531 Lines • ▼ Show 20 Lines | |||||
/// 3) Reverse-inserted in the loop in postorder following forward DFS. | /// 3) Reverse-inserted in the loop in postorder following forward DFS. | ||||
/// | /// | ||||
/// The Block vectors are inclusive, so step 3 requires loop-depth number of | /// The Block vectors are inclusive, so step 3 requires loop-depth number of | ||||
/// insertions per block. | /// insertions per block. | ||||
template <class BlockT, class LoopT> | template <class BlockT, class LoopT> | ||||
void LoopInfoBase<BlockT, LoopT>::analyze(const DomTreeBase<BlockT> &DomTree) { | void LoopInfoBase<BlockT, LoopT>::analyze(const DomTreeBase<BlockT> &DomTree) { | ||||
// Postorder traversal of the dominator tree. | // Postorder traversal of the dominator tree. | ||||
const DomTreeNodeBase<BlockT> *DomRoot = DomTree.getRootNode(); | const DomTreeNodeBase<BlockT> *DomRoot = DomTree.getRootNode(); | ||||
if (!DomRoot) | |||||
return; | |||||
for (auto DomNode : post_order(DomRoot)) { | for (auto DomNode : post_order(DomRoot)) { | ||||
BlockT *Header = DomNode->getBlock(); | BlockT *Header = DomNode->getBlock(); | ||||
SmallVector<BlockT *, 4> Backedges; | SmallVector<BlockT *, 4> Backedges; | ||||
// Check each predecessor of the potential loop header. | // Check each predecessor of the potential loop header. | ||||
for (const auto Backedge : children<Inverse<BlockT *>>(Header)) { | for (const auto Backedge : children<Inverse<BlockT *>>(Header)) { | ||||
// If Header dominates predBB, this is a new loop. Collect the backedges. | // If Header dominates predBB, this is a new loop. Collect the backedges. | ||||
▲ Show 20 Lines • Show All 189 Lines • Show Last 20 Lines |