aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2018-11-14 19:30:13 +0000
committerTeresa Johnson <tejohnson@google.com>2018-11-14 19:30:13 +0000
commit32dc5b9bf134b5a98c1a22395a5cd0ca5c409fe7 (patch)
tree7aea2af71ce5484a6aee0e6ae7a2649cce6c4426 /llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
parentd84cf1369060349506fa27779e4403174b5f4c9a (diff)
downloadllvm-32dc5b9bf134b5a98c1a22395a5cd0ca5c409fe7.zip
llvm-32dc5b9bf134b5a98c1a22395a5cd0ca5c409fe7.tar.gz
llvm-32dc5b9bf134b5a98c1a22395a5cd0ca5c409fe7.tar.bz2
[ThinLTO] Update handling of vararg functions to match inliner
Summary: Previously we marked all vararg functions as non-inlinable in the function summary, which prevented their importing. However, the corresponding inliner restriction was loosened in r321940/r342675 to only apply to functions calling va_start. Adjust the summary flag computation to match. Reviewers: davidxl Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D54270 llvm-svn: 346883
Diffstat (limited to 'llvm/lib/Analysis/ModuleSummaryAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/ModuleSummaryAnalysis.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
index 29b96ac..f042178 100644
--- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -246,10 +246,15 @@ static void computeFunctionSummary(
findRefEdges(Index, &F, RefEdges, Visited);
bool HasInlineAsmMaybeReferencingInternal = false;
+ bool InitsVarArgs = false;
for (const BasicBlock &BB : F)
for (const Instruction &I : BB) {
if (isa<DbgInfoIntrinsic>(I))
continue;
+ if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(&I)) {
+ if (II->getIntrinsicID() == Intrinsic::vastart)
+ InitsVarArgs = true;
+ }
++NumInsts;
findRefEdges(Index, &I, RefEdges, Visited);
auto CS = ImmutableCallSite(&I);
@@ -357,9 +362,9 @@ static void computeFunctionSummary(
F.hasFnAttribute(Attribute::ReadNone),
F.hasFnAttribute(Attribute::ReadOnly),
F.hasFnAttribute(Attribute::NoRecurse), F.returnDoesNotAlias(),
- // Inliner doesn't handle variadic functions.
+ // Inliner doesn't handle variadic functions with va_start calls.
// FIXME: refactor this to use the same code that inliner is using.
- F.isVarArg() ||
+ InitsVarArgs ||
// Don't try to import functions with noinline attribute.
F.getAttributes().hasFnAttribute(Attribute::NoInline)};
auto FuncSummary = llvm::make_unique<FunctionSummary>(