diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-04-23 10:31:17 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-04-23 10:31:17 +0000 |
commit | b9619110af557a73bf18c504d061d2cbb8507de2 (patch) | |
tree | 786d0ab1a015a0e7443d89e38f04f8de721fb973 /include | |
parent | 57683b8abad0c6144cb5e88172509c3afc9fc97a (diff) | |
download | llvm-b9619110af557a73bf18c504d061d2cbb8507de2.tar.gz llvm-b9619110af557a73bf18c504d061d2cbb8507de2.tar.bz2 llvm-b9619110af557a73bf18c504d061d2cbb8507de2.tar.xz |
[LCG] Implement Tarjan's algorithm correctly this time. We have to walk
up the stack finishing the exploration of each entries children before
we're finished in addition to accounting for their low-links. Added
a unittest that really hammers home the need for this with interlocking
cycles that would each appear distinct otherwise and crash or compute
the wrong result. As part of this, nuke a stale fixme and bring the rest
of the implementation still more closely in line with the original
algorithm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206966 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Analysis/LazyCallGraph.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/llvm/Analysis/LazyCallGraph.h b/include/llvm/Analysis/LazyCallGraph.h index cf74101c6e..aefad6f913 100644 --- a/include/llvm/Analysis/LazyCallGraph.h +++ b/include/llvm/Analysis/LazyCallGraph.h @@ -381,7 +381,8 @@ private: /// \brief Helper to form a new SCC out of the top of a DFSStack-like /// structure. SCC *formSCCFromDFSStack( - SmallVectorImpl<std::pair<Node *, Node::iterator>> &DFSStack); + SmallVectorImpl<std::pair<Node *, Node::iterator>> &DFSStack, + SmallVectorImpl<std::pair<Node *, Node::iterator>>::iterator SCCBegin); /// \brief Retrieve the next node in the post-order SCC walk of the call graph. SCC *getNextSCCInPostOrder(); |