diff options
author | Sergey Dmitriev <serguei.n.dmitriev@intel.com> | 2020-06-29 16:11:16 -0700 |
---|---|---|
committer | Sergey Dmitriev <serguei.n.dmitriev@intel.com> | 2020-07-01 13:44:11 -0700 |
commit | cb8faaacb52c1c0f0b97379ac0e07a612c04c5ff (patch) | |
tree | 722c5c01ac6791d28670a31fc2dab7ab424028a4 /llvm/lib/Transforms/Utils/InlineFunction.cpp | |
parent | f4e3e8811e306643c3345efa15f3f7339bf7b0b4 (diff) | |
download | llvm-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.cpp | 6 |
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! |