git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101548 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2010-04-16 21:57:10 +00:00
parent c93760c3e5
commit 8b146240a2

View File

@@ -85,13 +85,14 @@ class scc_iterator
if (!nodeVisitNumbers.count(childN)) {
// this node has never been seen
DFSVisitOne(childN);
} else {
continue;
}
unsigned childNum = nodeVisitNumbers[childN];
if (MinVisitNumStack.back() > childNum)
MinVisitNumStack.back() = childNum;
}
}
}
// Compute the next SCC using the DFS traversal.
void GetNextSCC() {
@@ -100,7 +101,7 @@ class scc_iterator
while (!VisitStack.empty()) {
DFSVisitChildren();
assert(VisitStack.back().second ==GT::child_end(VisitStack.back().first));
NodeType* visitingN = VisitStack.back().first;
NodeType *visitingN = VisitStack.back().first;
unsigned minVisitNum = MinVisitNumStack.back();
VisitStack.pop_back();
MinVisitNumStack.pop_back();
@@ -111,7 +112,9 @@ class scc_iterator
// " : minVisitNum = " << minVisitNum << "; Node visit num = " <<
// nodeVisitNumbers[visitingN] << "\n";
if (minVisitNum == nodeVisitNumbers[visitingN]) {
if (minVisitNum != nodeVisitNumbers[visitingN])
continue;
// A full SCC is on the SCCNodeStack! It includes all nodes below
// visitingN on the stack. Copy those nodes to CurrentSCC,
// reset their minVisit values, and return (this suspends
@@ -124,7 +127,6 @@ class scc_iterator
return;
}
}
}
inline scc_iterator(NodeType *entryN) : visitNum(0) {
DFSVisitOne(entryN);
@@ -186,22 +188,22 @@ public:
// Global constructor for the SCC iterator.
template <class T>
scc_iterator<T> scc_begin(const T& G) {
scc_iterator<T> scc_begin(const T &G) {
return scc_iterator<T>::begin(G);
}
template <class T>
scc_iterator<T> scc_end(const T& G) {
scc_iterator<T> scc_end(const T &G) {
return scc_iterator<T>::end(G);
}
template <class T>
scc_iterator<Inverse<T> > scc_begin(const Inverse<T>& G) {
scc_iterator<Inverse<T> > scc_begin(const Inverse<T> &G) {
return scc_iterator<Inverse<T> >::begin(G);
}
template <class T>
scc_iterator<Inverse<T> > scc_end(const Inverse<T>& G) {
scc_iterator<Inverse<T> > scc_end(const Inverse<T> &G) {
return scc_iterator<Inverse<T> >::end(G);
}