LLVM: llvm::LoopInfoBase< BlockT, LoopT > Class Template Reference (original) (raw)
This class builds and contains all of the top-level loop structures in the specified function. More...
#include "[llvm/Support/GenericLoopInfo.h](GenericLoopInfo%5F8h%5Fsource.html)"
Public Types | |
---|---|
typedef std::vector< LoopT * >::const_iterator | iterator |
iterator/begin/end - The interface to the top-level loops in the current function. | |
typedef std::vector< LoopT * >::const_reverse_iterator | reverse_iterator |
Public Member Functions | |
---|---|
LoopInfoBase ()=default | |
~LoopInfoBase () | |
LoopInfoBase (LoopInfoBase &&Arg) | |
LoopInfoBase & | operator= (LoopInfoBase &&RHS) |
void | releaseMemory () |
template<typename... ArgsTy> | |
LoopT * | AllocateLoop (ArgsTy &&...Args) |
iterator | begin () const |
iterator | end () const |
reverse_iterator | rbegin () const |
reverse_iterator | rend () const |
bool | empty () const |
SmallVector< LoopT *, 4 > | getLoopsInPreorder () const |
Return all of the loops in the function in preorder across the loop nests, with siblings in forward program order. | |
SmallVector< LoopT *, 4 > | getLoopsInReverseSiblingPreorder () const |
Return all of the loops in the function in preorder across the loop nests, with siblings in reverse program order. | |
LoopT * | getLoopFor (const BlockT *BB) const |
Return the inner most loop that BB lives in. | |
const LoopT * | operator[] (const BlockT *BB) const |
Same as getLoopFor. | |
unsigned | getLoopDepth (const BlockT *BB) const |
Return the loop nesting level of the specified block. | |
bool | isLoopHeader (const BlockT *BB) const |
const std::vector< LoopT * > & | getTopLevelLoops () const |
Return the top-level loops. | |
std::vector< LoopT * > & | getTopLevelLoopsVector () |
Return the top-level loops. | |
LoopT * | removeLoop (iterator I) |
This removes the specified top-level loop from this loop info object. | |
void | changeLoopFor (BlockT *BB, LoopT *L) |
Change the top-level loop that contains BB to the specified loop. | |
void | changeTopLevelLoop (LoopT *OldLoop, LoopT *NewLoop) |
Replace the specified loop in the top-level loops list with the indicated loop. | |
void | addTopLevelLoop (LoopT *New) |
This adds the specified loop to the collection of top-level loops. | |
void | removeBlock (BlockT *BB) |
This method completely removes BB from all data structures, including all of the Loop objects it is nested in and our mapping from BasicBlocks to loops. | |
void | analyze (const DominatorTreeBase< BlockT, false > &DomTree) |
Create the loop forest using a stable algorithm. | |
void | print (raw_ostream &OS) const |
void | verify (const DominatorTreeBase< BlockT, false > &DomTree) const |
void | destroy (LoopT *L) |
Destroy a loop that has been removed from the LoopInfo nest. | |
template<class BlockT, class LoopT>
class llvm::LoopInfoBase< BlockT, LoopT >
This class builds and contains all of the top-level loop structures in the specified function.
Definition at line 526 of file GenericLoopInfo.h.
◆ iterator
template<class BlockT , class LoopT >
iterator/begin/end - The interface to the top-level loops in the current function.
Definition at line 578 of file GenericLoopInfo.h.
◆ reverse_iterator
template<class BlockT , class LoopT >
typedef std::vector<LoopT*>::const_reverse_iterator llvm::LoopInfoBase< BlockT, LoopT >::reverse_iterator
template<class BlockT , class LoopT >
◆ ~LoopInfoBase()
template<class BlockT , class LoopT >
◆ LoopInfoBase() [2/2]
template<class BlockT , class LoopT >
◆ addTopLevelLoop()
template<class BlockT , class LoopT >
This adds the specified loop to the collection of top-level loops.
Definition at line 663 of file GenericLoopInfo.h.
References assert().
Referenced by llvm::addClonedBlockToLoopInfo(), buildClonedLoops(), llvm::cloneLoop(), cloneLoopNest(), llvm::cloneLoopWithPreheader(), llvm::TileInfo::CreateTiledLoops(), llvm::VPRegionBlock::execute(), hoistLoopToNewParent(), llvm::PopulateLoopsDFS< BlockT, LoopT >::insertIntoLoop(), rebuildLoopAfterUnswitch(), and updateLoopInfo().
◆ AllocateLoop()
template<class BlockT , class LoopT >
template<typename... ArgsTy>
Definition at line 570 of file GenericLoopInfo.h.
References llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold, GrowthDelay >::Allocate().
Referenced by llvm::addClonedBlockToLoopInfo(), buildClonedLoops(), llvm::cloneLoop(), cloneLoopNest(), llvm::cloneLoopWithPreheader(), llvm::TileInfo::CreateTiledLoops(), llvm::VPRegionBlock::execute(), separateNestedLoop(), and updateLoopInfo().
◆ analyze()
Create the loop forest using a stable algorithm.
Analyze LoopInfo discovers loops during a postorder DominatorTree traversal interleaved with backward CFG traversals within each subloop (discoverAndMapSubloop).
The backward traversal skips inner subloops, so this part of the algorithm is linear in the number of CFG edges. Subloop and Block vectors are then populated during a single forward CFG traversal (PopulateLoopDFS).
During the two CFG traversals each block is seen three times: 1) Discovered and mapped by a reverse CFG traversal. 2) Visited during a forward DFS CFG traversal. 3) Reverse-inserted in the loop in postorder following forward DFS.
The Block vectors are inclusive, so step 3 requires loop-depth number of insertions per block.
Definition at line 577 of file GenericLoopInfoImpl.h.
References llvm::DominatorTreeBase< NodeT, IsPostDom >::dominates(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getNode(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getRootNode(), llvm::post_order(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::OptimizationRemarkEmitter::OptimizationRemarkEmitter(), llvm::LoopAnalysis::run(), and llvm::LoopInfoBase< BlockT, LoopT >::verify().
◆ begin()
template<class BlockT , class LoopT >
◆ changeLoopFor()
template<class BlockT , class LoopT >
◆ changeTopLevelLoop()
template<class BlockT , class LoopT >
void llvm::LoopInfoBase< BlockT, LoopT >::changeTopLevelLoop ( LoopT * OldLoop, LoopT * NewLoop ) | inline |
---|
◆ destroy()
template<class BlockT , class LoopT >
◆ empty()
template<class BlockT , class LoopT >
◆ end()
template<class BlockT , class LoopT >
◆ getLoopDepth()
template<class BlockT , class LoopT >
◆ getLoopFor()
template<class BlockT , class LoopT >
Return the inner most loop that BB lives in.
If a basic block is in no loop (for example the entry node), null is returned.
Definition at line 606 of file GenericLoopInfo.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup().
Referenced by llvm::addClonedBlockToLoopInfo(), llvm::IVUsers::AddUsersIfInteresting(), llvm::OpenMPIRBuilder::applySimd(), buildClonedLoops(), llvm::HexagonPacketizerList::calcStall(), llvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), checkDependencies(), llvm::cloneLoop(), cloneLoopBlocks(), cloneLoopNest(), llvm::cloneLoopWithPreheader(), collectUnswitchCandidates(), collectUnswitchCandidatesWithInjections(), computeHeuristicUnrollFactor(), ConnectProlog(), llvm::TileInfo::CreateTiledLoops(), llvm::DependenceInfo::depends(), despeculateCountZeros(), emitBasicBlockLoopComments(), llvm::SystemZPostRASchedStrategy::enterMBB(), llvm::VPRegionBlock::execute(), llvm::LoopVectorizationPlanner::executePlan(), llvm::MustBeExecutedContextExplorer::findBackwardJoinPoint(), llvm::MustBeExecutedContextExplorer::findForwardJoinPoint(), llvm::InnerLoopVectorizer::fixVectorizedLoop(), foldURemOfLoopIncrement(), formLCSSAForInstructionsImpl(), formLCSSAImpl(), llvm::WebAssembly::SortRegionInfo::getBottom(), getInnermostLoopFor(), getInsertPointForUses(), getIVIncrement(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopDepth(), llvm::PartialOrderingVisitor::GetNodeRank(), getOutermostLoop(), getReductionInstr(), llvm::WebAssembly::SortRegionInfo::getRegionFor(), llvm::DependenceInfo::getSplitIteration(), getTopMostExitingLoop(), hoistLoopToNewParent(), injectPendingInvariantConditions(), llvm::PopulateLoopsDFS< BlockT, LoopT >::insertIntoLoop(), inSubLoop(), IsAcceptableTarget(), llvm::ScalarEvolution::isBasicBlockEntryGuardedByCond(), llvm::HardwareLoopInfo::isHardwareLoopCandidate(), isIntegerLoopHeaderPHI(), isInteresting(), llvm::LoopInfoBase< BlockT, LoopT >::isLoopHeader(), llvm::isPotentiallyReachable(), llvm::Loop::isRecursivelyLCSSAForm(), isRemOfLoopIncrementWithLoopInvariant(), isSameUnderlyingObjectInLoop(), mergeBlocksIntoPredecessors(), moveLCSSAPhis(), needToInsertPhisForLCSSA(), llvm::LoopInfoBase< BlockT, LoopT >::operator, llvm::ScalarEvolution::print(), rebuildLoopAfterUnswitch(), recomputeLoopBlockSet(), llvm::rewriteLoopExitValues(), llvm::simplifyUsersOfIV(), sinkInstruction(), llvm::InnerLoopVectorizer::sinkScalarOperands(), sortBlocks(), llvm::SplitBlockAndInsertIfThenElse(), llvm::splitBlockBefore(), SplitBlockImpl(), SplitBlockPredecessorsImpl(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), unswitchNontrivialInvariants(), UpdateAnalysisInformation(), updateLoopInfo(), llvm::LoopBlocksTraversal::visitPreorder(), and llvm::VirtRegAuxInfo::weightCalcHelper().
◆ getLoopsInPreorder()
template<class BlockT , class LoopT >
◆ getLoopsInReverseSiblingPreorder()
template<class BlockT , class LoopT >
◆ getTopLevelLoops()
template<class BlockT , class LoopT >
◆ getTopLevelLoopsVector()
template<class BlockT , class LoopT >
std::vector< LoopT * > & llvm::LoopInfoBase< BlockT, LoopT >::getTopLevelLoopsVector ( ) | inline |
---|
◆ isLoopHeader()
template<class BlockT , class LoopT >
◆ isNotAlreadyContainedIn()
template<class BlockT , class LoopT >
◆ operator=()
template<class BlockT , class LoopT >
◆ operator[]()
template<class BlockT , class LoopT >
◆ print()
◆ rbegin()
template<class BlockT , class LoopT >
◆ releaseMemory()
template<class BlockT , class LoopT >
Definition at line 561 of file GenericLoopInfo.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::clear(), and llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold, GrowthDelay >::Reset().
Referenced by llvm::LoopInfoWrapperPass::releaseMemory(), llvm::MachineLoopInfoWrapperPass::releaseMemory(), and llvm::LoopInfoBase< BlockT, LoopT >::~LoopInfoBase().
◆ removeBlock()
template<class BlockT , class LoopT >
This method completely removes BB from all data structures, including all of the Loop objects it is nested in and our mapping from BasicBlocks to loops.
Definition at line 671 of file GenericLoopInfo.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::erase(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), and I.
Referenced by llvm::deleteDeadLoop(), llvm::MergeBlockIntoPredecessor(), and simplifyOneLoop().
◆ removeLoop()
template<class BlockT , class LoopT >
◆ rend()
template<class BlockT , class LoopT >
◆ verify()
Definition at line 718 of file GenericLoopInfoImpl.h.
References llvm::addInnerLoopsToHeadersMap(), llvm::LoopInfoBase< BlockT, LoopT >::analyze(), assert(), llvm::compareLoops(), llvm::dbgs(), E, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::erase(), I, llvm_unreachable, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), and Loops.
Referenced by FixIrreducibleImpl(), llvm::hoistRegion(), injectPendingInvariantConditions(), llvm::LoopVerifierPass::run(), llvm::FunctionToLoopPassAdaptor::run(), llvm::LoopBoundSplitPass::run(), turnGuardIntoBranch(), unifyLoopExits(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), unswitchNontrivialInvariants(), and llvm::LoopInfoWrapperPass::verifyAnalysis().
◆ LoopBase< BlockT, LoopT >
template<class BlockT , class LoopT >
◆ LoopInfo
template<class BlockT , class LoopT >
The documentation for this class was generated from the following files:
- include/llvm/Support/GenericLoopInfo.h
- include/llvm/Support/GenericLoopInfoImpl.h