[llvm] r355252 - [ProfileData] Sort FuncData before iteration to remove non-determinism
Mandeep Singh Grang via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 1 16:47:43 PST 2019
Author: mgrang
Date: Fri Mar 1 16:47:43 2019
New Revision: 355252
URL: http://llvm.org/viewvc/llvm-project?rev=355252&view=rev
Log:
[ProfileData] Sort FuncData before iteration to remove non-determinism
Reviewers: rsmith, bogner, dblaikie
Reviewed By: dblaikie
Subscribers: Hahnfeld, jdoerfert, vsk, dblaikie, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D57986
Modified:
llvm/trunk/lib/ProfileData/InstrProfWriter.cpp
Modified: llvm/trunk/lib/ProfileData/InstrProfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProfWriter.cpp?rev=355252&r1=355251&r2=355252&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/InstrProfWriter.cpp (original)
+++ llvm/trunk/lib/ProfileData/InstrProfWriter.cpp Fri Mar 1 16:47:43 2019
@@ -408,14 +408,30 @@ Error InstrProfWriter::writeText(raw_fd_
else if (ProfileKind == PF_IRLevelWithCS)
OS << "# CSIR level Instrumentation Flag\n:csir\n";
InstrProfSymtab Symtab;
- for (const auto &I : FunctionData)
- if (shouldEncodeData(I.getValue()))
+
+ using FuncPair = detail::DenseMapPair<uint64_t, InstrProfRecord>;
+ using RecordType = std::pair<StringRef, FuncPair>;
+ SmallVector<RecordType, 4> OrderedFuncData;
+
+ for (const auto &I : FunctionData) {
+ if (shouldEncodeData(I.getValue())) {
if (Error E = Symtab.addFuncName(I.getKey()))
return E;
-
- for (const auto &I : FunctionData)
- if (shouldEncodeData(I.getValue()))
for (const auto &Func : I.getValue())
- writeRecordInText(I.getKey(), Func.first, Func.second, Symtab, OS);
+ OrderedFuncData.push_back(std::make_pair(I.getKey(), Func));
+ }
+ }
+
+ llvm::sort(OrderedFuncData, [](const RecordType &A, const RecordType &B) {
+ return std::tie(A.first, A.second.first) <
+ std::tie(B.first, B.second.first);
+ });
+
+ for (const auto &record : OrderedFuncData) {
+ const StringRef &Name = record.first;
+ const FuncPair &Func = record.second;
+ writeRecordInText(Name, Func.first, Func.second, Symtab, OS);
+ }
+
return Error::success();
}
More information about the llvm-commits
mailing list