[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