LLVM: llvm::LoopNest Class Reference (original) (raw)

This class represents a loop nest and can be used to query its properties. More...

#include "[llvm/Analysis/LoopNestAnalysis.h](LoopNestAnalysis%5F8h%5Fsource.html)"

Public Member Functions
LoopNest (Loop &Root, ScalarEvolution &SE)
Construct a loop nest rooted by loop Root.
LoopNest ()=delete
Loop & getOutermostLoop () const
Return the outermost loop in the loop nest.
Loop * getInnermostLoop () const
Return the innermost loop in the loop nest if the nest has only one innermost loop, and a nullptr otherwise.
Loop * getLoop (unsigned Index) const
Return the loop at the given Index.
unsigned getLoopIndex (const Loop &L) const
Get the loop index of the given loop L.
size_t getNumLoops () const
Return the number of loops in the nest.
ArrayRef< Loop * > getLoops () const
Get the loops in the nest.
LoopVectorTy getLoopsAtDepth (unsigned Depth) const
Get the loops in the nest at the given Depth.
SmallVector< LoopVectorTy, 4 > getPerfectLoops (ScalarEvolution &SE) const
Retrieve a vector of perfect loop nests contained in the current loop nest.
unsigned getNestDepth () const
Return the loop nest depth (i.e.
unsigned getMaxPerfectDepth () const
Return the maximum perfect nesting depth.
bool areAllLoopsSimplifyForm () const
Return true if all loops in the loop nest are in simplify form.
bool areAllLoopsRotatedForm () const
Return true if all loops in the loop nest are in rotated form.
Function * getParent () const
Return the function to which the loop-nest belongs.
StringRef getName () const
Static Public Member Functions
static std::unique_ptr< LoopNest > getLoopNest (Loop &Root, ScalarEvolution &SE)
Construct a LoopNest object.
static bool arePerfectlyNested (const Loop &OuterLoop, const Loop &InnerLoop, ScalarEvolution &SE)
Return true if the given loops OuterLoop and InnerLoop are perfectly nested with respect to each other, and false otherwise.
static InstrVectorTy getInterveningInstructions (const Loop &OuterLoop, const Loop &InnerLoop, ScalarEvolution &SE)
Return a vector of instructions that prevent the LoopNest given by loops OuterLoop and InnerLoop from being perfect.
static unsigned getMaxPerfectDepth (const Loop &Root, ScalarEvolution &SE)
Return the maximum nesting depth of the loop nest rooted by loop Root.
static const BasicBlock & skipEmptyBlockUntil (const BasicBlock *From, const BasicBlock *End, bool CheckUniquePred=false)
Recursivelly traverse all empty 'single successor' basic blocks of From (if there are any).

This class represents a loop nest and can be used to query its properties.

Definition at line 28 of file LoopNestAnalysis.h.

InstrVectorTy

LoopNest() [1/2]

LoopNest() [2/2]

llvm::LoopNest::LoopNest ( ) delete

areAllLoopsRotatedForm()

bool llvm::LoopNest::areAllLoopsRotatedForm ( ) const inline

areAllLoopsSimplifyForm()

bool llvm::LoopNest::areAllLoopsSimplifyForm ( ) const inline

arePerfectlyNested()

Return true if the given loops OuterLoop and InnerLoop are perfectly nested with respect to each other, and false otherwise.

Example:

arePerfectlyNested(loop_i, loop_j, SE) would return true. arePerfectlyNested(loop_j, loop_k, SE) would return true. arePerfectlyNested(loop_i, loop_k, SE) would return false.

Definition at line 103 of file LoopNestAnalysis.cpp.

Referenced by getMaxPerfectDepth(), and getPerfectLoops().

getInnermostLoop()

Loop * llvm::LoopNest::getInnermostLoop ( ) const inline

getInterveningInstructions()

Return a vector of instructions that prevent the LoopNest given by loops OuterLoop and InnerLoop from being perfect.

Definition at line 181 of file LoopNestAnalysis.cpp.

References checkSafeInstruction(), llvm::dbgs(), DEBUG_WITH_TYPE, llvm::Loop::getBounds(), llvm::LoopBase< BlockT, LoopT >::getExitBlock(), llvm::LoopBase< BlockT, LoopT >::getHeader(), getInnerLoopGuardCmp(), llvm::LoopBase< BlockT, LoopT >::getLoopLatch(), llvm::LoopBase< BlockT, LoopT >::getLoopPreheader(), getOuterLoopLatchCmp(), I, LLVM_DEBUG, and VerboseDebug.

getLoop()

Loop * llvm::LoopNest::getLoop ( unsigned Index) const inline

getLoopIndex()

getLoopNest()

getLoops()

ArrayRef< Loop * > llvm::LoopNest::getLoops ( ) const inline

getLoopsAtDepth()

getMaxPerfectDepth() [1/2]

unsigned llvm::LoopNest::getMaxPerfectDepth ( ) const inline

getMaxPerfectDepth() [2/2]

getName()

StringRef llvm::LoopNest::getName ( ) const inline

getNestDepth()

unsigned llvm::LoopNest::getNestDepth ( ) const inline

getNumLoops()

size_t llvm::LoopNest::getNumLoops ( ) const inline

getOutermostLoop()

Loop & llvm::LoopNest::getOutermostLoop ( ) const inline

getParent()

Function * llvm::LoopNest::getParent ( ) const inline

getPerfectLoops()

Retrieve a vector of perfect loop nests contained in the current loop nest.

For example, given the following nest containing 4 loops, this member function would return {{L1,L2},{L3,L4}}.

for(i)

for(j)

for(k)

for(l)

Definition at line 241 of file LoopNestAnalysis.cpp.

References arePerfectlyNested(), llvm::SmallVectorImpl< T >::clear(), llvm::depth_first(), llvm::SmallVectorBase< Size_T >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::front(), Loops, and llvm::SmallVectorTemplateBase< T, bool >::push_back().

skipEmptyBlockUntil()

Loops

MaxPerfectDepth


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