X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAnalysis%2FDominators.h;h=a38d7d199a5d2565b67012b5f5125a8acff2a0a3;hb=3d1b0c73319ec1d01ec927ead03a09bbc62c7aea;hp=775f44e5c65f31a16c7940de0d5a16d33380089d;hpb=a24e09df76d327e9fdefa8e6801fedc2b6ad91d3;p=oota-llvm.git diff --git a/include/llvm/Analysis/Dominators.h b/include/llvm/Analysis/Dominators.h index 775f44e5c65..a38d7d199a5 100644 --- a/include/llvm/Analysis/Dominators.h +++ b/include/llvm/Analysis/Dominators.h @@ -20,6 +20,7 @@ #include "llvm/Pass.h" #include + class Instruction; template struct GraphTraits; @@ -347,12 +348,12 @@ private: // DominatorTree GraphTraits specialization so the DominatorTree can be // iterable by generic graph iterators. -template <> struct GraphTraits { +template <> struct GraphTraits { typedef DominatorTree::Node NodeType; typedef NodeType::iterator ChildIteratorType; - static NodeType *getEntryNode(DominatorTree *DT) { - return DT->getNode(DT->getRoot()); + static NodeType *getEntryNode(NodeType *N) { + return N; } static inline ChildIteratorType child_begin(NodeType* N) { return N->begin(); @@ -362,6 +363,13 @@ template <> struct GraphTraits { } }; +template <> struct GraphTraits + : public GraphTraits { + static NodeType *getEntryNode(DominatorTree *DT) { + return DT->getNode(DT->getRoot()); + } +}; + //===----------------------------------------------------------------------===// // // DominanceFrontier - Calculate the dominance frontiers for a function. @@ -378,24 +386,26 @@ public: virtual void releaseMemory() { Frontiers.clear(); } // Accessor interface: + typedef DomSetMapType::iterator iterator; typedef DomSetMapType::const_iterator const_iterator; + iterator begin() { return Frontiers.begin(); } const_iterator begin() const { return Frontiers.begin(); } + iterator end() { return Frontiers.end(); } const_iterator end() const { return Frontiers.end(); } - const_iterator find(BasicBlock* B) const { return Frontiers.find(B); } + iterator find(BasicBlock *B) { return Frontiers.find(B); } + const_iterator find(BasicBlock *B) const { return Frontiers.find(B); } void addBasicBlock(BasicBlock *BB, const DomSetType &frontier) { assert(find(BB) == end() && "Block already in DominanceFrontier!"); Frontiers.insert(std::make_pair(BB, frontier)); } - void addToFrontier(BasicBlock *BB, BasicBlock *Node) { - DomSetMapType::iterator I = Frontiers.find(BB); + void addToFrontier(iterator I, BasicBlock *Node) { assert(I != end() && "BB is not in DominanceFrontier!"); I->second.insert(Node); } - void removeFromFrontier(BasicBlock *BB, BasicBlock *Node) { - DomSetMapType::iterator I = Frontiers.find(BB); + void removeFromFrontier(iterator I, BasicBlock *Node) { assert(I != end() && "BB is not in DominanceFrontier!"); assert(I->second.count(Node) && "Node is not in DominanceFrontier of BB"); I->second.erase(Node);