LLVM  9.0.0svn
Public Types | Public Member Functions | Protected Member Functions | Friends | List of all members
llvm::LoopBase< BlockT, LoopT > Class Template Reference

Instances of this class are used to represent loops that are detected in the flow graph. More...

#include "llvm/Analysis/LoopInfo.h"

Inheritance diagram for llvm::LoopBase< BlockT, LoopT >:
Inheritance graph
[legend]

Public Types

typedef std::vector< LoopT * >::const_iterator iterator
 
typedef std::vector< LoopT * >::const_reverse_iterator reverse_iterator
 
typedef ArrayRef< BlockT * >::const_iterator block_iterator
 
typedef std::pair< const BlockT *, const BlockT * > Edge
 Edge type. More...
 

Public Member Functions

unsigned getLoopDepth () const
 Return the nesting level of this loop. More...
 
BlockT * getHeader () const
 
LoopT * getParentLoop () const
 
void setParentLoop (LoopT *L)
 This is a raw interface for bypassing addChildLoop. More...
 
bool contains (const LoopT *L) const
 Return true if the specified loop is contained within in this loop. More...
 
bool contains (const BlockT *BB) const
 Return true if the specified basic block is in this loop. More...
 
template<class InstT >
bool contains (const InstT *Inst) const
 Return true if the specified instruction is in this loop. More...
 
const std::vector< LoopT * > & getSubLoops () const
 Return the loops contained entirely within this loop. More...
 
std::vector< LoopT * > & getSubLoopsVector ()
 
iterator begin () const
 
iterator end () const
 
reverse_iterator rbegin () const
 
reverse_iterator rend () const
 
bool empty () const
 
ArrayRef< BlockT * > getBlocks () const
 Get a list of the basic blocks which make up this loop. More...
 
block_iterator block_begin () const
 
block_iterator block_end () const
 
iterator_range< block_iteratorblocks () const
 
unsigned getNumBlocks () const
 Get the number of blocks in this loop in constant time. More...
 
std::vector< BlockT * > & getBlocksVector ()
 Return a direct, mutable handle to the blocks vector so that we can mutate it efficiently with techniques like std::remove. More...
 
SmallPtrSetImpl< const BlockT * > & getBlocksSet ()
 Return a direct, mutable handle to the blocks set so that we can mutate it efficiently. More...
 
const SmallPtrSetImpl< const BlockT * > & getBlocksSet () const
 Return a direct, immutable handle to the blocks set. More...
 
bool isInvalid () const
 Return true if this loop is no longer valid. More...
 
bool isLoopExiting (const BlockT *BB) const
 True if terminator in the block can branch to another block that is outside of the current loop. More...
 
bool isLoopLatch (const BlockT *BB) const
 
unsigned getNumBackEdges () const
 Calculate the number of back edges to the loop header. More...
 
void getExitingBlocks (SmallVectorImpl< BlockT *> &ExitingBlocks) const
 Return all blocks inside the loop that have successors outside of the loop. More...
 
BlockT * getExitingBlock () const
 If getExitingBlocks would return exactly one block, return that block. More...
 
void getExitBlocks (SmallVectorImpl< BlockT *> &ExitBlocks) const
 Return all of the successor blocks of this loop. More...
 
BlockT * getExitBlock () const
 If getExitBlocks would return exactly one block, return that block. More...
 
bool hasDedicatedExits () const
 Return true if no exit block for the loop has a predecessor that is outside the loop. More...
 
void getUniqueExitBlocks (SmallVectorImpl< BlockT *> &ExitBlocks) const
 Return all unique successor blocks of this loop. More...
 
BlockT * getUniqueExitBlock () const
 If getUniqueExitBlocks would return exactly one block, return that block. More...
 
void getExitEdges (SmallVectorImpl< Edge > &ExitEdges) const
 Return all pairs of (inside_block,outside_block). More...
 
BlockT * getLoopPreheader () const
 If there is a preheader for this loop, return it. More...
 
BlockT * getLoopPredecessor () const
 If the given loop's header has exactly one unique predecessor outside the loop, return it. More...
 
BlockT * getLoopLatch () const
 If there is a single latch block for this loop, return it. More...
 
void getLoopLatches (SmallVectorImpl< BlockT *> &LoopLatches) const
 Return all loop latch blocks of this loop. More...
 
void addBasicBlockToLoop (BlockT *NewBB, LoopInfoBase< BlockT, LoopT > &LI)
 This method is used by other analyses to update loop information. More...
 
void replaceChildLoopWith (LoopT *OldChild, LoopT *NewChild)
 This is used when splitting loops up. More...
 
void addChildLoop (LoopT *NewChild)
 Add the specified loop to be a child of this loop. More...
 
LoopT * removeChildLoop (iterator I)
 This removes the specified child from being a subloop of this loop. More...
 
LoopT * removeChildLoop (LoopT *Child)
 This removes the specified child from being a subloop of this loop. More...
 
void addBlockEntry (BlockT *BB)
 This adds a basic block directly to the basic block list. More...
 
void reverseBlock (unsigned from)
 interface to reverse Blocks[from, end of loop] in this loop More...
 
void reserveBlocks (unsigned size)
 interface to do reserve() for Blocks More...
 
void moveToHeader (BlockT *BB)
 This method is used to move BB (which must be part of this loop) to be the loop header of the loop (the block that dominates all others). More...
 
void removeBlockFromLoop (BlockT *BB)
 This removes the specified basic block from the current loop, updating the Blocks as appropriate. More...
 
void verifyLoop () const
 Verify loop structure. More...
 
void verifyLoopNest (DenseSet< const LoopT *> *Loops) const
 Verify loop structure of this loop and all nested loops. More...
 
bool isAnnotatedParallel () const
 Returns true if the loop is annotated parallel. More...
 
void print (raw_ostream &OS, unsigned Depth=0, bool Verbose=false) const
 Print loop with all the BBs inside it. More...
 

