aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorSergey Dmitriev <serguei.n.dmitriev@intel.com>2020-06-29 16:11:16 -0700
committerSergey Dmitriev <serguei.n.dmitriev@intel.com>2020-07-01 13:44:11 -0700
commitcb8faaacb52c1c0f0b97379ac0e07a612c04c5ff (patch)
tree722c5c01ac6791d28670a31fc2dab7ab424028a4 /llvm/lib/Transforms/Utils/InlineFunction.cpp
parentf4e3e8811e306643c3345efa15f3f7339bf7b0b4 (diff)
downloadllvm-cb8faaacb52c1c0f0b97379ac0e07a612c04c5ff.zip
llvm-cb8faaacb52c1c0f0b97379ac0e07a612c04c5ff.tar.gz
llvm-cb8faaacb52c1c0f0b97379ac0e07a612c04c5ff.tar.bz2
[CallGraph] Add support for callback call sites
Summary: This patch changes call graph analysis to recognize callback call sites and add an artificial 'reference' call record from the broker function caller to the callback function in the call graph. A presence of such reference enforces bottom-up traversal order for callback functions in CG SCC pass manager because callback function logically becomes a callee of the broker function caller. Reviewers: jdoerfert, hfinkel, sstefan1, baziotis Reviewed By: jdoerfert Subscribers: hiraditya, kuter, sstefan1, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82572
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/InlineFunction.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index ad2dd39..203e812 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -1291,7 +1291,11 @@ static void UpdateCallGraphAfterInlining(CallBase &CB,
}
for (; I != E; ++I) {
- const Value *OrigCall = I->first;
+ // Skip 'refererence' call records.
+ if (!I->first)
+ continue;
+
+ const Value *OrigCall = *I->first;
ValueToValueMapTy::iterator VMI = VMap.find(OrigCall);
// Only copy the edge if the call was inlined!