[PATCH] D59835: [ProfileSummary] Count callsite samples when computing total samples.

Taewook Oh via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 3 12:53:31 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL357627: [ProfileSummary] Count callsite samples when computing total samples. (authored by twoh, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D59835?vs=192319&id=193574#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59835/new/

https://reviews.llvm.org/D59835

Files:
  llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
  llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp
  llvm/trunk/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
  llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof
  llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll
  llvm/trunk/test/Transforms/SampleProfile/summary.ll


Index: llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp
===================================================================
--- llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp
+++ llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp
@@ -44,12 +44,17 @@
 // 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
Index: llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
===================================================================
--- llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
+++ llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
@@ -83,7 +83,8 @@
   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();
 };
 
Index: llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof
===================================================================
--- llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof
+++ llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof
@@ -2,3 +2,8 @@
  1: 100
 foo:200:1
  1: 200
+baz:600:1
+ 1: 0
+ 2: 300
+ 1: bar:300
+  1: 300
Index: llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll
===================================================================
--- llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll
+++ llvm/trunk/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}
Index: llvm/trunk/test/Transforms/SampleProfile/summary.ll
===================================================================
--- llvm/trunk/test/Transforms/SampleProfile/summary.ll
+++ llvm/trunk/test/Transforms/SampleProfile/summary.ll
@@ -7,9 +7,20 @@
   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)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59835.193574.patch
Type: text/x-patch
Size: 3790 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190403/eb0c23d7/attachment.bin>


More information about the llvm-commits mailing list