Protected Member Functions

 LoopBase ()
 This creates an empty loop. More...
 
 LoopBase (BlockT *BB)
 
 ~LoopBase ()
 

Friends

class LoopInfoBase< BlockT, LoopT >
 

Detailed Description

template<class BlockT, class LoopT>
class llvm::LoopBase< BlockT, LoopT >

Instances of this class are used to represent loops that are detected in the flow graph.

Definition at line 65 of file LoopInfo.h.

Member Typedef Documentation

◆ block_iterator

template<class BlockT, class LoopT>
typedef ArrayRef<BlockT *>::const_iterator llvm::LoopBase< BlockT, LoopT >::block_iterator

Definition at line 155 of file LoopInfo.h.

◆ Edge

template<class BlockT, class LoopT>
typedef std::pair<const BlockT *, const BlockT *> llvm::LoopBase< BlockT, LoopT >::Edge

Edge type.

Definition at line 281 of file LoopInfo.h.

◆ iterator

template<class BlockT, class LoopT>
typedef std::vector<LoopT *>::const_iterator llvm::LoopBase< BlockT, LoopT >::iterator

Definition at line 141 of file LoopInfo.h.

◆ reverse_iterator

template<class BlockT, class LoopT>
typedef std::vector<LoopT *>::const_reverse_iterator llvm::LoopBase< BlockT, LoopT >::reverse_iterator

Definition at line 143 of file LoopInfo.h.

Constructor & Destructor Documentation

◆ LoopBase() [1/2]

template<class BlockT, class LoopT>
llvm::LoopBase< BlockT, LoopT >::LoopBase ( )
inlineprotected

This creates an empty loop.

Definition at line 426 of file LoopInfo.h.

◆ LoopBase() [2/2]

template<class BlockT, class LoopT>
llvm::LoopBase< BlockT, LoopT >::LoopBase ( BlockT *  BB)
inlineexplicitprotected

Definition at line 428 of file LoopInfo.h.

◆ ~LoopBase()

template<class BlockT, class LoopT>
llvm::LoopBase< BlockT, LoopT >::~LoopBase ( )
inlineprotected

Definition at line 442 of file LoopInfo.h.

Member Function Documentation

◆ addBasicBlockToLoop()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::addBasicBlockToLoop ( BlockT *  NewBB,
LoopInfoBase< BlockT, LoopT > &  LIB 
)

This method is used by other analyses to update loop information.

addBasicBlockToLoop - This method is used by other analyses to update loop information.

NewBB is set to be a new member of the current loop. Because of this, it is added as a member of all parent loops, and is added to the specified LoopInfo object as being in the current basic block. It is not valid to replace the loop header with this method.

Definition at line 250 of file LoopInfoImpl.h.

Referenced by llvm::addClonedBlockToLoopInfo(), buildClonedLoops(), CloneLoop(), cloneLoopBlocks(), llvm::cloneLoopWithPreheader(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), llvm::InnerLoopVectorizer::emitMemRuntimeChecks(), llvm::InnerLoopVectorizer::emitMinimumIterationCountCheck(), llvm::InnerLoopVectorizer::emitSCEVChecks(), llvm::VPBasicBlock::execute(), llvm::VPlan::execute(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), insertUniqueBackedgeBlock(), mayLoopAccessLocation(), llvm::sinkRegion(), turnGuardIntoBranch(), llvm::UnrollAndJamLoop(), and UpdateAnalysisInformation().

◆ addBlockEntry()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::addBlockEntry ( BlockT *  BB)
inline

This adds a basic block directly to the basic block list.

This should only be used by transformations that create new loops. Other transformations should use addBasicBlockToLoop.

Definition at line 361 of file LoopInfo.h.

Referenced by LoopFuser::fuseLoops(), isProfitableForVectorization(), and separateNestedLoop().

◆ addChildLoop()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::addChildLoop ( LoopT *  NewChild)
inline

◆ begin()

template<class BlockT, class LoopT>
iterator llvm::LoopBase< BlockT, LoopT >::begin ( ) const
inline

◆ block_begin()

template<class BlockT, class LoopT>
block_iterator llvm::LoopBase< BlockT, LoopT >::block_begin ( ) const
inline

◆ block_end()

template<class BlockT, class LoopT>
block_iterator llvm::LoopBase< BlockT, LoopT >::block_end ( ) const
inline

◆ blocks()

template<class BlockT, class LoopT>
iterator_range<block_iterator> llvm::LoopBase< BlockT, LoopT >::blocks ( ) const
inline

◆ contains() [1/3]

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::contains ( const LoopT *  L) const
inline

Return true if the specified loop is contained within in this loop.

Definition at line 112 of file LoopInfo.h.

