Index: lib/Analysis/InlineCost.cpp =================================================================== --- lib/Analysis/InlineCost.cpp +++ lib/Analysis/InlineCost.cpp @@ -66,6 +66,11 @@ "inlinecold-threshold", cl::Hidden, cl::init(225), cl::desc("Threshold for inlining functions with cold attribute")); +static cl::opt + HotCallSiteThreshold("hot-callsite-threshold", cl::Hidden, cl::init(3000), + cl::ZeroOrMore, + cl::desc("Threshold for hot callsites ")); + namespace { class CallAnalyzer : public InstVisitor { @@ -643,11 +648,14 @@ // when it would increase the threshold and the caller does not need to // minimize its size. bool InlineHint = Callee.hasFnAttribute(Attribute::InlineHint) || - PSI->isHotFunction(&Callee) || - HotCallsite; + PSI->isHotFunction(&Callee); if (InlineHint && HintThreshold > Threshold && !Caller->optForMinSize()) Threshold = HintThreshold; + if (HotCallsite && HotCallSiteThreshold > Threshold && + !Caller->optForMinSize()) + Threshold = HotCallSiteThreshold; + bool ColdCallee = PSI->isColdFunction(&Callee); // Command line argument for DefaultInlineThreshold will override the default // ColdThreshold. If we have -inline-threshold but no -inlinecold-threshold, Index: test/Transforms/Inline/inline-hot-callsite.ll =================================================================== --- test/Transforms/Inline/inline-hot-callsite.ll +++ test/Transforms/Inline/inline-hot-callsite.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -inline -inline-threshold=0 -inlinehint-threshold=100 -S | FileCheck %s +; RUN: opt < %s -inline -inline-threshold=0 -hot-callsite-threshold=100 -S | FileCheck %s ; This tests that a hot callsite gets the (higher) inlinehint-threshold even without ; without inline hints and gets inlined because the cost is less than