summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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