LLVM 20.0.0git
|
#include "llvm/Analysis/LoopInfo.h"
Public Member Functions | |
LoopInfo ()=default | |
LoopInfo (const DominatorTreeBase< BasicBlock, false > &DomTree) | |
LoopInfo (LoopInfo &&Arg) | |
LoopInfo & | operator= (LoopInfo &&RHS) |
bool | invalidate (Function &F, const PreservedAnalyses &PA, FunctionAnalysisManager::Invalidator &) |
Handle invalidation explicitly. | |
void | erase (Loop *L) |
Update LoopInfo after removing the last backedge from a loop. | |
bool | replacementPreservesLCSSAForm (Instruction *From, Value *To) |
Returns true if replacing From with To everywhere is guaranteed to preserve LCSSA form. | |
bool | movementPreservesLCSSAForm (Instruction *Inst, Instruction *NewLoc) |
Checks if moving a specific instruction can break LCSSA in any loop. | |
bool | wouldBeOutOfLoopUseRequiringLCSSA (const Value *V, const BasicBlock *ExitBB) const |
Public Member Functions inherited from llvm::LoopInfoBase< BasicBlock, Loop > | |
LoopInfoBase & | operator= (LoopInfoBase &&RHS) |
LoopInfoBase ()=default | |
LoopInfoBase (LoopInfoBase &&Arg) | |
~LoopInfoBase () | |
void | releaseMemory () |
Loop * | AllocateLoop (ArgsTy &&...Args) |
iterator | begin () const |
iterator | end () const |
reverse_iterator | rbegin () const |
reverse_iterator | rend () const |
bool | empty () const |
SmallVector< Loop *, 4 > | getLoopsInPreorder () const |
Return all of the loops in the function in preorder across the loop nests, with siblings in forward program order. | |
SmallVector< Loop *, 4 > | getLoopsInReverseSiblingPreorder () const |
Return all of the loops in the function in preorder across the loop nests, with siblings in reverse program order. | |
Loop * | getLoopFor (const BasicBlock *BB) const |
Return the inner most loop that BB lives in. | |
const Loop * | operator[] (const BasicBlock *BB) const |
Same as getLoopFor. | |
unsigned | getLoopDepth (const BasicBlock *BB) const |
Return the loop nesting level of the specified block. | |
bool | isLoopHeader (const BasicBlock *BB) const |
const std::vector< Loop * > & | getTopLevelLoops () const |
Return the top-level loops. | |
std::vector< Loop * > & | getTopLevelLoopsVector () |
Return the top-level loops. | |
Loop * | removeLoop (iterator I) |
This removes the specified top-level loop from this loop info object. | |
void | changeLoopFor (BasicBlock *BB, Loop *L) |
Change the top-level loop that contains BB to the specified loop. | |
void | changeTopLevelLoop (Loop *OldLoop, Loop *NewLoop) |
Replace the specified loop in the top-level loops list with the indicated loop. | |
void | addTopLevelLoop (Loop *New) |
This adds the specified loop to the collection of top-level loops. | |
void | removeBlock (BasicBlock *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< BasicBlock, false > &DomTree) |
Create the loop forest using a stable algorithm. | |
void | print (raw_ostream &OS) const |
void | verify (const DominatorTreeBase< BasicBlock, false > &DomTree) const |
void | destroy (Loop *L) |
Destroy a loop that has been removed from the LoopInfo nest. | |
Friends | |
class | LoopBase< BasicBlock, Loop > |
Additional Inherited Members | |
Public Types inherited from llvm::LoopInfoBase< BasicBlock, Loop > | |
typedef std::vector< Loop * >::const_iterator | iterator |
iterator/begin/end - The interface to the top-level loops in the current function. | |
typedef std::vector< Loop * >::const_reverse_iterator | reverse_iterator |
Static Public Member Functions inherited from llvm::LoopInfoBase< BasicBlock, Loop > | |
static bool | isNotAlreadyContainedIn (const Loop *SubLoop, const Loop *ParentLoop) |
Definition at line 407 of file LoopInfo.h.
|
default |
|
explicit |
|
inline |
Definition at line 419 of file LoopInfo.h.
void LoopInfo::erase | ( | Loop * | L | ) |
Update LoopInfo after removing the last backedge from a loop.
This updates the loop forest and parent loops for each block so that L
is no longer referenced, but does not actually delete L
immediately. The pointer will remain valid until this LoopInfo's memory is released.
Definition at line 887 of file LoopInfo.cpp.
References assert(), llvm::LoopBase< BasicBlock, Loop >::begin(), llvm::LoopBase< BlockT, LoopT >::begin(), llvm::LoopBase< BlockT, LoopT >::blocks(), llvm::LoopBase< BasicBlock, Loop >::end(), llvm::LoopBase< BlockT, LoopT >::end(), llvm::LoopBase< BlockT, LoopT >::getParentLoop(), I, llvm::LoopBase< BlockT, LoopT >::isInnermost(), llvm::LoopBase< BlockT, LoopT >::isInvalid(), llvm::LoopBase< BlockT, LoopT >::isOutermost(), llvm::make_scope_exit(), and llvm::LoopBase< BlockT, LoopT >::removeChildLoop().
Referenced by llvm::breakLoopBackedge(), DoFlattenLoopPair(), llvm::UnrollAndJamLoop(), and llvm::UnrollLoop().
bool LoopInfo::invalidate | ( | Function & | F, |
const PreservedAnalyses & | PA, | ||
FunctionAnalysisManager::Invalidator & | |||
) |
Handle invalidation explicitly.
Definition at line 878 of file LoopInfo.cpp.
References llvm::PreservedAnalyses::getChecker().
|
inline |
Checks if moving a specific instruction can break LCSSA in any loop.
Return true if moving Inst
to before NewLoc
will break LCSSA, assuming that the function containing Inst
and NewLoc
is currently in LCSSA form.
Definition at line 465 of file LoopInfo.h.
References assert(), llvm::Instruction::getFunction(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::User::operands(), and llvm::Value::uses().
Referenced by llvm::SCEVExpander::hoistIVInc().
Definition at line 420 of file LoopInfo.h.
References RHS.
|
inline |
Returns true if replacing From with To everywhere is guaranteed to preserve LCSSA form.
Definition at line 439 of file LoopInfo.h.
References llvm::LoopBase< BlockT, LoopT >::contains(), From, and I.
Referenced by loadCSE(), replaceLoopPHINodesWithPreheaderValues(), llvm::rewriteLoopExitValues(), llvm::simplifyLoopAfterUnroll(), simplifyLoopInst(), simplifyOneLoop(), and llvm::UnrollRuntimeLoopRemainder().
bool LoopInfo::wouldBeOutOfLoopUseRequiringLCSSA | ( | const Value * | V, |
const BasicBlock * | ExitBB | ||
) | const |
Definition at line 943 of file LoopInfo.cpp.
References I.
Referenced by cloneInstructionInExitBlock().
|
friend |
Definition at line 408 of file LoopInfo.h.