aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Analysis/ET-Forest.h11
-rw-r--r--lib/VMCore/Dominators.cpp33
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
//===----------------------------------------------------------------------===//