summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaewook Oh <twoh@fb.com>2019-04-03 19:54:43 +0000
committerTaewook Oh <twoh@fb.com>2019-04-03 19:54:43 +0000
commita960f89962883b46d68529bc8a4612d40967c5a0 (patch)
treef83fc88f67c0f49eca447744a2da23848b072e1d
parentffa857c7a6550c75b3f6dab8272592b4640425cf (diff)
downloadbcm5719-llvm-a960f89962883b46d68529bc8a4612d40967c5a0.tar.gz
bcm5719-llvm-a960f89962883b46d68529bc8a4612d40967c5a0.zip
[ProfileSummary] Count callsite samples when computing total samples.
Summary: Currently ProfileSummaryBuilder doesn't count into callsite samples when computing total samples. Considering that ProfileSummaryInfo is used to checked the hotness of not only body samples but also callsite samples (from SampleProfileLoader), I think the callsite sample counts should be considered when computing total samples. Reviewers: eraman, danielcdh, wmi Subscribers: hiraditya, jdoerfert, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59835 llvm-svn: 357627
-rw-r--r--llvm/include/llvm/ProfileData/ProfileCommon.h3
-rw-r--r--llvm/lib/ProfileData/ProfileSummaryBuilder.cpp13
-rw-r--r--llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdobin184 -> 185 bytes
-rw-r--r--llvm/test/Transforms/SampleProfile/Inputs/summary.prof5
-rw-r--r--llvm/test/Transforms/SampleProfile/compact-binary-profile.ll2
-rw-r--r--llvm/test/Transforms/SampleProfile/summary.ll13
6 files changed, 29 insertions, 7 deletions
diff --git a/llvm/include/llvm/ProfileData/ProfileCommon.h b/llvm/include/llvm/ProfileData/ProfileCommon.h
index b52f8864320..f98a34387fd 100644
--- a/llvm/include/llvm/ProfileData/ProfileCommon.h
+++ b/llvm/include/llvm/ProfileData/ProfileCommon.h
@@ -83,7 +83,8 @@ public:
SampleProfileSummaryBuilder(std::vector<uint32_t> Cutoffs)
: ProfileSummaryBuilder(std::move(Cutoffs)) {}
- void addRecord(const sampleprof::FunctionSamples &FS);
+ void addRecord(const sampleprof::FunctionSamples &FS,
+ bool isCallsiteSample = false);
std::unique_ptr<ProfileSummary> getSummary();
};
diff --git a/llvm/lib/ProfileData/ProfileSummaryBuilder.cpp b/llvm/lib/ProfileData/ProfileSummaryBuilder.cpp
index 35ac5b90cd1..4d5b0093574 100644
--- a/llvm/lib/ProfileData/ProfileSummaryBuilder.cpp
+++ b/llvm/lib/ProfileData/ProfileSummaryBuilder.cpp
@@ -44,12 +44,17 @@ void InstrProfSummaryBuilder::addRecord(const InstrProfRecord &R) {
// To compute the detailed summary, we consider each line containing samples as
// equivalent to a block with a count in the instrumented profile.
void SampleProfileSummaryBuilder::addRecord(
- const sampleprof::FunctionSamples &FS) {
- NumFunctions++;
- if (FS.getHeadSamples() > MaxFunctionCount)
- MaxFunctionCount = FS.getHeadSamples();
+ const sampleprof::FunctionSamples &FS, bool isCallsiteSample) {
+ if (!isCallsiteSample) {
+ NumFunctions++;
+ if (FS.getHeadSamples() > MaxFunctionCount)
+ MaxFunctionCount = FS.getHeadSamples();
+ }
for (const auto &I : FS.getBodySamples())
addCount(I.second.getSamples());
+ for (const auto &I : FS.getCallsiteSamples())
+ for (const auto &CS : I.second)
+ addRecord(CS.second, true);
}
// The argument to this method is a vector of cutoff percentages and the return
diff --git a/llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo b/llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
index 6271b3609e9..c9fde769982 100644
--- a/llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
+++ b/llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
Binary files differ
diff --git a/llvm/test/Transforms/SampleProfile/Inputs/summary.prof b/llvm/test/Transforms/SampleProfile/Inputs/summary.prof
index 49a5b57d5e6..e80b9bc171b 100644
--- a/llvm/test/Transforms/SampleProfile/Inputs/summary.prof
+++ b/llvm/test/Transforms/SampleProfile/Inputs/summary.prof
@@ -2,3 +2,8 @@ bar:100:3
1: 100
foo:200:1
1: 200
+baz:600:1
+ 1: 0
+ 2: 300
+ 1: bar:300
+ 1: 300
diff --git a/llvm/test/Transforms/SampleProfile/compact-binary-profile.ll b/llvm/test/Transforms/SampleProfile/compact-binary-profile.ll
index 9b786ef1d71..3b0a2a47c31 100644
--- a/llvm/test/Transforms/SampleProfile/compact-binary-profile.ll
+++ b/llvm/test/Transforms/SampleProfile/compact-binary-profile.ll
@@ -26,7 +26,7 @@
; CHECK: br i1 %cmp, label %while.body, label %while.end{{.*}} !prof ![[IDX1:[0-9]*]]
; CHECK: br i1 %cmp1, label %if.then, label %if.else{{.*}} !prof ![[IDX2:[0-9]*]]
; CHECK: call i32 (i8*, ...) @printf{{.*}} !prof ![[IDX3:[0-9]*]]
-; CHECK: = !{!"TotalCount", i64 10944}
+; CHECK: = !{!"TotalCount", i64 26781}
; CHECK: = !{!"MaxCount", i64 5553}
; CHECK: ![[IDX1]] = !{!"branch_weights", i32 5392, i32 163}
; CHECK: ![[IDX2]] = !{!"branch_weights", i32 5280, i32 113}
diff --git a/llvm/test/Transforms/SampleProfile/summary.ll b/llvm/test/Transforms/SampleProfile/summary.ll
index 0a3d1a27648..03b6644eacc 100644
--- a/llvm/test/Transforms/SampleProfile/summary.ll
+++ b/llvm/test/Transforms/SampleProfile/summary.ll
@@ -7,9 +7,20 @@ entry:
ret i32 1, !dbg !2
}
+define i32 @baz() !dbg !3 {
+entry:
+ %call = call i32 @bar(), !dbg !4
+ ret i32 %call, !dbg !5
+}
+
; CHECK-DAG: {{![0-9]+}} = !{i32 1, !"ProfileSummary", {{![0-9]+}}}
-; CHECK-DAG: {{![0-9]+}} = !{!"NumFunctions", i64 2}
+; CHECK-DAG: {{![0-9]+}} = !{!"TotalCount", i64 900}
+; CHECK-DAG: {{![0-9]+}} = !{!"NumCounts", i64 5}
+; CHECK-DAG: {{![0-9]+}} = !{!"NumFunctions", i64 3}
; CHECK-DAG: {{![0-9]+}} = !{!"MaxFunctionCount", i64 3}
!1 = distinct !DISubprogram(name: "bar")
!2 = !DILocation(line: 2, scope: !2)
+!3 = distinct !DISubprogram(name: "baz")
+!4 = !DILocation(line: 1, scope: !4)
+!5 = !DILocation(line: 2, scope: !5)
OpenPOWER on IntegriCloud