Referenced by llvm::DivergenceAnalysis::addUniformOverride(), llvm::LoopSafetyInfo::allLoopPathsLeadToBlock(), allPhiOperandsUndefined(), analyzeLoopUnrollCost(), llvm::PredicatedScalarEvolution::areAddRecsEqualWithPreds(), llvm::LoopAccessInfo::blockNeedsPredication(), buildClonedLoops(), BuildConstantFromSCEV(), calculateUnswitchCostMultiplier(), canConstantEvolve(), canFoldIVIncExpr(), CanProveNotTakenFirstIteration(), llvm::canSinkOrHoistInst(), cloneLoopBlocks(), collectCastsToIgnore(), llvm::collectChildrenInLoop(), llvm::CodeMetrics::collectEphemeralValues(), collectTransitivePredecessors(), computeBlocksDominatingExits(), llvm::DivergencePropagator::computeJoinPoints(), computeUnlikelySuccessors(), ConnectEpilog(), ConnectProlog(), llvm::LoopBase< BasicBlock, Loop >::contains(), ConvertToSInt(), llvm::VPRecipeBuilder::createBlockInMask(), llvm::deleteDeadLoop(), llvm::ICFLoopSafetyInfo::doesNotWriteMemoryBefore(), llvm::Loop::dumpVerbose(), expandBounds(), llvm::findDefsUsedOutsideOfLoop(), findPHIToPartitionLoops(), llvm::InnerLoopVectorizer::fixupIVUsers(), llvm::ScalarEvolution::forgetValue(), llvm::formDedicatedExitBlocks(), LoopFuser::fuseLoops(), genLoopLimit(), llvm::ScalarEvolution::getAddRecExpr(), getInnermostLoopFor(), getLayoutSuccessorProbThreshold(), llvm::ScalarEvolution::getLoopDisposition(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), getSetupCost(), getSingleSchedPred(), llvm::hasOutsideLoopUser(), hasUsesOutsideLoop(), hoistLoopToNewParent(), llvm::DivergenceAnalysis::inRegion(), llvm::InsertPreheaderForLoop(), inSubLoop(), IsAvailableOnEntry(), isBlockInLCSSAForm(), isCopyFeedingInvariantStore(), isExitingLoop(), llvm::RecurrenceDescriptor::isFirstOrderRecurrence(), llvm::InductionDescriptor::isFPInductionPHI(), isFreeInLoop(), llvm::PPCTTIImpl::isHardwareLoopProfitable(), IsIncrementNUW(), isInteresting(), llvm::LoopBase< BasicBlock, Loop >::isLoopExiting(), llvm::LoopBase< BasicBlock, Loop >::isLoopLatch(), isNotUsedOrFreeInLoop(), isSafeToExecuteUnconditionally(), llvm::isSafeToUnrollAndJam(), isSupportedGuardInstruction(), isTrivialLoopExitBlockHelper(), llvm::isUniformLoop(), IVUseShouldUsePostIncValue(), llvm::SyncDependenceAnalysis::join_blocks(), llvm::LPPassManager::markLoopAsDeleted(), llvm::LPMUpdater::markLoopAsDeleted(), mayUsePostIncMode(), llvm::LoopInfo::movementPreservesLCSSAForm(), llvm::InnerLoopVectorizer::needsScalarInduction(), needToInsertPhisForLCSSA(), llvm::LoopBodyTraits::LoopBodyFilter::operator()(), llvm::slpvectorizer::BoUpSLP::optimizeGatherSequence(), partitionOuterLoopBlocks(), llvm::peelLoop(), PickMostRelevantLoop(), placeSplitBlockCarefully(), pointerInvalidatedByLoopWithMSSA(), llvm::promoteLoopAccessesToScalars(), pushIVUsers(), PushLoopPHIs(), rebuildLoopAfterUnswitch(), recomputeLoopBlockSet(), removeBlockFromLoops(), replaceLoopInvariantUses(), llvm::LoopInfo::replacementPreservesLCSSAForm(), ReplaceUsesOfWith(), llvm::GuardWideningPass::run(), separateNestedLoop(), shouldRotateLoopExitingLatch(), simplifyLoopInst(), simplifyOneLoop(), sink(), sinkInstruction(), llvm::sinkRegion(), splitPredecessorsOfLoopExit(), truncateIVUse(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), unswitchAllTrivialConditions(), unswitchNontrivialInvariants(), unswitchTrivialBranch(), unswitchTrivialSwitch(), UpdateAnalysisInformation(), llvm::LoopVersioning::versionLoop(), llvm::LoopBlocksTraversal::visitPreorder(), llvm::DivergencePropagator::visitSuccessor(), and willNotOverflow().

◆ contains() [2/3]

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::contains ( const BlockT *  BB) const
inline

Return true if the specified basic block is in this loop.

Definition at line 122 of file LoopInfo.h.

◆ contains() [3/3]

template<class BlockT, class LoopT>
template<class InstT >
bool llvm::LoopBase< BlockT, LoopT >::contains ( const InstT *  Inst) const
inline

Return true if the specified instruction is in this loop.

Definition at line 128 of file LoopInfo.h.

◆ empty()

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::empty ( ) const
inline

◆ end()

template<class BlockT, class LoopT>
iterator llvm::LoopBase< BlockT, LoopT >::end ( ) const
inline

◆ getBlocks()

template<class BlockT, class LoopT>
ArrayRef<BlockT *> llvm::LoopBase< BlockT, LoopT >::getBlocks ( ) const
inline

◆ getBlocksSet() [1/2]

template<class BlockT, class LoopT>
SmallPtrSetImpl<const BlockT *>& llvm::LoopBase< BlockT, LoopT >::getBlocksSet ( )
inline

Return a direct, mutable handle to the blocks set so that we can mutate it efficiently.

Definition at line 178 of file LoopInfo.h.

Referenced by rebuildLoopAfterUnswitch().

◆ getBlocksSet() [2/2]

template<class BlockT, class LoopT>
const SmallPtrSetImpl<const BlockT *>& llvm::LoopBase< BlockT, LoopT >::getBlocksSet ( ) const
inline

Return a direct, immutable handle to the blocks set.

Definition at line 184 of file LoopInfo.h.

◆ getBlocksVector()

template<class BlockT, class LoopT>
std::vector<BlockT *>& llvm::LoopBase< BlockT, LoopT >::getBlocksVector ( )
inline

Return a direct, mutable handle to the blocks vector so that we can mutate it efficiently with techniques like std::remove.

Definition at line 172 of file LoopInfo.h.

Referenced by rebuildLoopAfterUnswitch().

◆ getExitBlock()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getExitBlock ( ) const

◆ getExitBlocks()

template<class BlockT, class LoopT >
void llvm::LoopBase< BlockT, LoopT >::getExitBlocks ( SmallVectorImpl< BlockT *> &  ExitBlocks) const

Return all of the successor blocks of this loop.

getExitBlocks - Return all of the successor blocks of this loop.

These are the blocks outside of the current loop which are branched to.

Definition at line 62 of file LoopInfoImpl.h.

Referenced by llvm::formLCSSAForInstructions(), getInnermostLoopFor(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), hoistLoopToNewParent(), INITIALIZE_PASS(), llvm::isPotentiallyReachableFromMany(), llvm::SyncDependenceAnalysis::join_blocks(), LoopIsOuterMostWithPredecessor(), llvm::printLoop(), and llvm::UnrollLoop().

