Handle early inline for hot callsites that reside in the same basic block.
authorDehao Chen <dehao@google.com>
Mon, 19 Sep 2016 18:38:14 +0000 (18:38 +0000)
committerDehao Chen <dehao@google.com>
Mon, 19 Sep 2016 18:38:14 +0000 (18:38 +0000)
Summary: Callsites in the same basic block should share the same hotness. This patch checks for the hottest callsite in the same basic block, and use the hotness for all callsites in that basic block for early inline decisions. It also fixes the test to add "-S" so theat the "CHECK-NOT" is actually checking the content.

Reviewers: dnovillo

Subscribers: llvm-commits

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

llvm-svn: 281927

llvm/lib/Transforms/IPO/SampleProfile.cpp
llvm/test/Transforms/SampleProfile/Inputs/einline.prof
llvm/test/Transforms/SampleProfile/early-inline.ll

index ad806ad..0594063 100644 (file)
@@ -638,15 +638,20 @@ bool SampleProfileLoader::inlineHotFunctions(Function &F) {
     bool LocalChanged = false;
     SmallVector<Instruction *, 10> CIS;
     for (auto &BB : F) {
+      bool Hot = false;
+      SmallVector<Instruction *, 10> Candidates;
       for (auto &I : BB.getInstList()) {
         const FunctionSamples *FS = nullptr;
         if ((isa<CallInst>(I) || isa<InvokeInst>(I)) &&
             (FS = findCalleeFunctionSamples(I))) {
-
+          Candidates.push_back(&I);
           if (callsiteIsHot(Samples, FS))
-            CIS.push_back(&I);
+            Hot = true;
         }
       }
+      if (Hot) {
+        CIS.insert(CIS.begin(), Candidates.begin(), Candidates.end());
+      }
     }
     for (auto I : CIS) {
       InlineFunctionInfo IFI(nullptr, ACT ? &GetAssumptionCache : nullptr);
index 1ec1611..6e55ab1 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt < %s -instcombine -sample-profile -sample-profile-file=%S/Inputs/einline.prof | FileCheck %s
+; RUN: opt < %s -instcombine -sample-profile -sample-profile-file=%S/Inputs/einline.prof -S | FileCheck %s
 
 ; Checks if both call and invoke can be inlined early if their inlined
 ; instances are hot in profile.