18 #ifndef LLVM_ANALYSIS_DOMINANCEFRONTIER_H
19 #define LLVM_ANALYSIS_DOMINANCEFRONTIER_H
48 inline const std::vector<BasicBlock*> &
getRoots()
const {
return Roots; }
67 assert(
find(BB) ==
end() &&
"Block already in DominanceFrontier!");
68 return Frontiers.insert(std::make_pair(BB, frontier)).first;
73 assert(
find(BB) !=
end() &&
"Block is not in DominanceFrontier!");
80 assert(I !=
end() &&
"BB is not in DominanceFrontier!");
81 I->second.insert(Node);
85 assert(I !=
end() &&
"BB is not in DominanceFrontier!");
86 assert(I->second.count(Node) &&
"Node is not in DominanceFrontier of BB");
87 I->second.erase(Node);
93 std::set<BasicBlock *> tmpSet;
94 for (DomSetType::const_iterator
I = DS2.begin(),
95 E = DS2.end();
I != E; ++
I)
98 for (DomSetType::const_iterator
I = DS1.begin(),
99 E = DS1.end();
I != E; ) {
102 if (tmpSet.erase(Node) == 0)
119 for (DomSetMapType::const_iterator
I = Other.
begin(),
120 E = Other.
end();
I != E; ++
I)
121 tmpFrontiers.insert(std::make_pair(
I->first,
I->second));
123 for (DomSetMapType::iterator
I = tmpFrontiers.begin(),
124 E = tmpFrontiers.end();
I != E; ) {
134 tmpFrontiers.erase(Node);
137 if (!tmpFrontiers.empty())
157 virtual void anchor();
166 assert(
Roots.size() == 1 &&
"Should always have entry node!");
174 assert(Roots.size() == 1 &&
"Only one entry block for forward domfronts!");
const DomSetType & calculate(const DominatorTree &DT, const DomTreeNode *Node)
const_iterator end() const
static PassRegistry * getPassRegistry()
virtual void print(raw_ostream &OS, const Module *=0) const
The main container class for the LLVM Intermediate Representation.
DomSetMapType::const_iterator const_iterator
const_iterator begin() const
std::map< BasicBlock *, DomSetType > DomSetMapType
AnalysisUsage & addRequired()
const_iterator find(BasicBlock *B) const
const std::vector< BasicBlock * > & getRoots() const
ID
LLVM Calling Convention Representation.
BasicBlock * getRoot() const
virtual void releaseMemory()
std::set< BasicBlock * > DomSetType
bool compare(DominanceFrontierBase &Other) const
LLVM Basic Block Representation.
virtual void getAnalysisUsage(AnalysisUsage &AU) const
void dump() const
dump - Dump the dominance frontier to dbgs().
virtual bool runOnFunction(Function &)
DominanceFrontierBase(char &ID, bool isPostDom)
DomSetMapType::iterator iterator
bool isPostDominator() const
void removeBlock(BasicBlock *BB)
removeBlock - Remove basic block BB's frontier.
iterator find(BasicBlock *B)
void removeFromFrontier(iterator I, BasicBlock *Node)
std::vector< BasicBlock * > Roots
iterator addBasicBlock(BasicBlock *BB, const DomSetType &frontier)
void initializeDominanceFrontierPass(PassRegistry &)
const bool IsPostDominators
bool compareDomSet(DomSetType &DS1, const DomSetType &DS2) const
void addToFrontier(iterator I, BasicBlock *Node)
const std::vector< BasicBlock * > & getRoots() const