diff options
author | Paul Robinson <paul_robinson@playstation.sony.com> | 2013-11-18 21:44:03 +0000 |
---|---|---|
committer | Paul Robinson <paul_robinson@playstation.sony.com> | 2013-11-18 21:44:03 +0000 |
commit | fe45fd084db872f9c7106c26e52c1cc8c9cba3a5 (patch) | |
tree | 02be55df9d76c2f48a1402fcefaba8eab2fb8f08 /lib | |
parent | 3560dd2dcd67d42eeb8e59975581d598d71669df (diff) | |
download | external_llvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.zip external_llvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.tar.gz external_llvm-fe45fd084db872f9c7106c26e52c1cc8c9cba3a5.tar.bz2 |
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')
-rw-r--r-- | lib/Analysis/IPA/InlineCost.cpp | 4 | ||||
-rw-r--r-- | lib/IR/Verifier.cpp | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/Analysis/IPA/InlineCost.cpp b/lib/Analysis/IPA/InlineCost.cpp index 89dcd81..013691b 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. diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 0bcb118..da6b573 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -927,9 +927,9 @@ void Verifier::VerifyFunctionAttrs(FunctionType *FT, AttributeSet Attrs, if (Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeNone)) { - Assert1(!Attrs.hasAttribute(AttributeSet::FunctionIndex, - Attribute::AlwaysInline), - "Attributes 'alwaysinline and optnone' are incompatible!", V); + Assert1(Attrs.hasAttribute(AttributeSet::FunctionIndex, + Attribute::NoInline), + "Attribute 'optnone' requires 'noinline'!", V); Assert1(!Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize), |