LLVM  6.0.0svn
Classes | Public Member Functions | Static Public Attributes | List of all members
llvm::MachineDominatorTree Class Reference

DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree. More...

#include "llvm/CodeGen/MachineDominators.h"

Inheritance diagram for llvm::MachineDominatorTree:
Inheritance graph
[legend]
Collaboration diagram for llvm::MachineDominatorTree:
Collaboration graph
[legend]

Public Member Functions

 MachineDominatorTree ()
 
DomTreeBase< MachineBasicBlock > & getBase ()
 
void getAnalysisUsage (AnalysisUsage &AU) const override
 getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. More...
 
const SmallVectorImpl< MachineBasicBlock * > & getRoots () const
 getRoots - Return the root blocks of the current CFG. More...
 
MachineBasicBlockgetRoot () const
 
MachineDomTreeNodegetRootNode () const
 
bool runOnMachineFunction (MachineFunction &F) override
 runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis. More...
 
bool dominates (const MachineDomTreeNode *A, const MachineDomTreeNode *B) const
 
bool dominates (const MachineBasicBlock *A, const MachineBasicBlock *B) const
 
bool dominates (const MachineInstr *A, const MachineInstr *B) const
 
bool properlyDominates (const MachineDomTreeNode *A, const MachineDomTreeNode *B) const
 
bool properlyDominates (const MachineBasicBlock *A, const MachineBasicBlock *B) const
 
MachineBasicBlockfindNearestCommonDominator (MachineBasicBlock *A, MachineBasicBlock *B)
 findNearestCommonDominator - Find nearest common dominator basic block for basic block A and B. More...
 
MachineDomTreeNodeoperator[] (MachineBasicBlock *BB) const
 
MachineDomTreeNodegetNode (MachineBasicBlock *BB) const
 getNode - return the (Post)DominatorTree node for the specified basic block. More...
 
MachineDomTreeNodeaddNewBlock (MachineBasicBlock *BB, MachineBasicBlock *DomBB)
 addNewBlock - Add a new node to the dominator tree information. More...
 
void changeImmediateDominator (MachineBasicBlock *N, MachineBasicBlock *NewIDom)
 changeImmediateDominator - This method is used to update the dominator tree information when a node's immediate dominator changes. More...
 
void changeImmediateDominator (MachineDomTreeNode *N, MachineDomTreeNode *NewIDom)
 
void eraseNode (MachineBasicBlock *BB)
 eraseNode - Removes a node from the dominator tree. More...
 
void splitBlock (MachineBasicBlock *NewBB)
 splitBlock - BB is split and now it has one successor. More...
 
bool isReachableFromEntry (const MachineBasicBlock *A)
 isReachableFromEntry - Return true if A is dominated by the entry block of the function containing it. More...
 
void releaseMemory () override
 releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memory when it is no longer needed. More...
 
void verifyAnalysis () const override
 verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis information. More...
 
void print (raw_ostream &OS, const Module *) const override
 print - Print out the internal state of the pass. More...
 
void recordSplitCriticalEdge (MachineBasicBlock *FromBB, MachineBasicBlock *ToBB, MachineBasicBlock *NewBB)
 Record that the critical edge (FromBB, ToBB) has been split with NewBB. More...
 
void verifyDomTree () const
 Verify the correctness of the domtree by re-computing it. More...
 
- Public Member Functions inherited from llvm::MachineFunctionPass
bool doInitialization (Module &) override
 doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. More...
 
- Public Member Functions inherited from llvm::FunctionPass
 FunctionPass (char &pid)
 
PasscreatePrinterPass (raw_ostream &OS, const std::string &Banner) const override
 createPrinterPass - Get a function printer pass. More...
 
void assignPassManager (PMStack &PMS, PassManagerType T) override
 Find appropriate Function Pass Manager or Call Graph Pass Manager in the PM Stack and add self into that manager. More...
 
