aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp54
1 files changed, 20 insertions, 34 deletions
diff --git a/contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp b/contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp
index 1630fefb4fcf..9173a0f94f69 100644
--- a/contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp
+++ b/contrib/llvm-project/llvm/lib/ProfileData/SampleProfWriter.cpp
@@ -22,14 +22,12 @@
#include "llvm/ProfileData/ProfileCommon.h"
#include "llvm/ProfileData/SampleProf.h"
#include "llvm/Support/Compression.h"
-#include "llvm/Support/Endian.h"
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/raw_ostream.h"
-#include <algorithm>
#include <cmath>
#include <cstdint>
#include <memory>
@@ -582,12 +580,8 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) {
LineLocation Loc = I->first;
const SampleRecord &Sample = I->second;
OS.indent(Indent + 1);
- if (Loc.Discriminator == 0)
- OS << Loc.LineOffset << ": ";
- else
- OS << Loc.LineOffset << "." << Loc.Discriminator << ": ";
-
- OS << Sample.getSamples();
+ Loc.print(OS);
+ OS << ": " << Sample.getSamples();
for (const auto &J : Sample.getSortedCallTargets())
OS << " " << J.first << ":" << J.second;
@@ -598,18 +592,18 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) {
SampleSorter<LineLocation, FunctionSamplesMap> SortedCallsiteSamples(
S.getCallsiteSamples());
Indent += 1;
- for (const auto &I : SortedCallsiteSamples.get())
- for (const auto &FS : I->second) {
- LineLocation Loc = I->first;
- const FunctionSamples &CalleeSamples = FS.second;
+ for (const auto *Element : SortedCallsiteSamples.get()) {
+ // Element is a pointer to a pair of LineLocation and FunctionSamplesMap.
+ const auto &[Loc, FunctionSamplesMap] = *Element;
+ for (const FunctionSamples &CalleeSamples :
+ make_second_range(FunctionSamplesMap)) {
OS.indent(Indent);
- if (Loc.Discriminator == 0)
- OS << Loc.LineOffset << ": ";
- else
- OS << Loc.LineOffset << "." << Loc.Discriminator << ": ";
+ Loc.print(OS);
+ OS << ": ";
if (std::error_code EC = writeSample(CalleeSamples))
return EC;
}
+ }
Indent -= 1;
if (FunctionSamples::ProfileIsProbeBased) {
@@ -624,6 +618,9 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) {
LineCount++;
}
+ if (Indent == 0 && MarkFlatProfiles && S.getCallsiteSamples().size() == 0)
+ OS << " !Flat\n";
+
return sampleprof_error::success;
}
@@ -832,17 +829,8 @@ std::error_code SampleProfileWriterBinary::writeBody(const FunctionSamples &S) {
for (const auto &I : S.getBodySamples()) {
LineLocation Loc = I.first;
const SampleRecord &Sample = I.second;
- encodeULEB128(Loc.LineOffset, OS);
- encodeULEB128(Loc.Discriminator, OS);
- encodeULEB128(Sample.getSamples(), OS);
- encodeULEB128(Sample.getCallTargets().size(), OS);
- for (const auto &J : Sample.getSortedCallTargets()) {
- FunctionId Callee = J.first;
- uint64_t CalleeSamples = J.second;
- if (std::error_code EC = writeNameIdx(Callee))
- return EC;
- encodeULEB128(CalleeSamples, OS);
- }
+ Loc.serialize(OS);
+ Sample.serialize(OS, getNameTable());
}
// Recursively emit all the callsite samples.
@@ -850,13 +838,11 @@ std::error_code SampleProfileWriterBinary::writeBody(const FunctionSamples &S) {
for (const auto &J : S.getCallsiteSamples())
NumCallsites += J.second.size();
encodeULEB128(NumCallsites, OS);
- for (const auto &J : S.getCallsiteSamples())
- for (const auto &FS : J.second) {
- LineLocation Loc = J.first;
- const FunctionSamples &CalleeSamples = FS.second;
- encodeULEB128(Loc.LineOffset, OS);
- encodeULEB128(Loc.Discriminator, OS);
- if (std::error_code EC = writeBody(CalleeSamples))
+ for (const auto &[Loc, CalleeFunctionSampleMap] : S.getCallsiteSamples())
+ for (const auto &FunctionSample :
+ llvm::make_second_range(CalleeFunctionSampleMap)) {
+ Loc.serialize(OS);
+ if (std::error_code EC = writeBody(FunctionSample))
return EC;
}