summaryrefslogtreecommitdiff
path: root/lib/Analysis
diff options
context:
space:
mode:
authorPaul Robinson <paul_robinson@playstation.sony.com>2013-11-18 21:44:03 +0000
committerPaul Robinson <paul_robinson@playstation.sony.com>2013-11-18 21:44:03 +0000
commitfe45fd084db872f9c7106c26e52c1cc8c9cba3a5 (patch)
tree02be55df9d76c2f48a1402fcefaba8eab2fb8f08 /lib/Analysis
parent3560dd2dcd67d42eeb8e59975581d598d71669df (diff)
downloadllvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.tar.gz
llvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.tar.bz2
llvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.tar.xz
The 'optnone' attribute means don't inline anything into this function
(except functions marked always_inline). Functions with 'optnone' must also have 'noinline' so they don't get inlined into any other function. Based on work by Andrea Di Biagio. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195046 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r--lib/Analysis/IPA/InlineCost.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/Analysis/IPA/InlineCost.cpp b/lib/Analysis/IPA/InlineCost.cpp
index 89dcd819ee..013691b668 100644
--- a/lib/Analysis/IPA/InlineCost.cpp
+++ b/lib/Analysis/IPA/InlineCost.cpp
@@ -1206,6 +1206,10 @@ InlineCost InlineCostAnalysis::getInlineCost(CallSite CS, Function *Callee,
if (!functionsHaveCompatibleAttributes(CS.getCaller(), Callee))
return llvm::InlineCost::getNever();
+ // Don't inline this call if the caller has the optnone attribute.
+ if (CS.getCaller()->hasFnAttribute(Attribute::OptimizeNone))
+ return llvm::InlineCost::getNever();
+
// Don't inline functions which can be redefined at link-time to mean
// something else. Don't inline functions marked noinline or call sites
// marked noinline.