PassManagerType getPotentialPassManagerType () const override
 Return what kind of Pass Manager can manage this pass. More...
 
- Public Member Functions inherited from llvm::Pass
 Pass (PassKind K, char &pid)
 
 Pass (const Pass &)=delete
 
Passoperator= (const Pass &)=delete
 
virtual ~Pass ()
 
PassKind getPassKind () const
 
virtual StringRef getPassName () const
 getPassName - Return a nice clean name for a pass. More...
 
AnalysisID getPassID () const
 getPassID - Return the PassID number that corresponds to this pass. More...
 
virtual bool doFinalization (Module &)
 doFinalization - Virtual method overriden by subclasses to do any necessary clean up after all passes have run. More...
 
void dump () const
 
virtual void preparePassManager (PMStack &)
 Check if available pass managers are suitable for this pass or not. More...
 
void setResolver (AnalysisResolver *AR)
 
AnalysisResolvergetResolver () const
 
virtual void * getAdjustedAnalysisPointer (AnalysisID ID)
 getAdjustedAnalysisPointer - This method is used when a pass implements an analysis interface through multiple inheritance. More...
 
virtual ImmutablePassgetAsImmutablePass ()
 
virtual PMDataManagergetAsPMDataManager ()
 
virtual void dumpPassStructure (unsigned Offset=0)
 
template<typename AnalysisType >
AnalysisType * getAnalysisIfAvailable () const
 getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to get analysis information that might be around, for example to update it. More...
 
bool mustPreserveAnalysisID (char &AID) const
 mustPreserveAnalysisID - This method serves the same function as getAnalysisIfAvailable, but works if you just have an AnalysisID. More...
 
template<typename AnalysisType >
AnalysisType & getAnalysis () const
 getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. More...
 
template<typename AnalysisType >
AnalysisType & getAnalysis (Function &F)
 getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. More...
 
template<typename AnalysisType >
AnalysisType & getAnalysisID (AnalysisID PI) const
 
template<typename AnalysisType >
AnalysisType & getAnalysisID (AnalysisID PI, Function &F)
 

Static Public Attributes

static char ID = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::Pass
static const PassInfolookupPassInfo (const void *TI)
 
static const PassInfolookupPassInfo (StringRef Arg)
 
static PasscreatePass (AnalysisID ID)
 
- Protected Member Functions inherited from llvm::MachineFunctionPass
 MachineFunctionPass (char &ID)
 
void getAnalysisUsage (AnalysisUsage &AU) const override
 getAnalysisUsage - Subclasses that override getAnalysisUsage must call this. More...
 
virtual MachineFunctionProperties getRequiredProperties () const
 
virtual MachineFunctionProperties getSetProperties () const
 
virtual MachineFunctionProperties getClearedProperties () const
 
- Protected Member Functions inherited from llvm::FunctionPass
bool skipFunction (const Function &F) const
 Optional passes call this function to check whether the pass should be skipped. More...
 

Detailed Description

DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.

Definition at line 47 of file MachineDominators.h.

Constructor & Destructor Documentation

◆ MachineDominatorTree()

MachineDominatorTree::MachineDominatorTree ( )

Member Function Documentation

◆ addNewBlock()

MachineDomTreeNode* llvm::MachineDominatorTree::addNewBlock ( MachineBasicBlock BB,
MachineBasicBlock DomBB 
)
inline

addNewBlock - Add a new node to the dominator tree information.

This creates a new node as a child of DomBB dominator node,linking it into the children list of the immediate dominator.

Definition at line 182 of file MachineDominators.h.

Referenced by isImmValidForOpcode().

◆ changeImmediateDominator() [1/2]

void llvm::MachineDominatorTree::changeImmediateDominator ( MachineBasicBlock N,
MachineBasicBlock NewIDom 
)
inline

changeImmediateDominator - This method is used to update the dominator tree information when a node's immediate dominator changes.

Definition at line 191 of file MachineDominators.h.

Referenced by isImmValidForOpcode().

