forked from OSchip/llvm-project
Remove the sample pgo annotation heuristic that uses call count to annotate basic block count.
Summary: We do not need that special handling because the debug info is more accurate now. Performance testing shows no regression on google internal benchmarks. Reviewers: davidxl, aprantl Reviewed By: aprantl Subscribers: llvm-commits, aprantl Differential Revision: https://reviews.llvm.org/D30658 llvm-svn: 297038
This commit is contained in:
parent
cccdd330f2
commit
c632a393b7
|
@ -240,21 +240,6 @@ public:
|
|||
return ret->second.getSamples();
|
||||
}
|
||||
|
||||
/// Return the total number of call target samples collected at a given
|
||||
/// location. Each location is specified by \p LineOffset and
|
||||
/// \p Discriminator. If the location is not found in profile, return error.
|
||||
ErrorOr<uint64_t> findCallSamplesAt(uint32_t LineOffset,
|
||||
uint32_t Discriminator) const {
|
||||
const auto &ret = BodySamples.find(LineLocation(LineOffset, Discriminator));
|
||||
if (ret == BodySamples.end())
|
||||
return std::error_code();
|
||||
uint64_t T = 0;
|
||||
for (const auto &t_c : ret->second.getCallTargets()) {
|
||||
T += t_c.second;
|
||||
}
|
||||
return T;
|
||||
}
|
||||
|
||||
/// Returns the call target map collected at a given location.
|
||||
/// Each location is specified by \p LineOffset and \p Discriminator.
|
||||
/// If the location is not found in profile, return error.
|
||||
|
|
|
@ -469,16 +469,14 @@ ErrorOr<uint64_t> SampleProfileLoader::getInstWeight(const Instruction &Inst) {
|
|||
// If a call/invoke instruction is inlined in profile, but not inlined here,
|
||||
// it means that the inlined callsite has no sample, thus the call
|
||||
// instruction should have 0 count.
|
||||
bool IsCall = isa<CallInst>(Inst) || isa<InvokeInst>(Inst);
|
||||
if (IsCall && findCalleeFunctionSamples(Inst))
|
||||
if ((isa<CallInst>(Inst) || isa<InvokeInst>(Inst)) &&
|
||||
findCalleeFunctionSamples(Inst))
|
||||
return 0;
|
||||
|
||||
const DILocation *DIL = DLoc;
|
||||
uint32_t LineOffset = getOffset(DIL);
|
||||
uint32_t Discriminator = DIL->getBaseDiscriminator();
|
||||
ErrorOr<uint64_t> R = IsCall
|
||||
? FS->findCallSamplesAt(LineOffset, Discriminator)
|
||||
: FS->findSamplesAt(LineOffset, Discriminator);
|
||||
ErrorOr<uint64_t> R = FS->findSamplesAt(LineOffset, Discriminator);
|
||||
if (R) {
|
||||
bool FirstMark =
|
||||
CoverageTracker.markSamplesUsed(FS, LineOffset, Discriminator, R.get());
|
||||
|
|
|
@ -48,8 +48,8 @@ while.cond: ; preds = %if.end, %entry
|
|||
store i32 %inc, i32* %i, align 4, !dbg !14
|
||||
%cmp = icmp slt i32 %0, 400000000, !dbg !14
|
||||
br i1 %cmp, label %while.body, label %while.end, !dbg !14
|
||||
; CHECK: edge while.cond -> while.body probability is 0x75bcbf1b / 0x80000000 = 91.98% [HOT edge]
|
||||
; CHECK: edge while.cond -> while.end probability is 0x0a4340e5 / 0x80000000 = 8.02%
|
||||
; CHECK: edge while.cond -> while.body probability is 0x77f2798d / 0x80000000 = 93.71% [HOT edge]
|
||||
; CHECK: edge while.cond -> while.end probability is 0x080d8673 / 0x80000000 = 6.29%
|
||||
|
||||
while.body: ; preds = %while.cond
|
||||
%1 = load i32, i32* %i, align 4, !dbg !16
|
||||
|
@ -59,8 +59,8 @@ while.body: ; preds = %while.cond
|
|||
; both branches out of while.body had the same weight. In reality,
|
||||
; the edge while.body->if.then is taken most of the time.
|
||||
;
|
||||
; CHECK: edge while.body -> if.else probability is 0x00059704 / 0x80000000 = 0.02%
|
||||
; CHECK: edge while.body -> if.then probability is 0x7ffa68fc / 0x80000000 = 99.98% [HOT edge]
|
||||
; CHECK: edge while.body -> if.else probability is 0x0005b1e0 / 0x80000000 = 0.02%
|
||||
; CHECK: edge while.body -> if.then probability is 0x7ffa4e20 / 0x80000000 = 99.98% [HOT edge]
|
||||
|
||||
|
||||
if.then: ; preds = %while.body
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/fnptr.prof | opt -analyze -branch-prob | FileCheck %s
|
||||
; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/fnptr.binprof | opt -analyze -branch-prob | FileCheck %s
|
||||
|
||||
; CHECK: edge for.body3 -> if.then probability is 0x19f584f3 / 0x80000000 = 20.28%
|
||||
; CHECK: edge for.body3 -> if.else probability is 0x660a7b0d / 0x80000000 = 79.72%
|
||||
; CHECK: edge for.inc -> for.inc12 probability is 0x000f92fb / 0x80000000 = 0.05%
|
||||
; CHECK: edge for.inc -> for.body3 probability is 0x7ff06d05 / 0x80000000 = 99.95%
|
||||
; CHECK: edge for.body3 -> if.then probability is 0x1a56a56a / 0x80000000 = 20.58%
|
||||
; CHECK: edge for.body3 -> if.else probability is 0x65a95a96 / 0x80000000 = 79.42%
|
||||
; CHECK: edge for.inc -> for.inc12 probability is 0x000fbd1c / 0x80000000 = 0.05%
|
||||
; CHECK: edge for.inc -> for.body3 probability is 0x7ff042e4 / 0x80000000 = 99.95%
|
||||
; CHECK: edge for.inc12 -> for.end14 probability is 0x04000000 / 0x80000000 = 3.12%
|
||||
; CHECK: edge for.inc12 -> for.cond1.preheader probability is 0x7c000000 / 0x80000000 = 96.88%
|
||||
|
||||
|
|
Loading…
Reference in New Issue