10 #ifndef LLVM_CODEGEN_MACHINEREGIONINFO_H
11 #define LLVM_CODEGEN_MACHINEREGIONINFO_H
24 class MachineDominatorTree;
25 struct MachinePostDominatorTree;
27 class MachineRegionNode;
28 class MachineRegionInfo;
124 assert(!isSubRegion() &&
"This is not a MachineBasicBlock RegionNode!");
131 assert(isSubRegion() &&
"This is not a subregion RegionNode!");
175 extern template class RegionBase<RegionTraits<MachineFunction>>;
176 extern template class RegionNodeBase<RegionTraits<MachineFunction>>;
177 extern template class RegionInfoBase<RegionTraits<MachineFunction>>;
unsigned succ_size() const
MachineRegion(MachineBasicBlock *Entry, MachineBasicBlock *Exit, MachineRegionInfo *RI, MachineDominatorTree *DT, MachineRegion *Parent=nullptr)
const_iterator end(StringRef path)
Get end iterator over path.
A Module instance is used to store all the information related to an LLVM module. ...
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterat...
const_iterator begin(StringRef path)
Get begin iterator over path.
static NodeType * getEntryNode(MachineRegionInfo *RI)
bool isSubRegion() const
Is this RegionNode a subregion?
RegionT * getTopLevelRegion() const
bool operator==(const MachineRegionNode &RN) const
Analysis that detects all canonical Regions.
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
bool runOnMachineFunction(MachineFunction &F) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
df_iterator< NodeType *, SmallPtrSet< NodeType *, 8 >, false, GraphTraits< FlatIt< NodeType * > > > nodes_iterator
A RegionNode represents a subregion or a BasicBlock that is part of a Region.
static nodes_iterator nodes_end(MachineRegionInfoPass *RI)
MachineDominanceFrontier DomFrontierT
static nodes_iterator nodes_begin(MachineRegionInfoPass *RI)
void updateStatistics(MachineRegion *R) final
MachinePostDominatorTree PostDomTreeT
Base class for the actual dominator tree node.
RegionNodeGraphTraits(RegionNode, BasicBlock, Region)
MachineRegionNode RegionNodeT
MachineDominatorTree DomTreeT
Represent the analysis usage information of a pass.
void print(raw_ostream &OS, const Module *) const override
print - Print out the internal state of the pass.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
bool operator==(const MachineRegion &RN) const
FlatIt< MachineRegionNode * >::UnknownGraphTypeError NodeType
PostDominatorTree Class - Concrete subclass of DominatorTree that is used to compute the post-dominat...
static nodes_iterator nodes_begin(MachineRegionInfo *RI)
MachineLoopInfo LoopInfoT
MachineRegionInfo & getRegionInfo()
RegionGraphTraits(Region, RegionNode)
~MachineRegionInfo() override
A single entry single exit Region.
static unsigned getNumSuccessors(MachineBasicBlock *BB)
MachineRegionInfo RegionInfoT
void releaseMemory() override
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memo...
Representation of each machine instruction.
void recalculate(MachineFunction &F, MachineDominatorTree *DT, MachinePostDominatorTree *PDT, MachineDominanceFrontier *DF)
void verifyAnalysis() const override
verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis infor...
static nodes_iterator nodes_end(MachineRegionInfo *RI)
const MachineRegionInfo & getRegionInfo() const
~MachineRegionInfoPass() override
This class implements an extremely fast bulk output stream that can only output to a stream...
df_iterator< NodeType *, SmallPtrSet< NodeType *, 8 >, false, GraphTraits< FlatIt< NodeType * > > > nodes_iterator
MachineDomTreeNode DomTreeNodeT
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
static NodeType * getEntryNode(MachineRegionInfoPass *RI)
MachineRegionNode(MachineRegion *Parent, MachineBasicBlock *Entry, bool isSubRegion=false)