Undo previous check-in.

Reintroduce recursive assignDFSNumber().

llvm-svn: 30380
This commit is contained in:
Devang Patel 2006-09-14 21:43:24 +00:00
parent 46d710e6ea
commit 9ce9df5912
2 changed files with 10 additions and 34 deletions

View File

@ -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;

View File

@ -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
//===----------------------------------------------------------------------===//