diff options
Diffstat (limited to 'llvm/lib/ProfileData/SampleProfWriter.cpp')
-rw-r--r-- | llvm/lib/ProfileData/SampleProfWriter.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/ProfileData/SampleProfWriter.cpp b/llvm/lib/ProfileData/SampleProfWriter.cpp index 7a00c3f..b964348 100644 --- a/llvm/lib/ProfileData/SampleProfWriter.cpp +++ b/llvm/lib/ProfileData/SampleProfWriter.cpp @@ -170,12 +170,15 @@ std::error_code SampleProfileWriterExtBinaryBase::writeFuncOffsetTable() { std::error_code SampleProfileWriterExtBinaryBase::writeFuncMetadata( const StringMap<FunctionSamples> &Profiles) { - if (!FunctionSamples::ProfileIsProbeBased) + if (!FunctionSamples::ProfileIsProbeBased && !FunctionSamples::ProfileIsCS) return sampleprof_error::success; auto &OS = *OutputStream; for (const auto &Entry : Profiles) { writeNameIdx(Entry.first()); - encodeULEB128(Entry.second.getFunctionHash(), OS); + if (FunctionSamples::ProfileIsProbeBased) + encodeULEB128(Entry.second.getFunctionHash(), OS); + if (FunctionSamples::ProfileIsCS) + encodeULEB128(Entry.second.getContext().getAllAttributes(), OS); } return sampleprof_error::success; } @@ -239,6 +242,8 @@ std::error_code SampleProfileWriterExtBinaryBase::writeOneSection( addSectionFlag(SecFuncMetadata, SecFuncMetadataFlags::SecFlagIsProbeBased); if (Type == SecProfSummary && FunctionSamples::ProfileIsCS) addSectionFlag(SecProfSummary, SecProfSummaryFlags::SecFlagFullContext); + if (Type == SecFuncMetadata && FunctionSamples::ProfileIsCS) + addSectionFlag(SecFuncMetadata, SecFuncMetadataFlags::SecFlagHasAttribute); uint64_t SectionStart = markSectionStart(Type, LayoutIdx); switch (Type) { @@ -417,6 +422,10 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) { OS.indent(Indent + 1); OS << "!CFGChecksum: " << S.getFunctionHash() << "\n"; } + if (FunctionSamples::ProfileIsCS) { + OS.indent(Indent + 1); + OS << "!Attributes: " << S.getContext().getAllAttributes() << "\n"; + } } return sampleprof_error::success; |