From: Dehao Chen Date: Mon, 19 Sep 2016 18:38:14 +0000 (+0000) Subject: Handle early inline for hot callsites that reside in the same basic block. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ddeacc711a5499ad18888613499376d8fcb6cdbc;p=llvm Handle early inline for hot callsites that reside in the same basic block. 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281927 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/SampleProfile.cpp b/lib/Transforms/IPO/SampleProfile.cpp index ad806addf6c..0594063f0c7 100644 --- a/lib/Transforms/IPO/SampleProfile.cpp +++ b/lib/Transforms/IPO/SampleProfile.cpp @@ -638,15 +638,20 @@ bool SampleProfileLoader::inlineHotFunctions(Function &F) { bool LocalChanged = false; SmallVector CIS; for (auto &BB : F) { + bool Hot = false; + SmallVector Candidates; for (auto &I : BB.getInstList()) { const FunctionSamples *FS = nullptr; if ((isa(I) || isa(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); diff --git a/test/Transforms/SampleProfile/Inputs/einline.prof b/test/Transforms/SampleProfile/Inputs/einline.prof index 425d6ce22c1..90f41d21ca3 100644 --- a/test/Transforms/SampleProfile/Inputs/einline.prof +++ b/test/Transforms/SampleProfile/Inputs/einline.prof @@ -1,3 +1,3 @@ _Z3foov:200:100 - 1: _Z3barv:100 + 1: _Z3barv:0 3: _Z3barv:100 diff --git a/test/Transforms/SampleProfile/early-inline.ll b/test/Transforms/SampleProfile/early-inline.ll index 1ec16119e52..6e55ab1eec7 100644 --- a/test/Transforms/SampleProfile/early-inline.ll +++ b/test/Transforms/SampleProfile/early-inline.ll @@ -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.