diff options
author | Kazu Hirata <kazu@google.com> | 2022-09-17 23:10:23 -0700 |
---|---|---|
committer | Kazu Hirata <kazu@google.com> | 2022-09-17 23:10:23 -0700 |
commit | 284f0397e2779d9de6613c81539367f9b35d460f (patch) | |
tree | 262561d9188e6df8d8cf975acafa2aaf8a7bf26c /llvm/lib/Transforms/Utils/InlineFunction.cpp | |
parent | cf355bf36e39f38c08606a5b91a2cc038e28c700 (diff) | |
download | llvm-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.cpp | 9 |
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(); } |