◆ getExitEdges()

template<class BlockT , class LoopT >
void llvm::LoopBase< BlockT, LoopT >::getExitEdges ( SmallVectorImpl< Edge > &  ExitEdges) const

Return all pairs of (inside_block,outside_block).

getExitEdges - Return all pairs of (inside_block,outside_block).

Definition at line 154 of file LoopInfoImpl.h.

Referenced by normalizePredicate().

◆ getExitingBlock()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getExitingBlock ( ) const

◆ getExitingBlocks()

template<class BlockT, class LoopT >
void llvm::LoopBase< BlockT, LoopT >::getExitingBlocks ( SmallVectorImpl< BlockT *> &  ExitingBlocks) const

Return all blocks inside the loop that have successors outside of the loop.

getExitingBlocks - Return all blocks inside the loop that have successors outside of the loop.

These are the blocks inside of the current loop which branch out. The returned list is always unique.

Definition at line 34 of file LoopInfoImpl.h.

Referenced by canProfitablyUnrollMultiExitLoop(), deleteLoopIfDead(), llvm::ScalarEvolution::forgetValue(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), llvm::SCEVExpander::getRelatedExistingExpansion(), llvm::ARMTTIImpl::getUnrollingPreferences(), InstructionStoresToFI(), llvm::PPCTTIImpl::isHardwareLoopProfitable(), mayUsePostIncMode(), llvm::LoopSimplifyPass::run(), and simplifyOneLoop().

◆ getHeader()

template<class BlockT, class LoopT>
BlockT* llvm::LoopBase< BlockT, LoopT >::getHeader ( ) const
inline

Definition at line 102 of file LoopInfo.h.

