[PATCH] D41307: [PGO] Fix handling of cold entry count for instrumented PGO

Teresa Johnson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 15 13:46:43 PST 2017


tejohnson updated this revision to Diff 127191.
tejohnson added a comment.

Address comment


https://reviews.llvm.org/D41307

Files:
  lib/IR/Function.cpp
  lib/Transforms/IPO/SampleProfile.cpp
  test/Transforms/SampleProfile/entry_counts.ll


Index: test/Transforms/SampleProfile/entry_counts.ll
===================================================================
--- test/Transforms/SampleProfile/entry_counts.ll
+++ test/Transforms/SampleProfile/entry_counts.ll
@@ -9,8 +9,8 @@
   ret void, !dbg !9
 }
 
-; This function does not have profile, check if function_entry_count is 0
-; CHECK: {{.*}} = !{!"function_entry_count", i64 0}
+; This function does not have profile, check if function_entry_count is -1
+; CHECK: {{.*}} = !{!"function_entry_count", i64 -1}
 define void @no_profile() {
 entry:
   ret void
Index: lib/Transforms/IPO/SampleProfile.cpp
===================================================================
--- lib/Transforms/IPO/SampleProfile.cpp
+++ lib/Transforms/IPO/SampleProfile.cpp
@@ -1583,7 +1583,10 @@
 }
 
 bool SampleProfileLoader::runOnFunction(Function &F, ModuleAnalysisManager *AM) {
-  F.setEntryCount(0);
+  // Initialize the entry count to -1, which will be treated conservatively
+  // by getEntryCount as the same as unknown (None). If we have samples this
+  // will be overwritten in emitAnnotations.
+  F.setEntryCount(-1);
   std::unique_ptr<OptimizationRemarkEmitter> OwnedORE;
   if (AM) {
     auto &FAM =
Index: lib/IR/Function.cpp
===================================================================
--- lib/IR/Function.cpp
+++ lib/IR/Function.cpp
@@ -1333,7 +1333,9 @@
       if (MDS->getString().equals("function_entry_count")) {
         ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(1));
         uint64_t Count = CI->getValue().getZExtValue();
-        if (Count == 0)
+        // A value of -1 is used for SamplePGO when there were no samples.
+        // Treat this the same as unknown.
+        if (Count == (uint64_t)-1)
           return None;
         return Count;
       }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41307.127191.patch
Type: text/x-patch
Size: 1807 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171215/ae7e96fa/attachment.bin>


More information about the llvm-commits mailing list