summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinliang David Li <davidxl@google.com>2016-01-16 05:29:49 +0000
committerXinliang David Li <davidxl@google.com>2016-01-16 05:29:49 +0000
commit6ed987dffe8365b63e938440b1c5d9960511107d (patch)
tree59969cad9d77b7a606440951c7b8aa2268ba50be
parent954c95c08b87d4042ed51e5b936bcfd20564ca4f (diff)
downloadbcm5719-llvm-6ed987dffe8365b63e938440b1c5d9960511107d.tar.gz
bcm5719-llvm-6ed987dffe8365b63e938440b1c5d9960511107d.zip
[PGO] fix a bug in profile summary computation
Entry block count was not counted and is corrected. Also introduce a new metric that is MaxInternalBlockCount which show command shows (as before). llvm-svn: 257987
-rw-r--r--llvm/include/llvm/ProfileData/InstrProf.h15
-rw-r--r--llvm/test/tools/llvm-profdata/general.proftext26
-rw-r--r--llvm/tools/llvm-profdata/llvm-profdata.cpp2
3 files changed, 23 insertions, 20 deletions
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index b54026e3a98..39a8dd3ad3c 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -573,16 +573,16 @@ class ProfileSummary {
std::vector<uint32_t> DetailedSummaryCutoffs;
// Sum of all counts.
uint64_t TotalCount;
- uint64_t MaxBlockCount, MaxFunctionCount;
+ uint64_t MaxBlockCount, MaxInternalBlockCount, MaxFunctionCount;
uint32_t NumBlocks, NumFunctions;
- inline void addCount(uint64_t Count);
+ inline void addCount(uint64_t Count, bool IsEntry);
void computeDetailedSummary();
public:
static const int Scale = 1000000;
ProfileSummary(std::vector<uint32_t> Cutoffs)
: DetailedSummaryCutoffs(Cutoffs), TotalCount(0), MaxBlockCount(0),
- MaxFunctionCount(0), NumBlocks(0), NumFunctions(0) {}
+ MaxInternalBlockCount(0), MaxFunctionCount(0), NumBlocks(0), NumFunctions(0) {}
inline void addRecord(const InstrProfRecord &);
inline std::vector<ProfileSummaryEntry> &getDetailedSummary();
uint32_t getNumBlocks() { return NumBlocks; }
@@ -590,13 +590,16 @@ public:
uint32_t getNumFunctions() { return NumFunctions; }
uint64_t getMaxFunctionCount() { return MaxFunctionCount; }
uint64_t getMaxBlockCount() { return MaxBlockCount; }
+ uint64_t getMaxInternalBlockCount() { return MaxInternalBlockCount; }
};
// This is called when a count is seen in the profile.
-void ProfileSummary::addCount(uint64_t Count) {
+void ProfileSummary::addCount(uint64_t Count, bool IsEntry) {
TotalCount += Count;
if (Count > MaxBlockCount)
MaxBlockCount = Count;
+ if (!IsEntry && Count > MaxInternalBlockCount)
+ MaxInternalBlockCount = Count;
NumBlocks++;
CountFrequencies[Count]++;
}
@@ -606,8 +609,8 @@ void ProfileSummary::addRecord(const InstrProfRecord &R) {
if (R.Counts[0] > MaxFunctionCount)
MaxFunctionCount = R.Counts[0];
- for (size_t I = 1, E = R.Counts.size(); I < E; ++I)
- addCount(R.Counts[I]);
+ for (size_t I = 0, E = R.Counts.size(); I < E; ++I)
+ addCount(R.Counts[I], (I == 0));
}
std::vector<ProfileSummaryEntry> &ProfileSummary::getDetailedSummary() {
diff --git a/llvm/test/tools/llvm-profdata/general.proftext b/llvm/test/tools/llvm-profdata/general.proftext
index ae2baf55a11..574effde5e4 100644
--- a/llvm/test/tools/llvm-profdata/general.proftext
+++ b/llvm/test/tools/llvm-profdata/general.proftext
@@ -65,20 +65,20 @@ hex_hash
# RUN: llvm-profdata show --detailed-summary %t.profdata | FileCheck %s -check-prefix=DETAILED-SUMMARY
# DETAILED-SUMMARY: Detailed summary:
-# DETAILED-SUMMARY: Total number of blocks: 6
-# DETAILED-SUMMARY: Total count: 2233785415175766016
-# DETAILED-SUMMARY: 3 blocks with count >= 288230376151711744 account for 80 percentage of the total counts
-# DETAILED-SUMMARY: 3 blocks with count >= 288230376151711744 account for 90 percentage of the total counts
-# DETAILED-SUMMARY: 4 blocks with count >= 144115188075855872 account for 95 percentage of the total counts.
-# DETAILED-SUMMARY: 5 blocks with count >= 72057594037927936 account for 99 percentage of the total counts.
-# DETAILED-SUMMARY: 5 blocks with count >= 72057594037927936 account for 99.9 percentage of the total counts.
-# DETAILED-SUMMARY: 5 blocks with count >= 72057594037927936 account for 99.99 percentage of the total counts.
-# DETAILED-SUMMARY: 5 blocks with count >= 72057594037927936 account for 99.999 percentage of the total counts.
+# DETAILED-SUMMARY: Total number of blocks: 10
+# DETAILED-SUMMARY: Total count: 4539628424389557499
+# DETAILED-SUMMARY: 3 blocks with count >= 576460752303423488 account for 80 percentage of the total counts.
+# DETAILED-SUMMARY: 4 blocks with count >= 288230376151711744 account for 90 percentage of the total counts.
+# DETAILED-SUMMARY: 4 blocks with count >= 288230376151711744 account for 95 percentage of the total counts.
+# DETAILED-SUMMARY: 6 blocks with count >= 72057594037927936 account for 99 percentage of the total counts.
+# DETAILED-SUMMARY: 6 blocks with count >= 72057594037927936 account for 99.9 percentage of the total counts.
+# DETAILED-SUMMARY: 6 blocks with count >= 72057594037927936 account for 99.99 percentage of the total counts.
+# DETAILED-SUMMARY: 6 blocks with count >= 72057594037927936 account for 99.999 percentage of the total counts.
# RUN: llvm-profdata show --detailed-summary --detailed-summary-cutoffs=600000 %t.profdata | FileCheck %s -check-prefix=DETAILED-SUMMARY-2
-# DETAILED-SUMMARY-2: 2 blocks with count >= 576460752303423488 account for 60 percentage of the total counts.
+# DETAILED-SUMMARY-2: 2 blocks with count >= 1152921504606846976 account for 60 percentage of the total counts.
#
# RUN: llvm-profdata show --detailed-summary --detailed-summary-cutoffs=600000,900000,999999 %t.profdata | FileCheck %s -check-prefix=DETAILED-SUMMARY-3
-# DETAILED-SUMMARY-3: 2 blocks with count >= 576460752303423488 account for 60 percentage of the total counts.
-# DETAILED-SUMMARY-3: 3 blocks with count >= 288230376151711744 account for 90 percentage of the total counts
-# DETAILED-SUMMARY-3: 5 blocks with count >= 72057594037927936 account for 99.9999 percentage of the total counts.
+# DETAILED-SUMMARY-3: 2 blocks with count >= 1152921504606846976 account for 60 percentage of the total counts.
+# DETAILED-SUMMARY-3: 4 blocks with count >= 288230376151711744 account for 90 percentage of the total counts.
+# DETAILED-SUMMARY-3: 6 blocks with count >= 72057594037927936 account for 99.9999 percentage of the total counts.
diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp
index cbe28a16250..c6efacb3554 100644
--- a/llvm/tools/llvm-profdata/llvm-profdata.cpp
+++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp
@@ -333,7 +333,7 @@ static int showInstrProfile(std::string Filename, bool ShowCounts,
OS << "Functions shown: " << ShownFunctions << "\n";
OS << "Total functions: " << PS.getNumFunctions() << "\n";
OS << "Maximum function count: " << PS.getMaxFunctionCount() << "\n";
- OS << "Maximum internal block count: " << PS.getMaxBlockCount() << "\n";
+ OS << "Maximum internal block count: " << PS.getMaxInternalBlockCount() << "\n";
if (ShowDetailedSummary) {
OS << "Detailed summary:\n";
OpenPOWER on IntegriCloud