[llvm] r277860 - Replace hot-callsite based heuristic to use its own threshold parameter instead of share inline-hint parameter

Dehao Chen via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 5 13:28:41 PDT 2016


Author: dehao
Date: Fri Aug  5 15:28:41 2016
New Revision: 277860

URL: http://llvm.org/viewvc/llvm-project?rev=277860&view=rev
Log:
Replace hot-callsite based heuristic to use its own threshold parameter instead of share inline-hint parameter

Summary: Hot callsites should have higher threshold than inline hints. This patch uses separate threshold parameter for hot callsites.

Reviewers: davidxl, eraman

Subscribers: Prazek, llvm-commits

Differential Revision: https://reviews.llvm.org/D22368

Modified:
    llvm/trunk/lib/Analysis/InlineCost.cpp
    llvm/trunk/test/Transforms/Inline/inline-hot-callsite.ll

Modified: llvm/trunk/lib/Analysis/InlineCost.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InlineCost.cpp?rev=277860&r1=277859&r2=277860&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InlineCost.cpp (original)
+++ llvm/trunk/lib/Analysis/InlineCost.cpp Fri Aug  5 15:28:41 2016
@@ -66,6 +66,11 @@ static cl::opt<int> ColdThreshold(
     "inlinecold-threshold", cl::Hidden, cl::init(225),
     cl::desc("Threshold for inlining functions with cold attribute"));
 
+static cl::opt<int>
+    HotCallSiteThreshold("hot-callsite-threshold", cl::Hidden, cl::init(3000),
+                         cl::ZeroOrMore,
+                         cl::desc("Threshold for hot callsites "));
+
 namespace {
 
 class CallAnalyzer : public InstVisitor<CallAnalyzer, bool> {
@@ -635,27 +640,33 @@ void CallAnalyzer::updateThreshold(CallS
   }
 
   bool HotCallsite = false;
+  bool ColdCallsite = false;
   uint64_t TotalWeight;
-  if (CS.getInstruction()->extractProfTotalWeight(TotalWeight) &&
-      PSI->isHotCount(TotalWeight))
-    HotCallsite = true;
+  if (CS.getInstruction()->extractProfTotalWeight(TotalWeight))
+    if (PSI->isHotCount(TotalWeight))
+      HotCallsite = true;
+    else if (PSI->isColdCount(TotalWeight))
+      ColdCallsite = true;
 
   // Listen to the inlinehint attribute or profile based hotness information
   // 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,
   // do not use the default cold threshold even if it is smaller.
   if ((DefaultInlineThreshold.getNumOccurrences() == 0 ||
        ColdThreshold.getNumOccurrences() > 0) &&
-      ColdCallee && ColdThreshold < Threshold)
+      (ColdCallee || ColdCallsite) && ColdThreshold < Threshold)
     Threshold = ColdThreshold;
 
   // Finally, take the target-specific inlining threshold multiplier into

Modified: llvm/trunk/test/Transforms/Inline/inline-hot-callsite.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-hot-callsite.ll?rev=277860&r1=277859&r2=277860&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Inline/inline-hot-callsite.ll (original)
+++ llvm/trunk/test/Transforms/Inline/inline-hot-callsite.ll Fri Aug  5 15:28:41 2016
@@ -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




More information about the llvm-commits mailing list