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!");
177 extern template class RegionBase<RegionTraits<MachineFunction>>;
178 extern template class RegionNodeBase<RegionTraits<MachineFunction>>;
179 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. ...
const_iterator begin(StringRef path)
Get begin iterator over path.
bool isSubRegion() const
Is this RegionNode a subregion?
RegionT * getTopLevelRegion() const
bool operator==(const MachineRegionNode &RN) const
Analysis that detects all canonical Regions.
static NodeRef getEntryNode(MachineRegionInfoPass *RI)
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...
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
df_iterator< NodeRef, df_iterator_default_set< NodeRef >, false, GraphTraits< FlatIt< NodeRef > > > nodes_iterator
Base class for the actual dominator tree node.
RegionNodeGraphTraits(RegionNode, BasicBlock, Region)
df_iterator< NodeRef, df_iterator_default_set< NodeRef >, false, GraphTraits< FlatIt< NodeRef > > > nodes_iterator
MachineRegionNode RegionNodeT
FlatIt< MachineRegionNode * >::UnknownGraphTypeError NodeRef
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
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)
static NodeRef getEntryNode(MachineRegionInfo *RI)
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...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
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...
MachineDomTreeNode DomTreeNodeT
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
MachineRegionNode(MachineRegion *Parent, MachineBasicBlock *Entry, bool isSubRegion=false)