diff options
Diffstat (limited to 'llvm/lib/ProfileData/SampleProfWriter.cpp')
| -rw-r--r-- | llvm/lib/ProfileData/SampleProfWriter.cpp | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/llvm/lib/ProfileData/SampleProfWriter.cpp b/llvm/lib/ProfileData/SampleProfWriter.cpp index 0873093ad426..625e523f13ce 100644 --- a/llvm/lib/ProfileData/SampleProfWriter.cpp +++ b/llvm/lib/ProfileData/SampleProfWriter.cpp @@ -83,11 +83,9 @@ void DefaultFunctionPruningStrategy::Erase(size_t CurrentOutputSize) { NumToRemove = 1; assert(NumToRemove <= SortedFunctions.size()); - llvm::for_each( - llvm::make_range(SortedFunctions.begin() + SortedFunctions.size() - - NumToRemove, - SortedFunctions.end()), - [&](const NameFunctionSamples &E) { ProfileMap.erase(E.first); }); + for (const NameFunctionSamples &E : + llvm::drop_begin(SortedFunctions, SortedFunctions.size() - NumToRemove)) + ProfileMap.erase(E.first); SortedFunctions.resize(SortedFunctions.size() - NumToRemove); } @@ -242,7 +240,7 @@ std::error_code SampleProfileWriterExtBinaryBase::writeContextIdx( if (Context.hasContext()) return writeCSNameIdx(Context); else - return SampleProfileWriterBinary::writeNameIdx(Context.getName()); + return SampleProfileWriterBinary::writeNameIdx(Context.getFunction()); } std::error_code @@ -348,23 +346,22 @@ std::error_code SampleProfileWriterExtBinaryBase::writeNameTable() { return SampleProfileWriterBinary::writeNameTable(); auto &OS = *OutputStream; - std::set<StringRef> V; + std::set<FunctionId> V; stablizeNameTable(NameTable, V); // Write out the MD5 name table. We wrote unencoded MD5 so reader can // retrieve the name using the name index without having to read the // whole name table. encodeULEB128(NameTable.size(), OS); - support::endian::Writer Writer(OS, support::little); + support::endian::Writer Writer(OS, llvm::endianness::little); for (auto N : V) - Writer.write(MD5Hash(N)); + Writer.write(N.getHashCode()); return sampleprof_error::success; } std::error_code SampleProfileWriterExtBinaryBase::writeNameTableSection( const SampleProfileMap &ProfileMap) { for (const auto &I : ProfileMap) { - assert(I.first == I.second.getContext() && "Inconsistent profile map"); addContext(I.second.getContext()); addNames(I.second); } @@ -372,10 +369,13 @@ std::error_code SampleProfileWriterExtBinaryBase::writeNameTableSection( // If NameTable contains ".__uniq." suffix, set SecFlagUniqSuffix flag // so compiler won't strip the suffix during profile matching after // seeing the flag in the profile. - for (const auto &I : NameTable) { - if (I.first.contains(FunctionSamples::UniqSuffix)) { - addSectionFlag(SecNameTable, SecNameTableFlags::SecFlagUniqSuffix); - break; + // Original names are unavailable if using MD5, so this option has no use. + if (!UseMD5) { + for (const auto &I : NameTable) { + if (I.first.stringRef().contains(FunctionSamples::UniqSuffix)) { + addSectionFlag(SecNameTable, SecNameTableFlags::SecFlagUniqSuffix); + break; + } } } @@ -397,12 +397,12 @@ std::error_code SampleProfileWriterExtBinaryBase::writeCSNameTableSection() { auto &OS = *OutputStream; encodeULEB128(OrderedContexts.size(), OS); - support::endian::Writer Writer(OS, support::little); + support::endian::Writer Writer(OS, llvm::endianness::little); for (auto Context : OrderedContexts) { auto Frames = Context.getContextFrames(); encodeULEB128(Frames.size(), OS); for (auto &Callsite : Frames) { - if (std::error_code EC = writeNameIdx(Callsite.FuncName)) + if (std::error_code EC = writeNameIdx(Callsite.Func)) return EC; encodeULEB128(Callsite.Location.LineOffset, OS); encodeULEB128(Callsite.Location.Discriminator, OS); @@ -570,7 +570,7 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) { if (FunctionSamples::ProfileIsCS) OS << "[" << S.getContext().toString() << "]:" << S.getTotalSamples(); else - OS << S.getName() << ":" << S.getTotalSamples(); + OS << S.getFunction() << ":" << S.getTotalSamples(); if (Indent == 0) OS << ":" << S.getHeadSamples(); @@ -630,10 +630,10 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) { std::error_code SampleProfileWriterBinary::writeContextIdx(const SampleContext &Context) { assert(!Context.hasContext() && "cs profile is not supported"); - return writeNameIdx(Context.getName()); + return writeNameIdx(Context.getFunction()); } -std::error_code SampleProfileWriterBinary::writeNameIdx(StringRef FName) { +std::error_code SampleProfileWriterBinary::writeNameIdx(FunctionId FName) { auto &NTable = getNameTable(); const auto &Ret = NTable.find(FName); if (Ret == NTable.end()) @@ -642,13 +642,13 @@ std::error_code SampleProfileWriterBinary::writeNameIdx(StringRef FName) { return sampleprof_error::success; } -void SampleProfileWriterBinary::addName(StringRef FName) { +void SampleProfileWriterBinary::addName(FunctionId FName) { auto &NTable = getNameTable(); NTable.insert(std::make_pair(FName, 0)); } void SampleProfileWriterBinary::addContext(const SampleContext &Context) { - addName(Context.getName()); + addName(Context.getFunction()); } void SampleProfileWriterBinary::addNames(const FunctionSamples &S) { @@ -656,14 +656,14 @@ void SampleProfileWriterBinary::addNames(const FunctionSamples &S) { for (const auto &I : S.getBodySamples()) { const SampleRecord &Sample = I.second; for (const auto &J : Sample.getCallTargets()) - addName(J.first()); + addName(J.first); } // Recursively add all the names for inlined callsites. for (const auto &J : S.getCallsiteSamples()) for (const auto &FS : J.second) { const FunctionSamples &CalleeSamples = FS.second; - addName(CalleeSamples.getName()); + addName(CalleeSamples.getFunction()); addNames(CalleeSamples); } } @@ -672,26 +672,26 @@ void SampleProfileWriterExtBinaryBase::addContext( const SampleContext &Context) { if (Context.hasContext()) { for (auto &Callsite : Context.getContextFrames()) - SampleProfileWriterBinary::addName(Callsite.FuncName); + SampleProfileWriterBinary::addName(Callsite.Func); CSNameTable.insert(std::make_pair(Context, 0)); } else { - SampleProfileWriterBinary::addName(Context.getName()); + SampleProfileWriterBinary::addName(Context.getFunction()); } } void SampleProfileWriterBinary::stablizeNameTable( - MapVector<StringRef, uint32_t> &NameTable, std::set<StringRef> &V) { + MapVector<FunctionId, uint32_t> &NameTable, std::set<FunctionId> &V) { // Sort the names to make NameTable deterministic. for (const auto &I : NameTable) V.insert(I.first); int i = 0; - for (const StringRef &N : V) + for (const FunctionId &N : V) NameTable[N] = i++; } std::error_code SampleProfileWriterBinary::writeNameTable() { auto &OS = *OutputStream; - std::set<StringRef> V; + std::set<FunctionId> V; stablizeNameTable(NameTable, V); // Write out the name table. @@ -726,8 +726,7 @@ SampleProfileWriterBinary::writeHeader(const SampleProfileMap &ProfileMap) { // Generate the name table for all the functions referenced in the profile. for (const auto &I : ProfileMap) { - assert(I.first == I.second.getContext() && "Inconsistent profile map"); - addContext(I.first); + addContext(I.second.getContext()); addNames(I.second); } @@ -745,7 +744,7 @@ void SampleProfileWriterExtBinaryBase::setToCompressSection(SecType Type) { } void SampleProfileWriterExtBinaryBase::allocSecHdrTable() { - support::endian::Writer Writer(*OutputStream, support::little); + support::endian::Writer Writer(*OutputStream, llvm::endianness::little); Writer.write(static_cast<uint64_t>(SectionHdrLayout.size())); SecHdrTableOffset = OutputStream->tell(); @@ -775,7 +774,8 @@ std::error_code SampleProfileWriterExtBinaryBase::writeSecHdrTable() { // but it needs to be read before SecLBRProfile (the order in // SectionHdrLayout). So we use IndexMap above to switch the order. support::endian::SeekableWriter Writer( - static_cast<raw_pwrite_stream &>(*OutputStream), support::little); + static_cast<raw_pwrite_stream &>(*OutputStream), + llvm::endianness::little); for (uint32_t LayoutIdx = 0; LayoutIdx < SectionHdrLayout.size(); LayoutIdx++) { assert(IndexMap[LayoutIdx] < SecHdrTable.size() && @@ -838,7 +838,7 @@ std::error_code SampleProfileWriterBinary::writeBody(const FunctionSamples &S) { encodeULEB128(Sample.getSamples(), OS); encodeULEB128(Sample.getCallTargets().size(), OS); for (const auto &J : Sample.getSortedCallTargets()) { - StringRef Callee = J.first; + FunctionId Callee = J.first; uint64_t CalleeSamples = J.second; if (std::error_code EC = writeNameIdx(Callee)) return EC; |
