[llvm] r357627 - [ProfileSummary] Count callsite samples when computing total samples.

Taewook Oh via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 3 12:54:43 PDT 2019


Author: twoh
Date: Wed Apr  3 12:54:43 2019
New Revision: 357627

URL: http://llvm.org/viewvc/llvm-project?rev=357627&view=rev
Log:
[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

Modified:
    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

Modified: llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/ProfileCommon.h?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ProfileData/ProfileCommon.h (original)
+++ llvm/trunk/include/llvm/ProfileData/ProfileCommon.h Wed Apr  3 12:54:43 2019
@@ -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();
 };
 

Modified: llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp (original)
+++ llvm/trunk/lib/ProfileData/ProfileSummaryBuilder.cpp Wed Apr  3 12:54:43 2019
@@ -44,12 +44,17 @@ void InstrProfSummaryBuilder::addRecord(
 // 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

Modified: llvm/trunk/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
Binary files - no diff available.

Modified: llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof (original)
+++ llvm/trunk/test/Transforms/SampleProfile/Inputs/summary.prof Wed Apr  3 12:54:43 2019
@@ -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

Modified: llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll (original)
+++ llvm/trunk/test/Transforms/SampleProfile/compact-binary-profile.ll Wed Apr  3 12:54:43 2019
@@ -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}

Modified: llvm/trunk/test/Transforms/SampleProfile/summary.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/summary.ll?rev=357627&r1=357626&r2=357627&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SampleProfile/summary.ll (original)
+++ llvm/trunk/test/Transforms/SampleProfile/summary.ll Wed Apr  3 12:54:43 2019
@@ -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)




More information about the llvm-commits mailing list