[llvm] [ProfileData] Refactor VTableNamePtr and CompressedVTableNamesLen (NFC) (PR #94859)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 8 08:24:40 PDT 2024
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/94859
VTableNamePtr and CompressedVTableNamesLen are always used together to
create a StringRef in getSymtab.
We can create the StringRef ahead of time in readHeader. This way,
IndexedInstrProfReader becomes a tiny bit simpler with fewer member
variables. Also, StringRef default-constructs itself with its Data
and Length set to nullptr and 0, respectively, which is exactly what
we need.
>From 13f55d84efb5a23885db7859fde6d0ee053c3763 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 8 Jun 2024 07:50:40 -0700
Subject: [PATCH] [ProfileData] Refactor VTableNamePtr and
CompressedVTableNamesLen (NFC)
VTableNamePtr and CompressedVTableNamesLen are always used together to
create a StringRef in getSymtab.
We can create the StringRef ahead of time in readHeader. This way,
IndexedInstrProfReader becomes a tiny bit simpler with fewer member
variables. Also, StringRef default-constructs itself with its Data
and Length set to nullptr and 0, respectively, which is exactly what
we need.
---
llvm/include/llvm/ProfileData/InstrProfReader.h | 9 ++-------
llvm/lib/ProfileData/InstrProfReader.cpp | 9 +++++----
2 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/llvm/include/llvm/ProfileData/InstrProfReader.h b/llvm/include/llvm/ProfileData/InstrProfReader.h
index 34dba870d8da3..37f8e1612a878 100644
--- a/llvm/include/llvm/ProfileData/InstrProfReader.h
+++ b/llvm/include/llvm/ProfileData/InstrProfReader.h
@@ -693,15 +693,10 @@ class IndexedInstrProfReader : public InstrProfReader {
/// Context sensitive profile summary data.
std::unique_ptr<ProfileSummary> CS_Summary;
IndexedMemProfReader MemProfReader;
- /// VTableNamePtr points to the beginning of compressed vtable names.
- /// When a symtab is constructed from profiles by llvm-profdata, the list of
- /// names could be decompressed based on `VTableNamePtr` and
- /// `CompressedVTableNamesLen`.
+ /// The compressed vtable names, to be used for symtab construction.
/// A compiler that reads indexed profiles could construct symtab from module
/// IR so it doesn't need the decompressed names.
- const char *VTableNamePtr = nullptr;
- /// The length of compressed vtable names.
- uint64_t CompressedVTableNamesLen = 0;
+ StringRef VTableName;
/// Total size of binary ids.
uint64_t BinaryIdsSize{0};
/// Start address of binary id length and data pairs.
diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp
index 7758363d9c952..ec78a50af2cb8 100644
--- a/llvm/lib/ProfileData/InstrProfReader.cpp
+++ b/llvm/lib/ProfileData/InstrProfReader.cpp
@@ -1403,14 +1403,16 @@ Error IndexedInstrProfReader::readHeader() {
if (Header->getIndexedProfileVersion() >= 12) {
const unsigned char *Ptr = Start + Header->VTableNamesOffset;
- CompressedVTableNamesLen =
+ uint64_t CompressedVTableNamesLen =
support::endian::readNext<uint64_t, llvm::endianness::little>(Ptr);
// Writer first writes the length of compressed string, and then the actual
// content.
- VTableNamePtr = (const char *)Ptr;
+ const char *VTableNamePtr = (const char *)Ptr;
if (VTableNamePtr > (const char *)DataBuffer->getBufferEnd())
return make_error<InstrProfError>(instrprof_error::truncated);
+
+ VTableName = StringRef(VTableNamePtr, CompressedVTableNamesLen);
}
if (Header->getIndexedProfileVersion() >= 10 &&
@@ -1466,8 +1468,7 @@ InstrProfSymtab &IndexedInstrProfReader::getSymtab() {
auto NewSymtab = std::make_unique<InstrProfSymtab>();
- if (Error E = NewSymtab->initVTableNamesFromCompressedStrings(
- StringRef(VTableNamePtr, CompressedVTableNamesLen))) {
+ if (Error E = NewSymtab->initVTableNamesFromCompressedStrings(VTableName)) {
auto [ErrCode, Msg] = InstrProfError::take(std::move(E));
consumeError(error(ErrCode, Msg));
}
More information about the llvm-commits
mailing list