diff options
author | Dávid Bolvanský <david.bolvansky@gmail.com> | 2022-02-14 18:35:29 +0100 |
---|---|---|
committer | Dávid Bolvanský <david.bolvansky@gmail.com> | 2022-02-14 18:35:52 +0100 |
commit | f0e6ec1547d40da07bcdccb0acc2eb7b2bd4ffd4 (patch) | |
tree | dc23292cc0f2f19e4aa5d5770d5737654095a77b /llvm/lib/Analysis/InlineCost.cpp | |
parent | 3efdfe722d3eb1ef063f20088652acc5a41eb18d (diff) | |
download | llvm-f0e6ec1547d40da07bcdccb0acc2eb7b2bd4ffd4.zip llvm-f0e6ec1547d40da07bcdccb0acc2eb7b2bd4ffd4.tar.gz llvm-f0e6ec1547d40da07bcdccb0acc2eb7b2bd4ffd4.tar.bz2 |
[Inliner] Respect noinline call site attribute
```
always_inline foo() { }
bar () {
noinline foo();
}
```
We should prefer call site attribute over attribute on decl.
Related to https://reviews.llvm.org/D119061
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D119579
Diffstat (limited to 'llvm/lib/Analysis/InlineCost.cpp')
-rw-r--r-- | llvm/lib/Analysis/InlineCost.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/InlineCost.cpp b/llvm/lib/Analysis/InlineCost.cpp index 5333626..2a1a976 100644 --- a/llvm/lib/Analysis/InlineCost.cpp +++ b/llvm/lib/Analysis/InlineCost.cpp @@ -2864,6 +2864,9 @@ Optional<InlineResult> llvm::getAttributeBasedInliningDecision( // Calls to functions with always-inline attributes should be inlined // whenever possible. if (Call.hasFnAttr(Attribute::AlwaysInline)) { + if (Call.getAttributes().hasFnAttr(Attribute::NoInline)) + return InlineResult::failure("noinline call site attribute"); + auto IsViable = isInlineViable(*Callee); if (IsViable.isSuccess()) return InlineResult::success(); |