Go to the documentation of this file.
29 #ifndef LLVM_CODEGEN_MACHINELOOPINFO_H
30 #define LLVM_CODEGEN_MACHINELOOPINFO_H
39 class MachineDominatorTree;
42 extern template class LoopBase<MachineBasicBlock, MachineLoop>;
87 extern template class LoopInfoBase<MachineBasicBlock, MachineLoop>;
115 findLoopPreheader(
MachineLoop *L,
bool SpeculativePreheader =
false,
116 bool FindMultiLoopPreheader =
false)
const;
204 #endif // LLVM_CODEGEN_MACHINELOOPINFO_H
static ChildIteratorType child_begin(NodeRef N)
This is an optimization pass for GlobalISel generic memory operations.
MachineLoop * getLoopFor(const MachineBasicBlock *BB) const
Return the innermost loop that BB lives in.
void changeTopLevelLoop(MachineLoop *OldLoop, MachineLoop *NewLoop)
Replace the specified loop in the top-level loops list with the indicated loop.
LoopInfoBase< MachineBasicBlock, MachineLoop >::iterator iterator
The iterator interface to the top-level loops in the current function.
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
void changeLoopFor(BlockT *BB, LoopT *L)
Change the top-level loop that contains BB to the specified loop.
void removeBlock(BlockT *BB)
This method completely removes BB from all data structures, including all of the Loop objects it is n...
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
void changeLoopFor(MachineBasicBlock *BB, MachineLoop *L)
Change the top-level loop that contains BB to the specified loop.
void releaseMemory() override
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memo...
static ChildIteratorType child_begin(NodeRef N)
Represent the analysis usage information of a pass.
void addTopLevelLoop(LoopT *New)
This adds the specified loop to the collection of top-level loops.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
bool isLoopHeader(const MachineBasicBlock *BB) const
True if the block is a loop header node.
MachineLoopInfo(MachineDominatorTree &MDT)
Representation of each machine instruction.
MachineLoop * removeLoop(iterator I)
This removes the specified top-level loop from this loop info object.
LoopT * getLoopFor(const BlockT *BB) const
Return the inner most loop that BB lives in.
void addTopLevelLoop(MachineLoop *New)
This adds the specified loop to the collection of top-level loops.
MachineLoopInfo::iterator ChildIteratorType
unsigned getLoopDepth(const BlockT *BB) const
Return the loop nesting level of the specified block.
LoopT * removeLoop(iterator I)
This removes the specified top-level loop from this loop info object.
MachineLoopInfo::iterator ChildIteratorType
bool isLoopHeader(const BlockT *BB) const
static ChildIteratorType child_end(NodeRef N)
static ChildIteratorType child_end(NodeRef N)
This class builds and contains all of the top-level loop structures in the specified function.
static NodeRef getEntryNode(MachineLoop *L)
static NodeRef getEntryNode(const MachineLoop *L)
unsigned getLoopDepth(const MachineBasicBlock *BB) const
Return the loop nesting level of the specified block.
LoopInfoBase< MachineBasicBlock, MachineLoop > & getBase()
void changeTopLevelLoop(LoopT *OldLoop, LoopT *NewLoop)
Replace the specified loop in the top-level loops list with the indicated loop.
void removeBlock(MachineBasicBlock *BB)
This method completely removes BB from all data structures, including all of the Loop objects it is n...
std::vector< LoopT * >::const_iterator iterator
iterator/begin/end - The interface to the top-level loops in the current function.
Common register allocation spilling lr str ldr sxth r3 ldr mla r4 can lr mov lr str ldr sxth r3 mla r4 and then merge mul and lr str ldr sxth r3 mla r4 It also increase the likelihood the store may become dead bb27 Successors according to LLVM BB
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
const MachineLoop * operator[](const MachineBasicBlock *BB) const
Same as getLoopFor.