[PATCH] D55567: [SampleFDO] Extend profile-sample-accurate option to cover isFunctionColdInCallGraph

Wei Mi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 12 08:50:47 PST 2018


wmi updated this revision to Diff 177860.
wmi added a comment.

Address Teresa's comment.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D55567

Files:
  lib/Analysis/ProfileSummaryInfo.cpp
  test/Transforms/CodeGenPrepare/section-samplepgo.ll


Index: test/Transforms/CodeGenPrepare/section-samplepgo.ll
===================================================================
--- test/Transforms/CodeGenPrepare/section-samplepgo.ll
+++ test/Transforms/CodeGenPrepare/section-samplepgo.ll
@@ -1,16 +1,19 @@
 ; RUN: opt < %s -codegenprepare -S | FileCheck %s
+; RUN: opt < %s -codegenprepare -profile-sample-accurate -S | FileCheck %s --check-prefix ACCURATE
 
 target triple = "x86_64-pc-linux-gnu"
 
 ; This tests that hot/cold functions get correct section prefix assigned
 
 ; CHECK: hot_func{{.*}}!section_prefix ![[HOT_ID:[0-9]+]]
+; ACCURATE: hot_func{{.*}}!section_prefix ![[HOT_ID:[0-9]+]]
 ; The entry is hot
 define void @hot_func() !prof !15 {
   ret void
 }
 
 ; CHECK: hot_call_func{{.*}}!section_prefix ![[HOT_ID]]
+; ACCURATE: hot_call_func{{.*}}!section_prefix ![[HOT_ID]]
 ; The sum of 2 callsites are hot
 define void @hot_call_func() !prof !16 {
   call void @hot_func(), !prof !17
@@ -19,6 +22,7 @@
 }
 
 ; CHECK-NOT: normal_func{{.*}}!section_prefix
+; ACCURATE-NOT: normal_func{{.*}}!section_prefix
 ; The sum of all callsites are neither hot or cold
 define void @normal_func() !prof !16 {
   call void @hot_func(), !prof !17
@@ -28,12 +32,36 @@
 }
 
 ; CHECK: cold_func{{.*}}!section_prefix ![[COLD_ID:[0-9]+]]
+; ACCURATE: cold_func{{.*}}!section_prefix ![[COLD_ID:[0-9]+]]
 ; The entry and the callsite are both cold
 define void @cold_func() !prof !16 {
   call void @hot_func(), !prof !18
   ret void
 }
 
+
+; CHECK-NOT: foo_not_in_profile{{.*}}!section_prefix
+; The function not appearing in profile is neither hot nor cold
+;
+; ACCURATE: foo_not_in_profile{{.*}}!section_prefix ![[COLD_ID:[0-9]+]]
+; The function not appearing in profile is cold when -profile-sample-accurate
+; is on
+define void @foo_not_in_profile() !prof !19 {
+  call void @hot_func()
+  ret void
+}
+
+; CHECK: bar_not_in_profile{{.*}}!section_prefix ![[COLD_ID:[0-9]+]]
+; ACCURATE: bar_not_in_profile{{.*}}!section_prefix ![[COLD_ID:[0-9]+]]
+; The function not appearing in profile is cold when the func has
+; profile-sample-accurate attribute
+define void @bar_not_in_profile() #0 !prof !19 {
+  call void @hot_func()
+  ret void
+}
+
+attributes #0 = { "profile-sample-accurate" }
+
 ; CHECK: ![[HOT_ID]] = !{!"function_section_prefix", !".hot"}
 ; CHECK: ![[COLD_ID]] = !{!"function_section_prefix", !".unlikely"}
 !llvm.module.flags = !{!1}
@@ -55,3 +83,4 @@
 !16 = !{!"function_entry_count", i64 1}
 !17 = !{!"branch_weights", i32 80}
 !18 = !{!"branch_weights", i32 1}
+!19 = !{!"function_entry_count", i64 -1}
Index: lib/Analysis/ProfileSummaryInfo.cpp
===================================================================
--- lib/Analysis/ProfileSummaryInfo.cpp
+++ lib/Analysis/ProfileSummaryInfo.cpp
@@ -261,7 +261,14 @@
 bool ProfileSummaryInfo::isColdBlock(const BasicBlock *BB,
                                   BlockFrequencyInfo *BFI) {
   auto Count = BFI->getBlockProfileCount(BB);
-  return Count && isColdCount(*Count);
+  if (Count)
+    return isColdCount(*Count);
+  if (!hasSampleProfile())
+    return false;
+
+  const Function *F = BB->getParent();
+  return ProfileSampleAccurate ||
+         (F && F->hasFnAttribute("profile-sample-accurate"));
 }
 
 bool ProfileSummaryInfo::isHotCallSite(const CallSite &CS,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55567.177860.patch
Type: text/x-patch
Size: 3298 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181212/a3505151/attachment.bin>


More information about the llvm-commits mailing list