LLVM  3.7.0
Classes | Public Member Functions | Public Attributes | 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 <MachineDominators.h>

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

Public Member Functions

 MachineDominatorTree ()
 
 ~MachineDominatorTree () override
 
DominatorTreeBase
< 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 std::vector
< 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 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...
 
- Public Member Functions inherited from llvm::FunctionPass
 FunctionPass (char &pid)
 
PasscreatePrinterPass (raw_ostream &O, 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)
 
virtual ~Pass ()
 
PassKind getPassKind () const
 
virtual const char * 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 doInitialization (Module &)
 doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. 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 verifyAnalysis () const
 verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis information. More...
 
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)
 

Public Attributes

DominatorTreeBase
< MachineBasicBlock > * 
DT
 

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...
 
- Protected Member Functions inherited from llvm::FunctionPass
bool skipOptnoneFunction (const Function &F) const
 skipOptnoneFunction - This function has Attribute::OptimizeNone and most transformation passes should skip it. More...
 

Detailed Description

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

Definition at line 41 of file MachineDominators.h.

Constructor & Destructor Documentation

MachineDominatorTree::MachineDominatorTree ( )
MachineDominatorTree::~MachineDominatorTree ( )
override

Definition at line 52 of file MachineDominators.cpp.

References DT.

Member Function Documentation

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 174 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::addNewBlock().

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 183 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::changeImmediateDominator().

void llvm::MachineDominatorTree::changeImmediateDominator ( MachineDomTreeNode N,
MachineDomTreeNode NewIDom 
)
inline
bool llvm::MachineDominatorTree::dominates ( const MachineDomTreeNode A,
const MachineDomTreeNode B 
) const
inline

Definition at line 105 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::dominates().

Referenced by computeADRP(), and isCandidate().

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

Definition at line 111 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::dominates().

bool llvm::MachineDominatorTree::dominates ( const MachineInstr A,
const MachineInstr B 
) const
inline
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 198 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::eraseNode().

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 152 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::findNearestCommonDominator().

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.

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

Definition at line 77 of file MachineDominators.h.

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 166 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::getNode().

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

Definition at line 93 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::getRoot().

MachineDomTreeNode* llvm::MachineDominatorTree::getRootNode ( ) const
inline
const std::vector<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 88 of file MachineDominators.h.

References llvm::DominatorBase< NodeT >::getRoots().

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 212 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::isReachableFromEntry().

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

Definition at line 158 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::getNode().

void MachineDominatorTree::print ( raw_ostream O,
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 60 of file MachineDominators.cpp.

References DT.

bool llvm::MachineDominatorTree::properlyDominates ( const MachineDomTreeNode A,
const MachineDomTreeNode B 
) const
inline
bool llvm::MachineDominatorTree::properlyDominates ( const MachineBasicBlock A,
const MachineBasicBlock B 
) const
inline
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 233 of file MachineDominators.h.

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

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 56 of file MachineDominators.cpp.

References DT.

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 38 of file MachineDominators.cpp.

References llvm::SmallVectorImpl< T >::clear(), and DT.

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 205 of file MachineDominators.h.

References llvm::DominatorTreeBase< N >::splitBlock().

Member Data Documentation

DominatorTreeBase<MachineBasicBlock>* llvm::MachineDominatorTree::DT
char MachineDominatorTree::ID = 0
static

Definition at line 70 of file MachineDominators.h.


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