diff options
| author | Xinliang David Li <davidxl@google.com> | 2016-01-16 05:29:49 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2016-01-16 05:29:49 +0000 |
| commit | 6ed987dffe8365b63e938440b1c5d9960511107d (patch) | |
| tree | 59969cad9d77b7a606440951c7b8aa2268ba50be | |
| parent | 954c95c08b87d4042ed51e5b936bcfd20564ca4f (diff) | |
| download | bcm5719-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.h | 15 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-profdata/general.proftext | 26 | ||||
| -rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 2 |
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"; |

