LLVM API Documentation
#include <LoopInfo.h>
Public Types | |
typedef std::vector< LoopT * > ::const_iterator | iterator |
typedef std::vector< LoopT * > ::const_reverse_iterator | reverse_iterator |
typedef std::vector< BlockT * > ::const_iterator | block_iterator |
typedef std::pair< const BlockT *, const BlockT * > | Edge |
Edge type. | |
Public Member Functions | |
LoopBase () | |
Loop ctor - This creates an empty loop. | |
~LoopBase () | |
unsigned | getLoopDepth () const |
BlockT * | getHeader () const |
LoopT * | getParentLoop () const |
void | setParentLoop (LoopT *L) |
setParentLoop is a raw interface for bypassing addChildLoop. | |
bool | contains (const LoopT *L) const |
bool | contains (const BlockT *BB) const |
template<class InstT > | |
bool | contains (const InstT *Inst) const |
const std::vector< LoopT * > & | getSubLoops () const |
std::vector< LoopT * > & | getSubLoopsVector () |
iterator | begin () const |
iterator | end () const |
reverse_iterator | rbegin () const |
reverse_iterator | rend () const |
bool | empty () const |
const std::vector< BlockT * > & | getBlocks () const |
block_iterator | block_begin () const |
block_iterator | block_end () const |
unsigned | getNumBlocks () const |
getNumBlocks - Get the number of blocks in this loop in constant time. | |
bool | isLoopExiting (const BlockT *BB) const |
unsigned | getNumBackEdges () const |
void | getExitingBlocks (SmallVectorImpl< BlockT * > &ExitingBlocks) const |
BlockT * | getExitingBlock () const |
void | getExitBlocks (SmallVectorImpl< BlockT * > &ExitBlocks) const |
BlockT * | getExitBlock () const |
void | getExitEdges (SmallVectorImpl< Edge > &ExitEdges) const |
getExitEdges - Return all pairs of (_inside_block_,_outside_block_). | |
BlockT * | getLoopPreheader () const |
BlockT * | getLoopPredecessor () const |
BlockT * | getLoopLatch () const |
void | getLoopLatches (SmallVectorImpl< BlockT * > &LoopLatches) const |
void | addBasicBlockToLoop (BlockT *NewBB, LoopInfoBase< BlockT, LoopT > &LI) |
void | replaceChildLoopWith (LoopT *OldChild, LoopT *NewChild) |
void | addChildLoop (LoopT *NewChild) |
LoopT * | removeChildLoop (iterator I) |
void | addBlockEntry (BlockT *BB) |
void | reverseBlock (unsigned from) |
reverseBlocks - interface to reverse Blocks[from, end of loop] in this loop | |
void | reserveBlocks (unsigned size) |
reserveBlocks- interface to do reserve() for Blocks | |
void | moveToHeader (BlockT *BB) |
void | removeBlockFromLoop (BlockT *BB) |
void | verifyLoop () const |
verifyLoop - Verify loop structure | |
void | verifyLoopNest (DenseSet< const LoopT * > *Loops) const |
verifyLoop - Verify loop structure of this loop and all nested loops. | |
void | print (raw_ostream &OS, unsigned Depth=0) const |
Protected Member Functions | |
LoopBase (BlockT *BB) | |
Friends | |
class | LoopInfoBase< BlockT, LoopT > |
LoopBase class - Instances of this class are used to represent loops that are detected in the flow graph
Definition at line 67 of file LoopInfo.h.
typedef std::vector<BlockT*>::const_iterator llvm::LoopBase< BlockT, LoopT >::block_iterator |
Definition at line 142 of file LoopInfo.h.
typedef std::pair<const BlockT*, const BlockT*> llvm::LoopBase< BlockT, LoopT >::Edge |
Edge type.
Definition at line 209 of file LoopInfo.h.
typedef std::vector<LoopT *>::const_iterator llvm::LoopBase< BlockT, LoopT >::iterator |
Definition at line 130 of file LoopInfo.h.
typedef std::vector<LoopT *>::const_reverse_iterator llvm::LoopBase< BlockT, LoopT >::reverse_iterator |
Definition at line 132 of file LoopInfo.h.
llvm::LoopBase< BlockT, LoopT >::LoopBase | ( | ) | [inline] |
Loop ctor - This creates an empty loop.
Definition at line 82 of file LoopInfo.h.
llvm::LoopBase< BlockT, LoopT >::~LoopBase | ( | ) | [inline] |
Definition at line 83 of file LoopInfo.h.
llvm::LoopBase< BlockT, LoopT >::LoopBase | ( | BlockT * | BB | ) | [inline, explicit, protected] |
Definition at line 336 of file LoopInfo.h.
void llvm::LoopBase< BlockT, LoopT >::addBasicBlockToLoop | ( | BlockT * | NewBB, |
LoopInfoBase< BlockT, LoopT > & | LIB | ||
) |
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 187 of file LoopInfoImpl.h.
Referenced by CloneLoop(), insertUniqueBackedgeBlock(), llvm::UnrollLoop(), and UpdateAnalysisInformation().
void llvm::LoopBase< BlockT, LoopT >::addBlockEntry | ( | BlockT * | BB | ) | [inline] |
addBlockEntry - 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 288 of file LoopInfo.h.
Referenced by separateNestedLoop().
void llvm::LoopBase< BlockT, LoopT >::addChildLoop | ( | LoopT * | NewChild | ) | [inline] |
addChildLoop - Add the specified loop to be a child of this loop. This updates the loop depth of the new child.
Definition at line 267 of file LoopInfo.h.
Referenced by llvm::LPPassManager::insertLoop(), and separateNestedLoop().
iterator llvm::LoopBase< BlockT, LoopT >::begin | ( | ) | const [inline] |
Definition at line 133 of file LoopInfo.h.
Referenced by llvm::GraphTraits< const MachineLoop * >::child_begin(), llvm::GraphTraits< MachineLoop * >::child_begin(), llvm::GraphTraits< const Loop * >::child_begin(), llvm::GraphTraits< Loop * >::child_begin(), CloneLoop(), llvm::ScalarEvolution::forgetLoop(), llvm::formLCSSARecursively(), llvm::ScalarEvolution::print(), PrintLoopInfo(), llvm::LoopBase< BasicBlock, Loop >::removeChildLoop(), llvm::simplifyLoop(), llvm::LoopInfo::updateUnloop(), and verifyLoop().
block_iterator llvm::LoopBase< BlockT, LoopT >::block_begin | ( | ) | const [inline] |
Definition at line 143 of file LoopInfo.h.
Referenced by ApproximateLoopSize(), CloneLoop(), llvm::formLCSSA(), mayLoopAccessLocation(), separateNestedLoop(), simplifyOneLoop(), and llvm::LoopInfo::updateUnloop().
block_iterator llvm::LoopBase< BlockT, LoopT >::block_end | ( | ) | const [inline] |
Definition at line 144 of file LoopInfo.h.
Referenced by ApproximateLoopSize(), CloneLoop(), llvm::formLCSSA(), mayLoopAccessLocation(), separateNestedLoop(), simplifyOneLoop(), and llvm::LoopInfo::updateUnloop().
bool llvm::LoopBase< BlockT, LoopT >::contains | ( | const LoopT * | L | ) | const [inline] |
contains - Return true if the specified loop is contained within in this loop.
Definition at line 107 of file LoopInfo.h.
Referenced by canConstantEvolve(), CloneLoopBlocks(), llvm::CodeMetrics::collectEphemeralValues(), ConnectProlog(), llvm::LoopBase< BasicBlock, Loop >::contains(), findPHIToPartitionLoops(), llvm::ScalarEvolution::getAddRecExpr(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), hasOutsideLoopUser(), hasUsesOutsideLoop(), llvm::InsertPreheaderForLoop(), isExitingLoop(), isInteresting(), llvm::LoopBase< BasicBlock, Loop >::isLoopExiting(), isTrivialLoopExitBlockHelper(), IVUseShouldUsePostIncValue(), PickMostRelevantLoop(), placeSplitBlockCarefully(), processInstruction(), llvm::LoopInfo::replacementPreservesLCSSAForm(), rewriteLoopExitBlock(), separateNestedLoop(), simplifyOneLoop(), llvm::UnrollLoop(), and llvm::LoopBlocksTraversal::visitPreorder().
bool llvm::LoopBase< BlockT, LoopT >::contains | ( | const BlockT * | BB | ) | const [inline] |
contains - Return true if the specified basic block is in this loop.
Definition at line 115 of file LoopInfo.h.
bool llvm::LoopBase< BlockT, LoopT >::contains | ( | const InstT * | Inst | ) | const [inline] |
contains - Return true if the specified instruction is in this loop.
Definition at line 122 of file LoopInfo.h.
bool llvm::LoopBase< BlockT, LoopT >::empty | ( | ) | const [inline] |
Definition at line 137 of file LoopInfo.h.
Referenced by emitBasicBlockLoopComments(), and llvm::LoopInfo::updateUnloop().
iterator llvm::LoopBase< BlockT, LoopT >::end | ( | ) | const [inline] |
Definition at line 134 of file LoopInfo.h.
Referenced by llvm::GraphTraits< const MachineLoop * >::child_end(), llvm::GraphTraits< MachineLoop * >::child_end(), llvm::GraphTraits< const Loop * >::child_end(), llvm::GraphTraits< Loop * >::child_end(), CloneLoop(), llvm::ScalarEvolution::forgetLoop(), llvm::formLCSSARecursively(), llvm::ScalarEvolution::print(), PrintLoopInfo(), llvm::simplifyLoop(), llvm::LoopInfo::updateUnloop(), and verifyLoop().
const std::vector<BlockT*>& llvm::LoopBase< BlockT, LoopT >::getBlocks | ( | ) | const [inline] |
getBlocks - Get a list of the basic blocks which make up this loop.
Definition at line 141 of file LoopInfo.h.
Referenced by separateNestedLoop(), and llvm::UnrollLoop().
BlockT * llvm::LoopBase< BlockT, LoopT >::getExitBlock | ( | ) | const |
getExitBlock - If getExitBlocks would return exactly one block, return that block. Otherwise return null.
Definition at line 78 of file LoopInfoImpl.h.
References llvm::SmallVectorTemplateCommon< T >::size().
void llvm::LoopBase< BlockT, LoopT >::getExitBlocks | ( | SmallVectorImpl< BlockT * > & | ExitBlocks | ) | const |
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 64 of file LoopInfoImpl.h.
References contains(), I, and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by llvm::formLCSSA(), PrintLoopInfo(), and simplifyOneLoop().
void llvm::LoopBase< BlockT, LoopT >::getExitEdges | ( | SmallVectorImpl< Edge > & | ExitEdges | ) | const |
getExitEdges - Return all pairs of (_inside_block_,_outside_block_).
Definition at line 89 of file LoopInfoImpl.h.
References contains(), I, and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
BlockT * llvm::LoopBase< BlockT, LoopT >::getExitingBlock | ( | ) | const |
getExitingBlock - If getExitingBlocks would return exactly one block, return that block. Otherwise return null.
Definition at line 51 of file LoopInfoImpl.h.
References llvm::SmallVectorTemplateCommon< T >::size().
Referenced by canExpandBackedgeTakenCount(), FindLoopCounter(), genLoopLimit(), getLoopTest(), and llvm::UnrollRuntimeLoopProlog().
void llvm::LoopBase< BlockT, LoopT >::getExitingBlocks | ( | SmallVectorImpl< BlockT * > & | ExitingBlocks | ) | const |
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 35 of file LoopInfoImpl.h.
References contains(), I, and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by simplifyOneLoop().
BlockT* llvm::LoopBase< BlockT, LoopT >::getHeader | ( | ) | const [inline] |
Definition at line 98 of file LoopInfo.h.
Referenced by llvm::LoopBlocksTraversal::begin(), canConstantEvolve(), CloneLoopBlocks(), llvm::CodeMetrics::collectEphemeralValues(), DoInitialMatch(), emitBasicBlockLoopComments(), llvm::LoopBlocksTraversal::end(), FindLoopCounter(), findPHIToPartitionLoops(), llvm::ScalarEvolution::getAddRecExpr(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatches(), getLoopPhiForCounter(), llvm::LoopBase< BasicBlock, Loop >::getNumBackEdges(), llvm::SCEVExpander::getOrInsertCanonicalInductionVariable(), llvm::InsertPreheaderForLoop(), insertUniqueBackedgeBlock(), isExistingPhi(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), llvm::ScalarEvolution::isLoopEntryGuardedByCond(), isLoopInvariant(), isSimplifiedLoopNest(), isTrivialLoopExitBlock(), PickMostRelevantLoop(), llvm::SCEV::print(), llvm::IVUsers::print(), PrintLoopInfo(), PrintParentLoopComment(), PushLoopPHIs(), llvm::SCEVExpander::replaceCongruentIVs(), llvm::LPPassManager::runOnFunction(), separateNestedLoop(), SetLoopAlreadyUnrolled(), llvm::ScalarEvolution::SimplifyICmpOperands(), llvm::simplifyLoopIVs(), simplifyOneLoop(), llvm::LoopPass::skipOptnoneFunction(), llvm::UnrollLoop(), and llvm::UnrollRuntimeLoopProlog().
unsigned llvm::LoopBase< BlockT, LoopT >::getLoopDepth | ( | ) | const [inline] |
getLoopDepth - 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 91 of file LoopInfo.h.
Referenced by emitBasicBlockLoopComments(), llvm::ScalarEvolution::getAddRecExpr(), PrintParentLoopComment(), and UpdateAnalysisInformation().
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopLatch | ( | ) | const |
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 156 of file LoopInfoImpl.h.
References contains(), and N.
Referenced by CloneLoopBlocks(), ConnectProlog(), FindLoopCounter(), getLoopTest(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), IVUseShouldUsePostIncValue(), needsLFTR(), llvm::SCEVExpander::replaceCongruentIVs(), simplifyOneLoop(), llvm::UnrollLoop(), and llvm::UnrollRuntimeLoopProlog().
void llvm::LoopBase< BlockT, LoopT >::getLoopLatches | ( | SmallVectorImpl< BlockT * > & | LoopLatches | ) | const [inline] |
getLoopLatches - 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 236 of file LoopInfo.h.
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopPredecessor | ( | ) | const |
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 130 of file LoopInfoImpl.h.
References contains(), and N.
Referenced by llvm::ScalarEvolution::isLoopEntryGuardedByCond().
BlockT * llvm::LoopBase< BlockT, LoopT >::getLoopPreheader | ( | ) | const |
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.
Definition at line 108 of file LoopInfoImpl.h.
Referenced by CloneLoopBlocks(), genLoopLimit(), simplifyOneLoop(), llvm::UnrollLoop(), and llvm::UnrollRuntimeLoopProlog().
unsigned llvm::LoopBase< BlockT, LoopT >::getNumBackEdges | ( | ) | const [inline] |
getNumBackEdges - Calculate the number of back edges to the loop header
Definition at line 167 of file LoopInfo.h.
Referenced by insertUniqueBackedgeBlock(), and simplifyOneLoop().
unsigned llvm::LoopBase< BlockT, LoopT >::getNumBlocks | ( | ) | const [inline] |
getNumBlocks - Get the number of blocks in this loop in constant time.
Definition at line 147 of file LoopInfo.h.
Referenced by llvm::LoopBlocksTraversal::begin(), llvm::LoopBlocksDFS::isComplete(), and llvm::LoopBlocksDFS::LoopBlocksDFS().
LoopT* llvm::LoopBase< BlockT, LoopT >::getParentLoop | ( | ) | const [inline] |
Definition at line 99 of file LoopInfo.h.
Referenced by CloneLoopBlocks(), emitBasicBlockLoopComments(), getOutermostLoop(), llvm::LPPassManager::insertLoopIntoQueue(), LoopIsOuterMostWithPredecessor(), llvm::ScalarEvolution::print(), PrintParentLoopComment(), separateNestedLoop(), llvm::UnrollLoop(), llvm::UnrollRuntimeLoopProlog(), and llvm::LoopInfo::updateUnloop().
const std::vector<LoopT *>& llvm::LoopBase< BlockT, LoopT >::getSubLoops | ( | ) | const [inline] |
iterator/begin/end - Return the loops contained entirely within this loop.
Definition at line 128 of file LoopInfo.h.
Referenced by separateNestedLoop().
std::vector<LoopT *>& llvm::LoopBase< BlockT, LoopT >::getSubLoopsVector | ( | ) | [inline] |
Definition at line 129 of file LoopInfo.h.
bool llvm::LoopBase< BlockT, LoopT >::isLoopExiting | ( | const BlockT * | BB | ) | const [inline] |
isLoopExiting - True if terminator in the block can branch to another block that is outside of the current loop.
Definition at line 154 of file LoopInfo.h.
Referenced by llvm::VirtRegAuxInfo::calculateSpillWeightAndHint().
void llvm::LoopBase< BlockT, LoopT >::moveToHeader | ( | BlockT * | BB | ) | [inline] |
moveToHeader - 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 306 of file LoopInfo.h.
Referenced by separateNestedLoop().
void llvm::LoopBase< BlockT, LoopT >::print | ( | raw_ostream & | OS, |
unsigned | Depth = 0 |
||
) | const |
Definition at line 319 of file LoopInfoImpl.h.
References llvm::sys::path::begin(), llvm::sys::path::end(), I, and llvm::raw_ostream::indent().
Referenced by llvm::operator<<().
reverse_iterator llvm::LoopBase< BlockT, LoopT >::rbegin | ( | ) | const [inline] |
Definition at line 135 of file LoopInfo.h.
Referenced by addLoopIntoQueue(), getLoopBackedgeTakenCounts(), and llvm::ScalarEvolution::verifyAnalysis().
void llvm::LoopBase< BlockT, LoopT >::removeBlockFromLoop | ( | BlockT * | BB | ) | [inline] |
removeBlockFromLoop - 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 321 of file LoopInfo.h.
Referenced by separateNestedLoop().
LoopT* llvm::LoopBase< BlockT, LoopT >::removeChildLoop | ( | iterator | I | ) | [inline] |
removeChildLoop - 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 276 of file LoopInfo.h.
Referenced by separateNestedLoop(), and llvm::LoopInfo::updateUnloop().
reverse_iterator llvm::LoopBase< BlockT, LoopT >::rend | ( | ) | const [inline] |
Definition at line 136 of file LoopInfo.h.
Referenced by addLoopIntoQueue(), getLoopBackedgeTakenCounts(), and llvm::ScalarEvolution::verifyAnalysis().
void llvm::LoopBase< BlockT, LoopT >::replaceChildLoopWith | ( | LoopT * | OldChild, |
LoopT * | NewChild | ||
) |
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 211 of file LoopInfoImpl.h.
References I.
void llvm::LoopBase< BlockT, LoopT >::reserveBlocks | ( | unsigned | size | ) | [inline] |
reserveBlocks- interface to do reserve() for Blocks
Definition at line 299 of file LoopInfo.h.
void llvm::LoopBase< BlockT, LoopT >::reverseBlock | ( | unsigned | from | ) | [inline] |
reverseBlocks - interface to reverse Blocks[from, end of loop] in this loop
Definition at line 294 of file LoopInfo.h.
void llvm::LoopBase< BlockT, LoopT >::setParentLoop | ( | LoopT * | L | ) | [inline] |
setParentLoop is a raw interface for bypassing addChildLoop.
Definition at line 102 of file LoopInfo.h.
void llvm::LoopBase< BlockT, LoopT >::verifyLoop | ( | ) | const |
verifyLoop - Verify loop structure
Definition at line 224 of file LoopInfoImpl.h.
References llvm::sys::path::begin(), contains(), llvm::depth_first(), llvm::df_ext_begin(), llvm::df_ext_end(), llvm::SmallVectorBase::empty(), llvm::sys::path::end(), getParent(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), N, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::SmallVectorTemplateCommon< T >::size().
Referenced by llvm::LPPassManager::runOnFunction().
void llvm::LoopBase< BlockT, LoopT >::verifyLoopNest | ( | DenseSet< const LoopT * > * | Loops | ) | const |
verifyLoop - Verify loop structure of this loop and all nested loops.
Definition at line 308 of file LoopInfoImpl.h.
References llvm::sys::path::begin(), llvm::sys::path::end(), I, llvm::DenseSet< ValueT, ValueInfoT >::insert(), and verifyLoop().
friend class LoopInfoBase< BlockT, LoopT > [friend] |
Definition at line 335 of file LoopInfo.h.