diff options
-rw-r--r-- | include/llvm/Analysis/ET-Forest.h | 11 | ||||
-rw-r--r-- | lib/VMCore/Dominators.cpp | 33 |
2 files changed, 10 insertions, 34 deletions
diff --git a/include/llvm/Analysis/ET-Forest.h b/include/llvm/Analysis/ET-Forest.h index ef2b2155c7..b05776a9e0 100644 --- a/include/llvm/Analysis/ET-Forest.h +++ b/include/llvm/Analysis/ET-Forest.h @@ -250,7 +250,16 @@ public: return this->Below(other); } - void assignDFSNumber(int &); + void assignDFSNumber(int &num) { + DFSNumIn = num++; + + if (Son) { + Son->assignDFSNumber(num); + for (ETNode *son = Son->Right; son != Son; son = son->Right) + son->assignDFSNumber(num); + } + DFSNumOut = num++; + } bool hasFather() const { return Father != NULL; diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp index fd193b8d7a..9f7e5d9365 100644 --- a/lib/VMCore/Dominators.cpp +++ b/lib/VMCore/Dominators.cpp @@ -890,39 +890,6 @@ void ETForest::calculate(const ImmediateDominators &ID) { updateDFSNumbers (); } -// Walk ETNode and its children using DFS algorithm and assign -// DFSNumIn and DFSNumOut numbers for each node. -void ETNode::assignDFSNumber(int &num) { - - std::vector<ETNode *> DFSInStack; - std::set<ETNode *> visited; - - DFSInStack.push_back(this); - - visited.insert(this); - - while(!DFSInStack.empty()) { - ETNode *Parent = DFSInStack.back(); - DFSInStack.pop_back(); - Parent->DFSNumIn = num++; - Parent->DFSNumOut = Parent->DFSNumIn + 1; - - ETNode *son = Parent->Son; - if (son && visited.count(son) == 0) { - - DFSInStack.push_back(son); - son->DFSNumIn = Parent->DFSNumIn + 1; - visited.insert(son); - - for (ETNode *s = son->Right; s != son; s = s->Right) { - DFSInStack.push_back(s); - s->DFSNumIn = Parent->DFSNumIn + 1; - visited.insert(s); - } - } - } -} - //===----------------------------------------------------------------------===// // ETForestBase Implementation //===----------------------------------------------------------------------===// |