aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/InlineCost.cpp
diff options
context:
space:
mode:
authorDávid Bolvanský <david.bolvansky@gmail.com>2022-02-14 18:35:29 +0100
committerDávid Bolvanský <david.bolvansky@gmail.com>2022-02-14 18:35:52 +0100
commitf0e6ec1547d40da07bcdccb0acc2eb7b2bd4ffd4 (patch)
treedc23292cc0f2f19e4aa5d5770d5737654095a77b /llvm/lib/Analysis/InlineCost.cpp
parent3efdfe722d3eb1ef063f20088652acc5a41eb18d (diff)
downloadllvm-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.cpp3
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();