Referenced by llvm::addClonedBlockToLoopInfo(), llvm::RecurrenceDescriptor::AddReductionVar(), llvm::LoopAccessInfo::addRuntimeChecks(), AddRuntimeUnrollDisableMetaData(), llvm::LoopSafetyInfo::allLoopPathsLeadToBlock(), llvm::LoopVectorizeHints::allowVectorization(), allPhiOperandsUndefined(), analyzeLoopUnrollCost(), llvm::LoopVersioning::annotateInstWithNoAlias(), llvm::PredicatedScalarEvolution::areAddRecsEqualWithPreds(), areLoopExitPHIsSupported(), llvm::LoopBlocksTraversal::begin(), llvm::LoopAccessInfo::blockNeedsPredication(), buildClonedLoops(), BuildConstantFromSCEV(), calculateIterationsToInvariance(), canConstantEvolve(), canFoldIVIncExpr(), CloneLoopBlocks(), cloneLoopBlocks(), llvm::cloneLoopWithPreheader(), collectTransitivePredecessors(), llvm::LoopSafetyInfo::computeBlockColors(), computeBlocksDominatingExits(), llvm::DivergencePropagator::computeJoinPoints(), llvm::SimpleLoopSafetyInfo::computeLoopSafetyInfo(), llvm::computePeelCount(), computeUnlikelySuccessors(), llvm::computeUnrollCount(), containsSafePHI(), ConvertToSInt(), llvm::VPRecipeBuilder::createBlockInMask(), llvm::createHexagonHardwareLoops(), llvm::createLICMPass(), llvm::createLVMissedAnalysis(), createStringMetadata(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), deleteDeadInstruction(), llvm::deleteDeadLoop(), DisableAllLoopOptsOnLoop(), llvm::LoopVectorizationRequirements::doesNotMeet(), llvm::ICFLoopSafetyInfo::doesNotWriteMemoryBefore(), DoInitialMatch(), emitBasicBlockLoopComments(), llvm::LoopBlocksTraversal::end(), llvm::SystemZPostRASchedStrategy::enterMBB(), EqualityPropUnSafe(), EvaluateConstantChrecAtConstant(), llvm::SCEVExpander::expandCodeFor(), findInnerReductionPhi(), llvm::MachineLoopInfo::findLoopPreheader(), findPHIToPartitionLoops(), llvm::InnerLoopVectorizer::fixCrossIterationPHIs(), llvm::InnerLoopVectorizer::fixupIVUsers(), LoopFuser::fuseLoops(), llvm::gatherUnrollingPreferences(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getBlockDisposition(), getDebugLocString(), llvm::LoopBodyTraits::getEntryNode(), getInductionVariable(), getInnermostLoopFor(), getLayoutSuccessorProbThreshold(), llvm::ScalarEvolution::getLoopDisposition(), llvm::getLoopEstimatedTripCount(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), getLoopPhiForCounter(), llvm::Loop::getName(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), llvm::InnerLoopVectorizer::getOrCreateTripCount(), llvm::SCEVExpander::getOrInsertCanonicalInductionVariable(), getOtherIncomingValue(), GetPointerOperand(), llvm::SITargetLowering::getPrefLoopAlignment(), llvm::getPtrStride(), getRangeForAffineARHelper(), llvm::SCEVExpander::getRelatedExistingExpansion(), getSingleSchedPred(), getUnderlyingObjects(), llvm::ARMTTIImpl::getUnrollingPreferences(), hasUsesOutsideLoop(), INITIALIZE_PASS(), llvm::DivergenceAnalysis::inRegion(), llvm::InsertPreheaderForLoop(), insertUniqueBackedgeBlock(), InstructionStoresToFI(), llvm::ScalarEvolution::isAvailableAtLoopEntry(), llvm::VPBlockUtils::isBackEdge(), isCopyFeedingInvariantStore(), isEpilogProfitable(), isExistingPhi(), isExitingLoop(), isExplicitVecOuterLoop(), llvm::RecurrenceDescriptor::isFirstOrderRecurrence(), llvm::InductionDescriptor::isFPInductionPHI(), llvm::SimpleLoopSafetyInfo::isGuaranteedToExecute(), llvm::isGuaranteedToExecuteForEveryIteration(), llvm::PPCTTIImpl::isHardwareLoopProfitable(), isIgnorableInst(), isImmValidForOpcode(), IsIncrementNUW(), isIntegerLoopHeaderPHI(), llvm::ScalarEvolution::isKnownViaInduction(), isLoadConditional(), isLoadInvariantInLoop(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), isLoopCounter(), llvm::ScalarEvolution::isLoopEntryGuardedByCond(), isLoopIncrement(), llvm::LoopBase< BasicBlock, Loop >::isLoopLatch(), isNoWrap(), isProfitableChain(), isProfitableForVectorization(), llvm::RecurrenceDescriptor::isReductionPHI(), llvm::isSafeToUnrollAndJam(), isSimplifiedLoopNest(), isTrivialLoopExitBlock(), llvm::IVUsers::IVUsers(), llvm::SyncDependenceAnalysis::join_blocks(), LoopIsOuterMostWithPredecessor(), mayLoopAccessLocation(), mayUsePostIncMode(), mergeOperations(), moveLCSSAPhis(), normalizePredicate(), llvm::LoopBodyTraits::LoopBodyFilter::operator()(), llvm::peelLoop(), PickMostRelevantLoop(), llvm::LoopVectorizationPlanner::plan(), populateWorklist(), preheader(), llvm::LoopVersioning::prepareNoAliasMetadata(), llvm::IVUsers::print(), llvm::SCEV::print(), llvm::MemoryDepChecker::Dependence::print(), llvm::printLoop(), PrintParentLoopComment(), llvm::LoopVectorizePass::processLoop(), processLoopInVPlanNativePath(), profitImm(), PushDefUseChildren(), pushDepHeight(), PushLoopPHIs(), recomputeLoopBlockSet(), ReduceLoopStrength(), removeBlockFromLoops(), llvm::SCEVExpander::replaceCongruentIVs(), ReplaceUsesOfWith(), llvm::LoopAccessInfoPrinterPass::run(), llvm::IRCEPass::run(), llvm::LoopRotatePass::run(), llvm::LoopDataPrefetchPass::run(), llvm::IndVarSimplifyPass::run(), llvm::LoopIdiomRecognizePass::run(), llvm::GuardWideningPass::run(), llvm::LoopSimplifyPass::run(), llvm::SimpleLoopUnswitchPass::run(), llvm::LPPassManager::runOnFunction(), llvm::IVUsersWrapperPass::runOnLoop(), llvm::MachinePipeliner::runOnMachineFunction(), separateNestedLoop(), llvm::LoopVectorizeHints::setAlreadyVectorized(), llvm::ARMTTIImpl::shouldFavorBackedgeIndex(), shouldRotateLoopExitingLatch(), llvm::ScalarEvolution::SimplifyICmpOperands(), llvm::simplifyLoopAfterUnroll(), simplifyLoopInst(), llvm::simplifyLoopIVs(), simplifyOneLoop(), llvm::sinkRegion(), llvm::LoopPass::skipLoop(), SortCallTargets(), truncateIVUse(), llvm::VPRecipeBuilder::tryToBlend(), tryToUnrollAndJamLoop(), tryToUnrollLoop(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), unswitchAllTrivialConditions(), unswitchBestCondition(), unswitchNontrivialInvariants(), unswitchTrivialBranch(), unswitchTrivialSwitch(), FusionCandidate::verify(), llvm::LoopVersioning::versionLoop(), visitIVCast(), warnAboutLeftoverTransformations(), llvm::InnerLoopVectorizer::widenIntOrFpInduction(), and llvm::InnerLoopVectorizer::widenPHIInstruction().

◆ getLoopDepth()

template<class BlockT, class LoopT>
unsigned llvm::LoopBase< BlockT, LoopT >::getLoopDepth ( ) const
inline

Return the nesting level of this loop.

An outer-most loop has depth 1, for consistency with loop depth values used for basic blocks, where depth 0 is used for blocks not inside any loops.

Definition at line 94 of file LoopInfo.h.

Referenced by buildClonedLoops(), checkDependencies(), emitBasicBlockLoopComments(), LoopFuser::fuseLoops(), llvm::ScalarEvolution::getAddRecExpr(), getInnermostLoopFor(), llvm::AMDGPUTTIImpl::getUnrollingPreferences(), llvm::AArch64TTIImpl::getUnrollingPreferences(), isLoadOrStore(), mayUsePostIncMode(), PrintParentLoopComment(), and UpdateAnalysisInformation().

◆ getLoopLatch()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopLatch ( ) const

If there is a single latch block for this loop, return it.

getLoopLatch - If there is a single latch block for this loop, return it.

A latch block is a block that contains a branch back to the header.

Definition at line 224 of file LoopInfoImpl.h.

Referenced by analyzeLoopUnrollCost(), areLoopExitPHIsSupported(), llvm::LoopVectorizationLegality::blockNeedsPredication(), llvm::LoopAccessInfo::blockNeedsPredication(), calculateIterationsToInvariance(), calculateUnswitchCostMultiplier(), llvm::canPeel(), CheckMACMemory(), CloneLoopBlocks(), cloneLoopBlocks(), llvm::LoopVectorizationPlanner::collectTriviallyDeadInstructions(), llvm::computePeelCount(), ConnectEpilog(), ConnectProlog(), constantFoldTerminators(), containsSafePHI(), ConvertToSInt(), countToEliminateCompares(), llvm::createHexagonHardwareLoops(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), EvaluateConstantChrecAtConstant(), findInnerReductionPhi(), llvm::MachineLoopInfo::findLoopPreheader(), llvm::InnerLoopVectorizer::fixFirstOrderRecurrence(), llvm::InnerLoopVectorizer::fixReduction(), llvm::InnerLoopVectorizer::fixupIVUsers(), llvm::ScalarEvolution::forgetValue(), genLoopLimit(), getInductionVariable(), getInnermostLoopFor(), getLatchCmpInst(), llvm::getLoopEstimatedTripCount(), getLoopTest(), getOtherIncomingValue(), GetPointerOperand(), getRangeForAffineARHelper(), getReductionValue(), llvm::hasIterationCountInvariantInParent(), llvm::RecurrenceDescriptor::isFirstOrderRecurrence(), isImmValidForOpcode(), IsIncrementNUW(), llvm::InductionDescriptor::isInductionPHI(), isLoadConditional(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), isLoopCounter(), isProfitableChain(), isProfitableForVectorization(), llvm::isSafeToUnrollAndJam(), llvm::isUniformLoop(), IVUseShouldUsePostIncValue(), mayUsePostIncMode(), moveLCSSAPhis(), normalizePredicate(), partitionOuterLoopBlocks(), llvm::peelLoop(), llvm::MemoryDepChecker::Dependence::print(), profitImm(), PushDefUseChildren(), llvm::SCEVExpander::replaceCongruentIVs(), ReplaceUsesOfWith(), llvm::LoopSimplifyPass::run(), shouldRotateLoopExitingLatch(), truncateIVUse(), llvm::VPRecipeBuilder::tryToCreateRecipe(), tryToUnrollAndJamLoop(), tryToUnrollLoop(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), llvm::InnerLoopVectorizer::updateAnalysis(), and FusionCandidate::verify().

◆ getLoopLatches()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::getLoopLatches ( SmallVectorImpl< BlockT *> &  LoopLatches) const
inline

Return all loop latch blocks of this loop.

A latch block is a block that contains a branch back to the header.

Definition at line 306 of file LoopInfo.h.

Referenced by doesStoreDominatesAllLatches().

◆ getLoopPredecessor()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopPredecessor ( ) const

If the given loop's header has exactly one unique predecessor outside the loop, return it.

getLoopPredecessor - If the given loop's header has exactly one unique predecessor outside the loop, return it.

Otherwise return null. This is less strict that the loop "preheader" concept, which requires the predecessor to have exactly one successor.

Definition at line 201 of file LoopInfoImpl.h.

Referenced by EvaluateConstantChrecAtConstant(), findInnerReductionPhi(), getInductionVariable(), GetPointerOperand(), isCopyFeedingInvariantStore(), llvm::ScalarEvolution::isLoopEntryGuardedByCond(), and llvm::GuardWideningPass::run().

◆ getLoopPreheader()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopPreheader ( ) const

If there is a preheader for this loop, return it.

getLoopPreheader - If there is a preheader for this loop, return it.

A loop has a preheader if there is only one edge to the header of the loop from outside of the loop. If this is the case, the block branching to the header of the loop is the preheader node.

This method returns null if there is no preheader for the loop.

A loop has a preheader if there is only one edge to the header of the loop from outside of the loop and it is legal to hoist instructions into the predecessor. If this is the case, the block branching to the header of the loop is the preheader node.

This method returns null if there is no preheader for the loop.

Definition at line 173 of file LoopInfoImpl.h.

Referenced by llvm::RecurrenceDescriptor::AddReductionVar(), analyzeLoopUnrollCost(), llvm::LoopVectorizationLegality::blockNeedsPredication(), buildClonedLoops(), cloneLoopBlocks(), llvm::cloneLoopWithPreheader(), containsSafePHI(), llvm::createCodeGenPreparePass(), llvm::createLICMPass(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), deleteDeadInstruction(), llvm::deleteDeadLoop(), deleteLoopIfDead(), detectPopcountIdiom(), detectShiftUntilZeroIdiom(), llvm::InnerLoopVectorizer::emitMemRuntimeChecks(), llvm::InnerLoopVectorizer::emitMinimumIterationCountCheck(), llvm::InnerLoopVectorizer::emitSCEVChecks(), llvm::SCEVExpander::expandCodeFor(), findBBsToSinkInto(), llvm::MachineLoopInfo::findLoopPreheader(), llvm::InnerLoopVectorizer::fixFirstOrderRecurrence(), genLoopLimit(), getInductionVariable(), getInnermostLoopFor(), GetLoopInvariantInsertPosition(), llvm::InnerLoopVectorizer::getOrCreateTripCount(), llvm::InnerLoopVectorizer::getOrCreateVectorTripCount(), llvm::SITargetLowering::getPrefLoopAlignment(), llvm::SCEVExpander::hoistIVInc(), llvm::hoistRegion(), isCopyFeedingInvariantStore(), isEpilogProfitable(), llvm::RecurrenceDescriptor::isFirstOrderRecurrence(), IsIncrementNUW(), llvm::InductionDescriptor::isInductionPHI(), isIntersect(), isLoadConditional(), isLoopNeverExecuted(), isProfitableForVectorization(), mayLoopAccessLocation(), mayUsePostIncMode(), moveLCSSAPhis(), normalizePredicate(), llvm::slpvectorizer::BoUpSLP::optimizeGatherSequence(), partitionOuterLoopBlocks(), llvm::peelLoop(), preheader(), llvm::printLoop(), llvm::promoteLoopAccessesToScalars(), rebuildLoopAfterUnswitch(), recomputeLoopBlockSet(), llvm::IRCEPass::run(), llvm::LoopSimplifyPass::run(), llvm::MachinePipeliner::runOnMachineFunction(), shouldRotateLoopExitingLatch(), sinkLoopInvariantInstructions(), llvm::sinkRegion(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopRemainder(), unswitchNontrivialInvariants(), unswitchTrivialBranch(), unswitchTrivialSwitch(), FusionCandidate::verify(), llvm::LoopVersioning::versionLoop(), and visitIVCast().

◆ getNumBackEdges()

template<class BlockT, class LoopT>
unsigned llvm::LoopBase< BlockT, LoopT >::getNumBackEdges ( ) const
inline

Calculate the number of back edges to the loop header.

Definition at line 229 of file LoopInfo.h.

Referenced by llvm::LoopVectorizationLegality::blockNeedsPredication(), getInductionVariable(), insertUniqueBackedgeBlock(), and llvm::MemoryDepChecker::Dependence::print().

◆ getNumBlocks()

template<class BlockT, class LoopT>
unsigned llvm::LoopBase< BlockT, LoopT >::getNumBlocks ( ) const
inline

◆ getParentLoop()

template<class BlockT, class LoopT>
LoopT* llvm::LoopBase< BlockT, LoopT >::getParentLoop ( ) const
inline

Definition at line 103 of file LoopInfo.h.

Referenced by llvm::addClonedBlockToLoopInfo(), llvm::LPPassManager::addLoop(), llvm::DivergenceAnalysis::addUniformOverride(), buildClonedLoops(), BuildConstantFromSCEV(), calculateUnswitchCostMultiplier(), canSafelyUnrollMultiExitLoop(), CloneLoopBlocks(), cloneLoopBlocks(), llvm::cloneLoopWithPreheader(), ConvertToSInt(), llvm::createLICMPass(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), deleteDeadBlocksFromLoop(), llvm::Loop::dumpVerbose(), emitBasicBlockLoopComments(), llvm::InnerLoopVectorizer::emitMemRuntimeChecks(), llvm::InnerLoopVectorizer::emitMinimumIterationCountCheck(), llvm::InnerLoopVectorizer::emitSCEVChecks(), llvm::LoopInfo::erase(), llvm::SCEVExpander::expandCodeFor(), llvm::ScalarEvolution::forgetTopmostLoop(), getInductionVariable(), getInnermostLoopFor(), getOutermostLoop(), llvm::SITargetLowering::getPrefLoopAlignment(), llvm::hasIterationCountInvariantInParent(), hoistLoopToNewParent(), INITIALIZE_PASS(), llvm::DivergenceAnalysis::inRegion(), isLoadOrStore(), isMustExecuteIn(), isProfitableForVectorization(), llvm::SyncDependenceAnalysis::join_blocks(), LoopIsOuterMostWithPredecessor(), mayLoopAccessLocation(), llvm::peelLoop(), llvm::ScalarEvolution::print(), PrintParentLoopComment(), rebuildLoopAfterUnswitch(), removeBlockFromLoops(), llvm::LoopUnrollPass::run(), llvm::FunctionToLoopPassAdaptor< LoopPassT >::run(), separateNestedLoop(), llvm::sinkRegion(), SolveQuadraticAddRecRange(), llvm::UnrollAndJamLoop(), llvm::UnrollLoop(), unswitchNontrivialInvariants(), UpdateAnalysisInformation(), and visitIVCast().

◆ getSubLoops()

template<class BlockT, class LoopT>
const std::vector<LoopT *>& llvm::LoopBase< BlockT, LoopT >::getSubLoops ( ) const
inline

◆ getSubLoopsVector()

template<class BlockT, class LoopT>
std::vector<LoopT *>& llvm::LoopBase< BlockT, LoopT >::getSubLoopsVector ( )
inline

Definition at line 137 of file LoopInfo.h.

Referenced by deleteDeadBlocksFromLoop(), and rebuildLoopAfterUnswitch().

◆ getUniqueExitBlock()

template<class BlockT , class LoopT >
BlockT * llvm::LoopBase< BlockT, LoopT >::getUniqueExitBlock ( ) const

If getUniqueExitBlocks would return exactly one block, return that block.

Otherwise return null.

Definition at line 144 of file LoopInfoImpl.h.

Referenced by areLoopExitPHIsSupported(), llvm::canPeel(), llvm::deleteDeadLoop(), deleteLoopIfDead(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), and llvm::peelLoop().

◆ getUniqueExitBlocks()

template<class BlockT, class LoopT >
void llvm::LoopBase< BlockT, LoopT >::getUniqueExitBlocks ( SmallVectorImpl< BlockT *> &  ExitBlocks) const

Return all unique successor blocks of this loop.

These are the blocks outside of the current loop which are branched to. This assumes that loop exits are in canonical form, i.e. all exits are dedicated exits.

Definition at line 99 of file LoopInfoImpl.h.

Referenced by canSafelyUnrollMultiExitLoop(), ConvertToSInt(), llvm::createLICMPass(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), mayLoopAccessLocation(), sink(), and splitPredecessorsOfLoopExit().

◆ hasDedicatedExits()

template<class BlockT , class LoopT >
bool llvm::LoopBase< BlockT, LoopT >::hasDedicatedExits ( ) const

Return true if no exit block for the loop has a predecessor that is outside the loop.

Definition at line 85 of file LoopInfoImpl.h.

Referenced by llvm::createLICMPass(), llvm::deleteDeadLoop(), deleteLoopIfDead(), EqualityPropUnSafe(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), llvm::LoopSimplifyPass::run(), and shouldRotateLoopExitingLatch().

◆ isAnnotatedParallel()

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::isAnnotatedParallel ( ) const
inline

Returns true if the loop is annotated parallel.

Derived classes can override this method using static template polymorphism.

Definition at line 417 of file LoopInfo.h.

◆ isInvalid()

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::isInvalid ( ) const
inline

Return true if this loop is no longer valid.

The only valid use of this helper is "assert(L.isInvalid())" or equivalent, since IsInvalid is set to true by the destructor. In other words, if this accessor returns true, the caller has already triggered UB by calling this accessor; and so it can only be called in a context where a return value of true indicates a programmer error.

Definition at line 195 of file LoopInfo.h.

Referenced by llvm::LoopBase< BasicBlock, Loop >::addBlockEntry(), llvm::LoopBase< BasicBlock, Loop >::addChildLoop(), llvm::LoopBase< BasicBlock, Loop >::blocks(), llvm::LoopBase< BasicBlock, Loop >::contains(), llvm::LoopInfo::erase(), LoopFuser::fuseLoops(), llvm::LoopBase< BasicBlock, Loop >::getBlocks(), llvm::LoopBase< BasicBlock, Loop >::getBlocksSet(), llvm::LoopBase< BasicBlock, Loop >::getBlocksVector(), llvm::LoopBase< BasicBlock, Loop >::getLoopDepth(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), llvm::LoopBase< BasicBlock, Loop >::getNumBlocks(), llvm::LoopBase< BasicBlock, Loop >::getSubLoops(), llvm::LoopBase< BasicBlock, Loop >::getSubLoopsVector(), llvm::LoopBase< BasicBlock, Loop >::isLoopExiting(), llvm::LoopBase< BasicBlock, Loop >::isLoopLatch(), FusionCandidate::isValid(), llvm::LoopBase< BasicBlock, Loop >::moveToHeader(), llvm::LoopBase< BasicBlock, Loop >::removeBlockFromLoop(), llvm::LoopBase< BasicBlock, Loop >::removeChildLoop(), llvm::LoopBase< BasicBlock, Loop >::reserveBlocks(), llvm::LoopBase< BasicBlock, Loop >::reverseBlock(), llvm::LoopBase< BasicBlock, Loop >::setParentLoop(), and FusionCandidate::verify().

◆ isLoopExiting()

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::isLoopExiting ( const BlockT *  BB) const
inline

◆ isLoopLatch()

template<class BlockT, class LoopT>
bool llvm::LoopBase< BlockT, LoopT >::isLoopLatch ( const BlockT *  BB) const
inline

Definition at line 218 of file LoopInfo.h.

Referenced by llvm::VPBlockUtils::isBackEdge().

◆ moveToHeader()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::moveToHeader ( BlockT *  BB)
inline

This method is used to move BB (which must be part of this loop) to be the loop header of the loop (the block that dominates all others).

Definition at line 381 of file LoopInfo.h.

Referenced by separateNestedLoop(), shouldRotateLoopExitingLatch(), and UpdateAnalysisInformation().

◆ print()

template<class BlockT , class LoopT >
void llvm::LoopBase< BlockT, LoopT >::print ( raw_ostream OS,
unsigned  Depth = 0,
bool  Verbose = false 
) const

◆ rbegin()

template<class BlockT, class LoopT>
reverse_iterator llvm::LoopBase< BlockT, LoopT >::rbegin ( ) const
inline

Definition at line 146 of file LoopInfo.h.

◆ removeBlockFromLoop()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::removeBlockFromLoop ( BlockT *  BB)
inline

This removes the specified basic block from the current loop, updating the Blocks as appropriate.

This does not update the mapping in the LoopInfo class.

Definition at line 398 of file LoopInfo.h.

Referenced by LoopFuser::fuseLoops(), isProfitableForVectorization(), and separateNestedLoop().

◆ removeChildLoop() [1/2]

template<class BlockT, class LoopT>
LoopT* llvm::LoopBase< BlockT, LoopT >::removeChildLoop ( iterator  I)
inline

This removes the specified child from being a subloop of this loop.

The loop is not deleted, as it will presumably be inserted into another loop.

Definition at line 342 of file LoopInfo.h.

Referenced by llvm::Loop::dumpVerbose(), llvm::LoopInfo::erase(), LoopFuser::fuseLoops(), hoistLoopToNewParent(), isProfitableForVectorization(), rebuildLoopAfterUnswitch(), llvm::LoopBase< BasicBlock, Loop >::removeChildLoop(), and separateNestedLoop().

◆ removeChildLoop() [2/2]

template<class BlockT, class LoopT>
LoopT* llvm::LoopBase< BlockT, LoopT >::removeChildLoop ( LoopT *  Child)
inline

This removes the specified child from being a subloop of this loop.

The loop is not deleted, as it will presumably be inserted into another loop.

Definition at line 354 of file LoopInfo.h.

◆ rend()

template<class BlockT, class LoopT>
reverse_iterator llvm::LoopBase< BlockT, LoopT >::rend ( ) const
inline

Definition at line 147 of file LoopInfo.h.

◆ replaceChildLoopWith()

template<class BlockT , class LoopT>
void llvm::LoopBase< BlockT, LoopT >::replaceChildLoopWith ( LoopT *  OldChild,
LoopT *  NewChild 
)

This is used when splitting loops up.

replaceChildLoopWith - This is used when splitting loops up.

It replaces the OldChild entry in our children list with NewChild, and updates the parent pointer of OldChild to be null and the NewChild to be this loop. This updates the loop depth of the new child.

Definition at line 280 of file LoopInfoImpl.h.

Referenced by llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), and separateNestedLoop().

◆ reserveBlocks()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::reserveBlocks ( unsigned  size)
inline

interface to do reserve() for Blocks

Definition at line 374 of file LoopInfo.h.

Referenced by buildClonedLoops().

◆ reverseBlock()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::reverseBlock ( unsigned  from)
inline

interface to reverse Blocks[from, end of loop] in this loop

Definition at line 368 of file LoopInfo.h.

◆ setParentLoop()

template<class BlockT, class LoopT>
void llvm::LoopBase< BlockT, LoopT >::setParentLoop ( LoopT *  L)
inline

This is a raw interface for bypassing addChildLoop.

Definition at line 106 of file LoopInfo.h.

◆ verifyLoop()

template<class BlockT , class LoopT >
void llvm::LoopBase< BlockT, LoopT >::verifyLoop ( ) const

◆ verifyLoopNest()

template<class BlockT , class LoopT>
void llvm::LoopBase< BlockT, LoopT >::verifyLoopNest ( DenseSet< const LoopT *> *  Loops) const

Verify loop structure of this loop and all nested loops.

verifyLoop - Verify loop structure of this loop and all nested loops.

Definition at line 380 of file LoopInfoImpl.h.

Referenced by llvm::LoopBase< BasicBlock, Loop >::removeBlockFromLoop().

Friends And Related Function Documentation

◆ LoopInfoBase< BlockT, LoopT >

template<class BlockT, class LoopT>
friend class LoopInfoBase< BlockT, LoopT >
friend

Definition at line 423 of file LoopInfo.h.


The documentation for this class was generated from the following files: