LLVM 22.0.0git
|
#include "llvm/CodeGen/MachineLoopInfo.h"
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. | |
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. |
Friends | |
class | LoopBase< MachineBasicBlock, MachineLoop > |
class | MachineLoopInfoWrapperPass |
Additional Inherited Members | |
Public Types inherited from llvm::LoopInfoBase< MachineBasicBlock, MachineLoop > | |
typedef std::vector< MachineLoop * >::const_iterator | iterator |
iterator/begin/end - The interface to the top-level loops in the current function. | |
typedef std::vector< MachineLoop * >::const_reverse_iterator | 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.
|
default |
Referenced by MachineLoopInfo(), MachineLoopInfo(), and operator=().
|
inlineexplicit |
Definition at line 115 of file MachineLoopInfo.h.
References calculate().
|
default |
References MachineLoopInfo().
|
delete |
References MachineLoopInfo().
void MachineLoopInfo::calculate | ( | MachineDominatorTree & | MDT | ) |
Calculate the natural loop information.
Definition at line 81 of file MachineLoopInfo.cpp.
References llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >::analyze(), and llvm::LoopInfoBase< MachineBasicBlock, MachineLoop >::releaseMemory().
Referenced by MachineLoopInfo(), operator=(), and llvm::MachineBlockFrequencyInfoWrapperPass::runOnMachineFunction().
MachineBasicBlock * MachineLoopInfo::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.
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=().
bool MachineLoopInfo::invalidate | ( | MachineFunction & | , |
const PreservedAnalyses & | PA, | ||
MachineFunctionAnalysisManager::Invalidator & | ) |
Handle invalidation explicitly.
Definition at line 70 of file MachineLoopInfo.cpp.
References llvm::PreservedAnalyses::getChecker().
Referenced by operator=().
|
delete |
References calculate(), findLoopPreheader(), invalidate(), LLVM_ABI, and MachineLoopInfo().
|
friend |
Definition at line 102 of file MachineLoopInfo.h.
|
friend |
Definition at line 111 of file MachineLoopInfo.h.
References MachineLoopInfoWrapperPass.
Referenced by MachineLoopInfoWrapperPass.