diff options
author | Mingming Liu <mingmingl@google.com> | 2024-05-22 21:10:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-22 21:10:09 -0700 |
commit | beac910c3bfcbf1395f2617874350ee59bc61289 (patch) | |
tree | c8af84d63f7fac0882a14882d282d037ff60dc21 /llvm/lib/ProfileData/InstrProfWriter.cpp | |
parent | 2375921d6734016c9079727f798c5585653e858c (diff) | |
download | llvm-beac910c3bfcbf1395f2617874350ee59bc61289.zip llvm-beac910c3bfcbf1395f2617874350ee59bc61289.tar.gz llvm-beac910c3bfcbf1395f2617874350ee59bc61289.tar.bz2 |
[nfc][InstrProfWriter]Wrap vtable writes in a method. (#93081)
- This way `InstrProfWriter::writeImpl` itself is simpler.
Diffstat (limited to 'llvm/lib/ProfileData/InstrProfWriter.cpp')
-rw-r--r-- | llvm/lib/ProfileData/InstrProfWriter.cpp | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/llvm/lib/ProfileData/InstrProfWriter.cpp b/llvm/lib/ProfileData/InstrProfWriter.cpp index 86bd9fe..b67a970 100644 --- a/llvm/lib/ProfileData/InstrProfWriter.cpp +++ b/llvm/lib/ProfileData/InstrProfWriter.cpp @@ -660,6 +660,37 @@ uint64_t InstrProfWriter::writeHeader(const IndexedInstrProf::Header &Header, return BackPatchStartOffset; } +Error InstrProfWriter::writeVTableNames(ProfOStream &OS) { + std::vector<std::string> VTableNameStrs; + for (StringRef VTableName : VTableNames.keys()) + VTableNameStrs.push_back(VTableName.str()); + + std::string CompressedVTableNames; + if (!VTableNameStrs.empty()) + if (Error E = collectGlobalObjectNameStrings( + VTableNameStrs, compression::zlib::isAvailable(), + CompressedVTableNames)) + return E; + + const uint64_t CompressedStringLen = CompressedVTableNames.length(); + + // Record the length of compressed string. + OS.write(CompressedStringLen); + + // Write the chars in compressed strings. + for (auto &c : CompressedVTableNames) + OS.writeByte(static_cast<uint8_t>(c)); + + // Pad up to a multiple of 8. + // InstrProfReader could read bytes according to 'CompressedStringLen'. + const uint64_t PaddedLength = alignTo(CompressedStringLen, 8); + + for (uint64_t K = CompressedStringLen; K < PaddedLength; K++) + OS.writeByte(0); + + return Error::success(); +} + Error InstrProfWriter::writeImpl(ProfOStream &OS) { using namespace IndexedInstrProf; using namespace support; @@ -775,34 +806,9 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) { uint64_t VTableNamesSectionStart = OS.tell(); - if (!WritePrevVersion) { - std::vector<std::string> VTableNameStrs; - for (StringRef VTableName : VTableNames.keys()) - VTableNameStrs.push_back(VTableName.str()); - - std::string CompressedVTableNames; - if (!VTableNameStrs.empty()) - if (Error E = collectGlobalObjectNameStrings( - VTableNameStrs, compression::zlib::isAvailable(), - CompressedVTableNames)) - return E; - - const uint64_t CompressedStringLen = CompressedVTableNames.length(); - - // Record the length of compressed string. - OS.write(CompressedStringLen); - - // Write the chars in compressed strings. - for (auto &c : CompressedVTableNames) - OS.writeByte(static_cast<uint8_t>(c)); - - // Pad up to a multiple of 8. - // InstrProfReader could read bytes according to 'CompressedStringLen'. - const uint64_t PaddedLength = alignTo(CompressedStringLen, 8); - - for (uint64_t K = CompressedStringLen; K < PaddedLength; K++) - OS.writeByte(0); - } + if (!WritePrevVersion) + if (Error E = writeVTableNames(OS)) + return E; uint64_t TemporalProfTracesSectionStart = 0; if (static_cast<bool>(ProfileKind & InstrProfKind::TemporalProfile)) { |