summaryrefslogtreecommitdiff
path: root/lib/Analysis
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-04-23 22:28:13 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-04-23 22:28:13 +0000
commit88508669ffb56dff508d26a38a472c392e8cb6bc (patch)
tree9cc15ced2a76a640ba87fd0eba5c42c6f9185f6b /lib/Analysis
parent646d5165025545100e7a5fa1732433f95b0ee817 (diff)
downloadllvm-88508669ffb56dff508d26a38a472c392e8cb6bc.tar.gz
llvm-88508669ffb56dff508d26a38a472c392e8cb6bc.tar.bz2
llvm-88508669ffb56dff508d26a38a472c392e8cb6bc.tar.xz
[LCG] Switch the primary SCC building code to use the negative low-link
values rather than an expensive dense map query to test whether children have already been popped into an SCC. This matches the incremental SCC building code. I've also included the assert that I put there but updated both of their text. No functionality changed here. I still don't have any great ideas for sharing the code between the two implementations, but I may try a brute-force approach to factoring it at some point. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207042 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r--lib/Analysis/LazyCallGraph.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Analysis/LazyCallGraph.cpp b/lib/Analysis/LazyCallGraph.cpp
index 48d43ea02e..4ad637583e 100644
--- a/lib/Analysis/LazyCallGraph.cpp
+++ b/lib/Analysis/LazyCallGraph.cpp
@@ -260,7 +260,7 @@ LazyCallGraph::SCC::removeInternalEdge(LazyCallGraph &G, Node &Caller,
// Track the lowest link of the childen, if any are still in the stack.
// Any child not on the stack will have a LowLink of -1.
assert(ChildN->LowLink != 0 &&
- "Impossible with a non-zero DFS number.");
+ "Low-link must not be zero with a non-zero DFS number.");
if (ChildN->LowLink >= 0 && ChildN->LowLink < N->LowLink)
N->LowLink = ChildN->LowLink;
}
@@ -465,7 +465,9 @@ LazyCallGraph::SCC *LazyCallGraph::getNextSCCInPostOrder() {
}
// Track the lowest link of the childen, if any are still in the stack.
- if (ChildN->LowLink < N->LowLink && !SCCMap.count(&ChildN->getFunction()))
+ assert(ChildN->LowLink != 0 &&
+ "Low-link must not be zero with a non-zero DFS number.");
+ if (ChildN->LowLink >= 0 && ChildN->LowLink < N->LowLink)
N->LowLink = ChildN->LowLink;
}
// No more children to process for this stack entry.