diff options
author | Brian Gesiak <modocache@gmail.com> | 2020-02-17 16:46:33 -0500 |
---|---|---|
committer | Brian Gesiak <modocache@gmail.com> | 2020-02-17 16:59:25 -0500 |
commit | 0deef2e164e1db5e262fb14906c97b01b74a24dd (patch) | |
tree | 72895ae07dfea549e3f7b2bb610fc3af84eda54a /llvm/lib/Analysis/LazyCallGraph.cpp | |
parent | 612c4bf09e014a110c722835d6158ea48ab94cce (diff) | |
download | llvm-0deef2e164e1db5e262fb14906c97b01b74a24dd.zip llvm-0deef2e164e1db5e262fb14906c97b01b74a24dd.tar.gz llvm-0deef2e164e1db5e262fb14906c97b01b74a24dd.tar.bz2 |
Re-land "Add LazyCallGraph API to add function to RefSCC"
This re-commits https://reviews.llvm.org/D70927, which I reverted in
https://reviews.llvm.org/rG28213680b2a7d1fdeea16aa3f3a368879472c72a due
to a buildbot error:
http://lab.llvm.org:8011/builders/clang-cmake-x86_64-avx2-linux/builds/13251
I no longer include a test case that appears to crash when built with the
buildbot's compiler, GCC 5.4.0.
Diffstat (limited to 'llvm/lib/Analysis/LazyCallGraph.cpp')
-rw-r--r-- | llvm/lib/Analysis/LazyCallGraph.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/llvm/lib/Analysis/LazyCallGraph.cpp b/llvm/lib/Analysis/LazyCallGraph.cpp index cdf1d55..0d647cb 100644 --- a/llvm/lib/Analysis/LazyCallGraph.cpp +++ b/llvm/lib/Analysis/LazyCallGraph.cpp @@ -1567,12 +1567,17 @@ void LazyCallGraph::removeDeadFunction(Function &F) { } void LazyCallGraph::addNewFunctionIntoSCC(Function &NewF, SCC &C) { - Node &CGNode = get(NewF); - CGNode.DFSNumber = CGNode.LowLink = -1; - CGNode.populate(); - C.Nodes.push_back(&CGNode); - SCCMap[&CGNode] = &C; - NodeMap[&NewF] = &CGNode; + addNodeToSCC(C, createNode(NewF)); +} + +void LazyCallGraph::addNewFunctionIntoRefSCC(Function &NewF, RefSCC &RC) { + Node &N = createNode(NewF); + + auto *C = createSCC(RC, SmallVector<Node *, 1>()); + addNodeToSCC(*C, N); + + RC.SCCIndices[C] = RC.SCCIndices.size(); + RC.SCCs.push_back(C); } LazyCallGraph::Node &LazyCallGraph::insertInto(Function &F, Node *&MappedN) { @@ -1589,6 +1594,21 @@ void LazyCallGraph::updateGraphPtrs() { RC->G = this; } +LazyCallGraph::Node &LazyCallGraph::createNode(Function &F) { + assert(!lookup(F) && "node already exists"); + + Node &N = get(F); + NodeMap[&F] = &N; + N.DFSNumber = N.LowLink = -1; + N.populate(); + return N; +} + +void LazyCallGraph::addNodeToSCC(LazyCallGraph::SCC &C, Node &N) { + C.Nodes.push_back(&N); + SCCMap[&N] = &C; +} + template <typename RootsT, typename GetBeginT, typename GetEndT, typename GetNodeT, typename FormSCCCallbackT> void LazyCallGraph::buildGenericSCCs(RootsT &&Roots, GetBeginT &&GetBegin, |