Changes in directory llvm/include/llvm/Analysis:
Dominators.h updated: 1.101 -> 1.102 --- Log message: Maintain DFS number in DomTreeNode itself. This means now ETNodes are not useful anymore. --- Diffs of the changes: (+17 -3) Dominators.h | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-) Index: llvm/include/llvm/Analysis/Dominators.h diff -u llvm/include/llvm/Analysis/Dominators.h:1.101 llvm/include/llvm/Analysis/Dominators.h:1.102 --- llvm/include/llvm/Analysis/Dominators.h:1.101 Mon Jun 11 18:31:22 2007 +++ llvm/include/llvm/Analysis/Dominators.h Mon Jun 11 19:14:41 2007 @@ -65,6 +65,8 @@ DomTreeNode *IDom; ETNode *ETN; std::vector<DomTreeNode*> Children; + int DFSNumIn, DFSNumOut; + public: typedef std::vector<DomTreeNode*>::iterator iterator; typedef std::vector<DomTreeNode*>::const_iterator const_iterator; @@ -80,12 +82,22 @@ inline const std::vector<DomTreeNode*> &getChildren() const { return Children; } inline DomTreeNode(BasicBlock *BB, DomTreeNode *iDom, ETNode *E) - : TheBB(BB), IDom(iDom), ETN(E) { + : TheBB(BB), IDom(iDom), ETN(E), DFSNumIn(-1), DFSNumOut(-1) { if (IDom) ETN->setFather(IDom->getETNode()); } inline DomTreeNode *addChild(DomTreeNode *C) { Children.push_back(C); return C; } void setIDom(DomTreeNode *NewIDom); + + // Return true if this node is dominated by other. Use this only if DFS info is valid. + bool DominatedBy(const DomTreeNode *other) const { + return this->DFSNumIn >= other->DFSNumIn && + this->DFSNumOut <= other->DFSNumOut; + } + + /// assignDFSNumber - Assign In and Out numbers while walking dominator tree + /// in dfs order. + void assignDFSNumber(int num); }; //===----------------------------------------------------------------------===// @@ -214,14 +226,16 @@ ETNode *NodeB = B->getETNode(); if (DFSInfoValid) - return NodeB->DominatedBy(NodeA); + return B->DominatedBy(A); + //return NodeB->DominatedBy(NodeA); // If we end up with too many slow queries, just update the // DFS numbers on the theory that we are going to keep querying. SlowQueries++; if (SlowQueries > 32) { updateDFSNumbers(); - return NodeB->DominatedBy(NodeA); + return B->DominatedBy(A); + //return NodeB->DominatedBy(NodeA); } //return NodeB->DominatedBySlow(NodeA); return dominatedBySlowTreeWalk(A, B); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits