31 "Machine Natural Loop Construction",
true,
true)
40 LI.analyze(getAnalysis<MachineDominatorTree>().getBase());
92 bool SpeculativePreheader)
const {
96 if (!SpeculativePreheader)
125 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds...
bool isLoopExiting(const BlockT *BB) const
True if terminator in the block can branch to another block that is outside of the current loop...
MachineBasicBlock * findLoopPreheader(MachineLoop *L, bool SpeculativePreheader=false) const
Find the block that either is the loop preheader, or could speculatively be used as the preheader...
BlockT * getHeader() const
machine Machine Natural Loop true
iterator_range< succ_iterator > successors()
BlockT * getLoopLatch() const
If there is a single latch block for this loop, return it.
AnalysisUsage & addRequired()
#define INITIALIZE_PASS_DEPENDENCY(depName)
MachineBasicBlock * getTopBlock()
Return the "top" block in the loop, which is the first block in the linear layout, ignoring any parts of the loop not contiguous with the part that contains the header.
char & MachineLoopInfoID
MachineLoopInfo - This pass is a loop analysis pass.
MachineBasicBlock * getBottomBlock()
Return the "bottom" block in the loop, which is the last block in the linear layout, ignoring any parts of the loop not contiguous with the part that contains the header.
MachineBasicBlock * findLoopControlBlock()
Find the block that contains the loop control variable and the loop test.
COFF::MachineTypes Machine
INITIALIZE_PASS_BEGIN(MachineLoopInfo,"machine-loops","Machine Natural Loop Construction", true, true) INITIALIZE_PASS_END(MachineLoopInfo
MachineLoop * getLoopFor(const MachineBasicBlock *BB) const
Return the innermost loop that BB lives in.
BlockT * getLoopPreheader() const
If there is a preheader for this loop, return it.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
Represent the analysis usage information of a pass.
bool contains(const LoopT *L) const
Return true if the specified loop is contained within in this loop.
INITIALIZE_PASS_END(RegBankSelect, DEBUG_TYPE,"Assign register bank of generic virtual registers", false, false) RegBankSelect
static const unsigned End
BlockT * getExitingBlock() const
If getExitingBlocks would return exactly one block, return that block.
self_iterator getIterator()
iterator_range< pred_iterator > predecessors()
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
Iterator for intrusive lists based on ilist_node.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
void setPreservesAll()
Set by analyses that do not transform their input at all.
bool hasAddressTaken() const
Test whether this block is potentially the target of an indirect branch.
Represents a single loop in the control flow graph.
machine Machine Natural Loop Construction
void print(raw_ostream &OS, unsigned Depth=0, bool Verbose=false) const
Print loop with all the BBs inside it.
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
unsigned pred_size() const
This class builds and contains all of the top-level loop structures in the specified function...