diff options
author | Manman Ren <manman.ren@gmail.com> | 2014-02-05 22:53:44 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2014-02-05 22:53:44 +0000 |
commit | df7da79db6879032da83de83a90f981cacdb5f1a (patch) | |
tree | a1262d6b26806c03345754bba4861e3f9b250c98 /lib/Transforms | |
parent | 8147752976bda4499863c3db9feee760cf0b9015 (diff) | |
download | llvm-df7da79db6879032da83de83a90f981cacdb5f1a.tar.gz llvm-df7da79db6879032da83de83a90f981cacdb5f1a.tar.bz2 llvm-df7da79db6879032da83de83a90f981cacdb5f1a.tar.xz |
Inliner uses a smaller inline threshold for callees with cold attribute.
Added command line option inlinecold-threshold to set threshold for inlining
functions with cold attribute. Listen to the cold attribute when it would
decrease the inline threshold.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200886 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/IPO/Inliner.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index dc710d1415..8647f39a90 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -50,6 +50,10 @@ static cl::opt<int> HintThreshold("inlinehint-threshold", cl::Hidden, cl::init(325), cl::desc("Threshold for inlining functions with inline hint")); +static cl::opt<int> +ColdThreshold("inlinecold-threshold", cl::Hidden, cl::init(75), + cl::desc("Threshold for inlining functions with cold attribute")); + // Threshold to use when optsize is specified (and there is no -inline-limit). const int OptSizeThreshold = 75; @@ -277,6 +281,13 @@ unsigned Inliner::getInlineThreshold(CallSite CS) const { Attribute::MinSize)) thres = HintThreshold; + // Listen to the cold attribute when it would decrease the threshold. + bool ColdCallee = Callee && !Callee->isDeclaration() && + Callee->getAttributes().hasAttribute(AttributeSet::FunctionIndex, + Attribute::Cold); + if (ColdCallee && ColdThreshold < thres) + thres = ColdThreshold; + return thres; } |