◆ changeImmediateDominator() [2/2]

void llvm::MachineDominatorTree::changeImmediateDominator ( MachineDomTreeNode N,
MachineDomTreeNode NewIDom 
)
inline

Definition at line 197 of file MachineDominators.h.

◆ dominates() [1/3]

bool llvm::MachineDominatorTree::dominates ( const MachineDomTreeNode A,
const MachineDomTreeNode B 
) const
inline

◆ dominates() [2/3]

bool llvm::MachineDominatorTree::dominates ( const MachineBasicBlock A,
const MachineBasicBlock B 
) const
inline

Definition at line 119 of file MachineDominators.h.

◆ dominates() [3/3]

bool llvm::MachineDominatorTree::dominates ( const MachineInstr A,
const MachineInstr B 
) const
inline

◆ eraseNode()

void llvm::MachineDominatorTree::eraseNode ( MachineBasicBlock BB)
inline

eraseNode - Removes a node from the dominator tree.

Block must not dominate any other blocks. Removes node from its immediate dominator's children list. Deletes dominator node associated with basic block BB.

Definition at line 206 of file MachineDominators.h.

◆ findNearestCommonDominator()

MachineBasicBlock* llvm::MachineDominatorTree::findNearestCommonDominator ( MachineBasicBlock A,
MachineBasicBlock B 
)
inline

findNearestCommonDominator - Find nearest common dominator basic block for basic block A and B.

If there is no such block then return NULL.

Definition at line 160 of file MachineDominators.h.

Referenced by FindIDom(), hoistAndMergeSGPRInits(), InstructionStoresToFI(), isMinSize(), llvm::SplitEditor::overlapIntv(), and PlaceBlockMarker().

◆ getAnalysisUsage()

void llvm::MachineDominatorTree::getAnalysisUsage ( AnalysisUsage ) const
overridevirtual

getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job.

If a pass specifies that it uses a particular analysis result to this function, it can then use the getAnalysis<AnalysisType>() function, below.

Reimplemented from llvm::Pass.

◆ getBase()

DomTreeBase<MachineBasicBlock>& llvm::MachineDominatorTree::getBase ( )
inline

Definition at line 84 of file MachineDominators.h.

◆ getNode()

MachineDomTreeNode* llvm::MachineDominatorTree::getNode ( MachineBasicBlock BB) const
inline

getNode - return the (Post)DominatorTree node for the specified basic block.

This is the same as using operator[] on this class.

Definition at line 174 of file MachineDominators.h.

Referenced by llvm::LiveRangeCalc::calculateValues(), collectDebugValues(), llvm::rdf::DataFlowGraph::getNextShadow(), llvm::rdf::CopyPropagation::interpretAsCopy(), and isImmValidForOpcode().

◆ getRoot()

MachineBasicBlock* llvm::MachineDominatorTree::getRoot ( ) const
inline

Definition at line 101 of file MachineDominators.h.

Referenced by verifyDomTree().

◆ getRootNode()

MachineDomTreeNode* llvm::MachineDominatorTree::getRootNode ( ) const
inline

◆ getRoots()

const SmallVectorImpl<MachineBasicBlock*>& llvm::MachineDominatorTree::getRoots ( ) const
inline

getRoots - Return the root blocks of the current CFG.

This may include multiple blocks if we are computing post dominators. For forward dominators, this will always be a single block (the entry node).

Definition at line 96 of file MachineDominators.h.

◆ isReachableFromEntry()

bool llvm::MachineDominatorTree::isReachableFromEntry ( const MachineBasicBlock A)
inline

isReachableFromEntry - Return true if A is dominated by the entry block of the function containing it.

Definition at line 220 of file MachineDominators.h.

References print().

◆ operator[]()

MachineDomTreeNode* llvm::MachineDominatorTree::operator[] ( MachineBasicBlock BB) const
inline

Definition at line 166 of file MachineDominators.h.

◆ print()

