aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ProfileData/SampleProfWriter.cpp
diff options
context:
space:
mode:
authorHongtao Yu <hoy@fb.com>2021-08-16 14:17:43 -0700
committerHongtao Yu <hoy@fb.com>2021-08-16 17:22:30 -0700
commitf27fee623d0124c64a73374d0256819396647864 (patch)
tree1be8dc7e5d503afa9f515ae9603e3dd67798bec2 /llvm/lib/ProfileData/SampleProfWriter.cpp
parent9ed4a94d6451046a51ef393cd62f00710820a7e8 (diff)
downloadllvm-f27fee623d0124c64a73374d0256819396647864.zip
llvm-f27fee623d0124c64a73374d0256819396647864.tar.gz
llvm-f27fee623d0124c64a73374d0256819396647864.tar.bz2
[SamplePGO][NFC] Dump function profiles in order
Sample profiles are stored in a string map which is basically an unordered map. Printing out profiles by simply walking the string map doesn't enforce an order. I'm sorting the map in the decreasing order of total samples to enable a more stable dump, which is good for comparing two dumps. Reviewed By: wenlei, wlei Differential Revision: https://reviews.llvm.org/D108147
Diffstat (limited to 'llvm/lib/ProfileData/SampleProfWriter.cpp')
-rw-r--r--llvm/lib/ProfileData/SampleProfWriter.cpp15
1 files changed, 1 insertions, 14 deletions
diff --git a/llvm/lib/ProfileData/SampleProfWriter.cpp b/llvm/lib/ProfileData/SampleProfWriter.cpp
index 535f879..3b29395 100644
--- a/llvm/lib/ProfileData/SampleProfWriter.cpp
+++ b/llvm/lib/ProfileData/SampleProfWriter.cpp
@@ -43,21 +43,8 @@ using namespace sampleprof;
std::error_code SampleProfileWriter::writeFuncProfiles(
const StringMap<FunctionSamples> &ProfileMap) {
- // Sort the ProfileMap by total samples.
- typedef std::pair<StringRef, const FunctionSamples *> NameFunctionSamples;
std::vector<NameFunctionSamples> V;
- for (const auto &I : ProfileMap) {
- assert(I.getKey() == I.second.getNameWithContext() &&
- "Inconsistent profile map");
- V.push_back(std::make_pair(I.second.getNameWithContext(), &I.second));
- }
- llvm::stable_sort(
- V, [](const NameFunctionSamples &A, const NameFunctionSamples &B) {
- if (A.second->getTotalSamples() == B.second->getTotalSamples())
- return A.first > B.first;
- return A.second->getTotalSamples() > B.second->getTotalSamples();
- });
-
+ sortFuncProfiles(ProfileMap, V);
for (const auto &I : V) {
if (std::error_code EC = writeSample(*I.second))
return EC;