[PATCH] D17424: Set MaxFunctionCount for SampleProfileReader.

Dehao Chen via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 18 16:32:44 PST 2016


danielcdh created this revision.
danielcdh added reviewers: davidxl, dnovillo, eraman.
danielcdh added a subscriber: llvm-commits.

This patch sets MaxFunctionCount for SampleProfileReader and SampleProfile pass so that InlineCost can get correct value.

http://reviews.llvm.org/D17424

Files:
  include/llvm/ProfileData/SampleProfReader.h
  lib/ProfileData/SampleProfReader.cpp
  lib/Transforms/IPO/SampleProfile.cpp

Index: lib/Transforms/IPO/SampleProfile.cpp
===================================================================
--- lib/Transforms/IPO/SampleProfile.cpp
+++ lib/Transforms/IPO/SampleProfile.cpp
@@ -1243,6 +1243,8 @@
   if (!ProfileIsValid)
     return false;
 
+  M.setMaximumFunctionCount(Reader->getMaxFunctionCount());
+
   // Compute the total number of samples collected in this profile.
   for (const auto &I : Reader->getProfiles())
     TotalCollectedSamples += I.second.getTotalSamples();
Index: lib/ProfileData/SampleProfReader.cpp
===================================================================
--- lib/ProfileData/SampleProfReader.cpp
+++ lib/ProfileData/SampleProfReader.cpp
@@ -182,6 +182,9 @@
       FunctionSamples &FProfile = Profiles[FName];
       MergeResult(Result, FProfile.addTotalSamples(NumSamples));
       MergeResult(Result, FProfile.addHeadSamples(NumHeadSamples));
+      if (NumHeadSamples > MaxFunctionCount) {
+        MaxFunctionCount = NumHeadSamples;
+      }
       InlineStack.clear();
       InlineStack.push_back(&FProfile);
     } else {
@@ -374,6 +377,9 @@
     FunctionSamples &FProfile = Profiles[*FName];
 
     FProfile.addHeadSamples(*NumHeadSamples);
+    if (*NumHeadSamples > MaxFunctionCount) {
+      MaxFunctionCount = *NumHeadSamples;
+    }
 
     if (std::error_code EC = readProfile(FProfile))
       return EC;
@@ -552,6 +558,10 @@
     // the profile of the original function.
     FProfile = &Profiles[Name];
     FProfile->addHeadSamples(HeadCount);
+    if (HeadCount > MaxFunctionCount) {
+      MaxFunctionCount = HeadCount;
+    }
+
     if (FProfile->getTotalSamples() > 0)
       Update = false;
   } else {
Index: include/llvm/ProfileData/SampleProfReader.h
===================================================================
--- include/llvm/ProfileData/SampleProfReader.h
+++ include/llvm/ProfileData/SampleProfReader.h
@@ -232,7 +232,7 @@
 class SampleProfileReader {
 public:
   SampleProfileReader(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
-      : Profiles(0), Ctx(C), Buffer(std::move(B)) {}
+      : Profiles(0), MaxFunctionCount(0), Ctx(C), Buffer(std::move(B)) {}
 
   virtual ~SampleProfileReader() {}
 
@@ -262,6 +262,9 @@
                                              LineNumber, Msg));
   }
 
+  /// \brief Return maximum function entry count;
+  uint64_t getMaxFunctionCount() const { return MaxFunctionCount; }
+
   /// \brief Create a sample profile reader appropriate to the file format.
   static ErrorOr<std::unique_ptr<SampleProfileReader>>
   create(StringRef Filename, LLVMContext &C);
@@ -278,6 +281,9 @@
   /// to their corresponding profiles.
   StringMap<FunctionSamples> Profiles;
 
+  /// \brief Max entry count of all functions.
+  uint64_t MaxFunctionCount;
+
   /// \brief LLVM context used to emit diagnostics.
   LLVMContext &Ctx;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17424.48426.patch
Type: text/x-patch
Size: 2846 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160219/9b58c41b/attachment.bin>


More information about the llvm-commits mailing list