aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorKazu Hirata <kazu@google.com>2022-09-17 23:10:23 -0700
committerKazu Hirata <kazu@google.com>2022-09-17 23:10:23 -0700
commit284f0397e2779d9de6613c81539367f9b35d460f (patch)
tree262561d9188e6df8d8cf975acafa2aaf8a7bf26c /llvm/lib/Transforms/Utils/InlineFunction.cpp
parentcf355bf36e39f38c08606a5b91a2cc038e28c700 (diff)
downloadllvm-284f0397e2779d9de6613c81539367f9b35d460f.zip
llvm-284f0397e2779d9de6613c81539367f9b35d460f.tar.gz
llvm-284f0397e2779d9de6613c81539367f9b35d460f.tar.bz2
[Transforms] Merge function attributes within InlineFunction (NFC)
In the past, we've had a bug resulting in a compiler crash after forgetting to merge function attributes (D105729). This patch teaches InlineFunction to merge function attributes. This way, we minimize the "time" when the IR is valid, but the function attributes are not. Differential Revision: https://reviews.llvm.org/D134117
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/InlineFunction.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 5abf7b1..1ea73d1 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -1786,7 +1786,8 @@ inlineRetainOrClaimRVCalls(CallBase &CB, objcarc::ARCInstKind RVCallKind,
llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
AAResults *CalleeAAR,
bool InsertLifetime,
- Function *ForwardVarArgsTo) {
+ Function *ForwardVarArgsTo,
+ bool MergeAttributes) {
assert(CB.getParent() && CB.getFunction() && "Instruction not in function!");
// FIXME: we don't inline callbr yet.
@@ -2509,6 +2510,9 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
// Since we are now done with the return instruction, delete it also.
Returns[0]->eraseFromParent();
+ if (MergeAttributes)
+ AttributeFuncs::mergeAttributesForInlining(*Caller, *CalledFunc);
+
// We are now done with the inlining.
return InlineResult::success();
}
@@ -2672,5 +2676,8 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
}
}
+ if (MergeAttributes)
+ AttributeFuncs::mergeAttributesForInlining(*Caller, *CalledFunc);
+
return InlineResult::success();
}