void MachineDominatorTree::print ( raw_ostream OS,
const Module M 
) const
overridevirtual

print - Print out the internal state of the pass.

This is called by Analyze to print out the contents of an analysis. Otherwise it is not necessary to implement this method. Beware that the module pointer MAY be null. This automatically forwards to a virtual function that does not provide the Module* in case the analysis doesn't need it it can just be ignored.

Reimplemented from llvm::Pass.

Definition at line 72 of file MachineDominators.cpp.

References assert(), llvm::SmallVectorBase::empty(), llvm::MachineBasicBlock::predecessors(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

◆ properlyDominates() [1/2]

bool llvm::MachineDominatorTree::properlyDominates ( const MachineDomTreeNode A,
const MachineDomTreeNode B 
) const
inline

◆ properlyDominates() [2/2]

bool llvm::MachineDominatorTree::properlyDominates ( const MachineBasicBlock A,
const MachineBasicBlock B 
) const
inline

Definition at line 152 of file MachineDominators.h.

◆ recordSplitCriticalEdge()

void llvm::MachineDominatorTree::recordSplitCriticalEdge ( MachineBasicBlock FromBB,
MachineBasicBlock ToBB,
MachineBasicBlock NewBB 
)
inline

Record that the critical edge (FromBB, ToBB) has been split with NewBB.

This is best to use this method instead of directly update the underlying information, because this helps mitigating the number of time the DT information is invalidated.

Note
Do not use this method with regular edges.
To benefit from the compile time improvement incurred by this method, the users of this method have to limit the queries to the DT interface between two edges splitting. In other words, they have to pack the splitting of critical edges as much as possible.

Definition at line 243 of file MachineDominators.h.

References assert(), llvm::SmallSet< T, N, C >::insert(), and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().

◆ releaseMemory()

void MachineDominatorTree::releaseMemory ( )
overridevirtual

releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memory when it is no longer needed.

The default behavior of passes is to hold onto memory for the entire duration of their lifetime (which is the entire compile time). For pipelined passes, this is not a big deal because that memory gets recycled every time the pass is invoked on another program unit. For IP passes, it is more important to free memory when it is unused.

Optionally implement this function to release pass memory when it is no longer used.

Reimplemented from llvm::Pass.

Definition at line 62 of file MachineDominators.cpp.

References llvm::SmallVectorImpl< T >::clear().

◆ runOnMachineFunction()

bool MachineDominatorTree::runOnMachineFunction ( MachineFunction MF)
overridevirtual

runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis.

Implements llvm::MachineFunctionPass.

Definition at line 49 of file MachineDominators.cpp.

References llvm::SmallVectorImpl< T >::clear().

Referenced by isMinSize().

◆ splitBlock()

void llvm::MachineDominatorTree::splitBlock ( MachineBasicBlock NewBB)
inline

splitBlock - BB is split and now it has one successor.

Update dominator tree to reflect this change.

Definition at line 213 of file MachineDominators.h.

◆ verifyAnalysis()

void MachineDominatorTree::verifyAnalysis ( ) const
overridevirtual

verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis information.

Reimplemented from llvm::Pass.

Definition at line 67 of file MachineDominators.cpp.

References verifyDomTree().

◆ verifyDomTree()

void MachineDominatorTree::verifyDomTree ( ) const

Verify the correctness of the domtree by re-computing it.

This should only be used for debugging as it aborts the program if the verification fails.

Definition at line 142 of file MachineDominators.cpp.

References llvm::errs(), F(), llvm::MachineBasicBlock::getParent(), getRoot(), getRootNode(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getRootNode(), llvm::DominatorTreeBase< NodeT, IsPostDom >::print(), and llvm::DominatorTreeBase< NodeT, IsPostDom >::recalculate().

Referenced by verifyAnalysis().

Member Data Documentation

◆ ID

char MachineDominatorTree::ID = 0
static

Definition at line 80 of file MachineDominators.h.


The documentation for this class was generated from the following files: