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

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

Public Member Functions
MachineLoopInfo ()=default
MachineLoopInfo (MachineDominatorTree &MDT)
MachineLoopInfo (MachineLoopInfo &&)=default
MachineLoopInfo (const MachineLoopInfo &)=delete
MachineLoopInfo & operator= (const MachineLoopInfo &)=delete
LLVM_ABI bool invalidate (MachineFunction &, const PreservedAnalyses &PA, MachineFunctionAnalysisManager::Invalidator &)
Handle invalidation explicitly.
LLVM_ABI MachineBasicBlock * findLoopPreheader (MachineLoop *L, bool SpeculativePreheader=false, bool FindMultiLoopPreheader=false) const
Find the block that either is the loop preheader, or could speculatively be used as the preheader.
LLVM_ABI void calculate (MachineDominatorTree &MDT)
Calculate the natural loop information.
Public Member Functions inherited from llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >
~LoopInfoBase ()
void releaseMemory ()
MachineLoop * AllocateLoop (ArgsTy &&...Args)
iterator begin () const
iterator end () const
reverse_iterator rbegin () const
reverse_iterator rend () const
bool empty () const
SmallVector< MachineLoop *, 4 > getLoopsInPreorder () const
Return all of the loops in the function in preorder across the loop nests, with siblings in forward program order.
SmallVector< MachineLoop *, 4 > getLoopsInReverseSiblingPreorder () const
Return all of the loops in the function in preorder across the loop nests, with siblings in reverse program order.
MachineLoop * getLoopFor (const MachineBasicBlock *BB) const
Return the inner most loop that BB lives in.
const MachineLoop * operator[] (const MachineBasicBlock *BB) const
Same as getLoopFor.
unsigned getLoopDepth (const MachineBasicBlock *BB) const
Return the loop nesting level of the specified block.
MachineLoop * getSmallestCommonLoop (MachineLoop *A, MachineLoop *B) const
Find the innermost loop containing both given loops.
bool isLoopHeader (const MachineBasicBlock *BB) const
const std::vector< MachineLoop * > & getTopLevelLoops () const
Return the top-level loops.
std::vector< MachineLoop * > & getTopLevelLoopsVector ()
Return the top-level loops.
MachineLoop * removeLoop (iterator I)
This removes the specified top-level loop from this loop info object.
void changeLoopFor (MachineBasicBlock *BB, MachineLoop *L)
Change the top-level loop that contains BB to the specified loop.
void changeTopLevelLoop (MachineLoop *OldLoop, MachineLoop *NewLoop)
Replace the specified loop in the top-level loops list with the indicated loop.
void addTopLevelLoop (MachineLoop *New)
This adds the specified loop to the collection of top-level loops.
void removeBlock (MachineBasicBlock *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< MachineBasicBlock, false > &DomTree)
Create the loop forest using a stable algorithm.
void print (raw_ostream &OS) const
void verify (const DominatorTreeBase< MachineBasicBlock, false > &DomTree) const
void destroy (MachineLoop *L)
Destroy a loop that has been removed from the LoopInfo nest.
Additional Inherited Members
Public Types inherited from llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >
using iterator
iterator/begin/end - The interface to the top-level loops in the current function.
using reverse_iterator
Static Public Member Functions inherited from llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >
static bool isNotAlreadyContainedIn (const MachineLoop *SubLoop, const MachineLoop *ParentLoop)

Definition at line 109 of file MachineLoopInfo.h.

llvm::MachineLoopInfo::MachineLoopInfo ( ) default

Referenced by MachineLoopInfo(), MachineLoopInfo(), and operator=().

MachineLoopInfo() [2/4]

MachineLoopInfo() [3/4]

References MachineLoopInfo().

MachineLoopInfo() [4/4]

References MachineLoopInfo().

calculate()

findLoopPreheader()

Find the block that either is the loop preheader, or could speculatively be used as the preheader.

This is e.g. useful to place loop setup code. Code that cannot be speculated should not be placed here. SpeculativePreheader is controlling whether it also tries to find the speculative preheader if the regular preheader is not present. With FindMultiLoopPreheader = false, nullptr will be returned if the found preheader is the preheader of multiple loops.

Definition at line 149 of file MachineLoopInfo.cpp.

References llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >::getLoopFor(), llvm::MachineBasicBlock::hasAddressTaken(), P, PB(), llvm::MachineBasicBlock::pred_size(), llvm::MachineBasicBlock::predecessors(), llvm::MachineBasicBlock::successors(), and T.

Referenced by operator=().

invalidate()

operator=()

LoopBase< MachineBasicBlock, MachineLoop >

MachineLoopInfoWrapperPass


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