[llvm] [Support] Compact EnumEntry string storage (PR #202631)
David Zbarsky via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 9 07:00:20 PDT 2026
https://github.com/dzbarsky created https://github.com/llvm/llvm-project/pull/202631
EnumEntry stores two StringRef values even though all entries use string literals. On 64-bit targets this makes EnumEntry<uint32_t> 40 bytes, and the large CodeView and object-format enum tables account for tens of kilobytes of read-only data.
Store literal pointers and 16-bit lengths instead. Represent an alternate name that matches the primary name with a null pointer, and reconstruct StringRef values in accessors. Add a static assertion that keeps EnumEntry<uint32_t> at 24 bytes on LP64.
In an LLVM 22 arm64 release build, standalone llvm-readobj shrinks from 7,553,456 to 7,487,376 bytes (-66,080, -0.875%); its stripped size falls by 66,064 bytes. In the full LLVM multicall binary, size falls from 161,373,760 to 161,324,192 bytes (-49,568); stripped size falls by 49,552 bytes.
All 1,685 Support unit tests pass (1,658 passed and 27 skipped), including all ScopedPrinter tests. llvm-readobj output is byte-identical for representative ELF, COFF, Mach-O, and supported Wasm views. Across 80 randomized paired llvm-readobj trials, candidate/baseline CPU time was 0.9953 with a 95% bootstrap confidence interval of [0.9807, 1.0101].
Work towards #202616
>From d3766de437854c3ac272bbc68c008394faed4939 Mon Sep 17 00:00:00 2001
From: David Zbarsky <dzbarsky at gmail.com>
Date: Tue, 9 Jun 2026 09:13:36 -0400
Subject: [PATCH] [Support] Compact EnumEntry string storage
EnumEntry stores two StringRef values even though all entries use string literals. On 64-bit targets this makes EnumEntry<uint32_t> 40 bytes, and the large CodeView and object-format enum tables account for tens of kilobytes of read-only data.
Store literal pointers and 16-bit lengths instead. Represent an alternate name that matches the primary name with a null pointer, and reconstruct StringRef values in accessors. Add a static assertion that keeps EnumEntry<uint32_t> at 24 bytes on LP64.
In an LLVM 22 arm64 release build, standalone llvm-readobj shrinks from 7,553,456 to 7,487,376 bytes (-66,080, -0.875%); its stripped size falls by 66,064 bytes. In the full LLVM multicall binary, size falls from 161,373,760 to 161,324,192 bytes (-49,568); stripped size falls by 49,552 bytes.
All 1,685 Support unit tests pass (1,658 passed and 27 skipped), including all ScopedPrinter tests. llvm-readobj output is byte-identical for representative ELF, COFF, Mach-O, and supported Wasm views. Across 80 randomized paired llvm-readobj trials, candidate/baseline CPU time was 0.9953 with a 95% bootstrap confidence interval of [0.9807, 1.0101].
---
llvm/include/llvm/Object/ELFObjectFile.h | 2 +-
llvm/include/llvm/Support/ScopedPrinter.h | 54 +++++++++++++++----
llvm/lib/BinaryFormat/DXContainer.cpp | 2 +-
llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 2 +-
.../DebugInfo/CodeView/TypeRecordMapping.cpp | 6 +--
llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp | 28 +++++-----
llvm/lib/ObjectYAML/DXContainerYAML.cpp | 34 ++++++------
llvm/tools/llvm-objdump/COFFDump.cpp | 2 +-
llvm/tools/llvm-readobj/ELFDumper.cpp | 16 +++---
9 files changed, 90 insertions(+), 56 deletions(-)
diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h
index 7b6348095679f..1399dad78570a 100644
--- a/llvm/include/llvm/Object/ELFObjectFile.h
+++ b/llvm/include/llvm/Object/ELFObjectFile.h
@@ -200,7 +200,7 @@ class ELFSymbolRef : public SymbolRef {
uint8_t Type = getELFType();
for (const auto &EE : ElfSymbolTypes) {
if (EE.Value == Type) {
- return EE.AltName;
+ return EE.getAltName();
}
}
return "";
diff --git a/llvm/include/llvm/Support/ScopedPrinter.h b/llvm/include/llvm/Support/ScopedPrinter.h
index e9e9903b2482a..33aaf7abbd36d 100644
--- a/llvm/include/llvm/Support/ScopedPrinter.h
+++ b/llvm/include/llvm/Support/ScopedPrinter.h
@@ -25,7 +25,24 @@
namespace llvm {
template <typename T> struct EnumEntry {
- StringRef Name;
+private:
+ const char *NameData;
+ const char *AltNameData;
+
+public:
+ T Value;
+
+private:
+ uint16_t NameLength;
+ uint16_t AltNameLength;
+
+ template <size_t N> static constexpr uint16_t literalLength() {
+ static_assert(N - 1 <= UINT16_MAX,
+ "EnumEntry names must fit in uint16_t");
+ return N - 1;
+ }
+
+public:
// While Name suffices in most of the cases, in certain cases
// GNU style and LLVM style of ELFDumper do not
// display same string for same enum. The AltName if initialized appropriately
@@ -33,13 +50,30 @@ template <typename T> struct EnumEntry {
// Example:
// "EM_X86_64" string on LLVM style for Elf_Ehdr->e_machine corresponds to
// "Advanced Micro Devices X86-64" on GNU style
- StringRef AltName;
- T Value;
- constexpr EnumEntry(StringRef N, StringRef A, T V)
- : Name(N), AltName(A), Value(V) {}
- constexpr EnumEntry(StringRef N, T V) : Name(N), AltName(N), Value(V) {}
+ template <size_t N, size_t A>
+ constexpr EnumEntry(const char (&Name)[N], const char (&AltName)[A], T Value)
+ : NameData(Name), AltNameData(AltName), Value(Value),
+ NameLength(literalLength<N>()), AltNameLength(literalLength<A>()) {}
+
+ template <size_t N>
+ constexpr EnumEntry(const char (&Name)[N], T Value)
+ : NameData(Name), AltNameData(nullptr), Value(Value),
+ NameLength(literalLength<N>()), AltNameLength(0) {}
+
+ constexpr StringRef getName() const {
+ return StringRef(NameData, NameLength);
+ }
+
+ constexpr StringRef getAltName() const {
+ return AltNameData ? StringRef(AltNameData, AltNameLength) : getName();
+ }
};
+static_assert(sizeof(EnumEntry<uint32_t>) ==
+ 2 * sizeof(const char *) + sizeof(uint32_t) +
+ 2 * sizeof(uint16_t),
+ "EnumEntry<uint32_t> must remain compact");
+
struct HexNumber {
// To avoid sign-extension we have to explicitly cast to the appropriate
// unsigned type. The overloads are here so that every type that is implicitly
@@ -103,7 +137,7 @@ template <typename T, typename TEnum>
std::string enumToString(T Value, ArrayRef<EnumEntry<TEnum>> EnumValues) {
for (const EnumEntry<TEnum> &EnumItem : EnumValues)
if (EnumItem.Value == Value)
- return std::string(EnumItem.AltName);
+ return std::string(EnumItem.getAltName());
return utohexstr(Value, true);
}
@@ -114,7 +148,7 @@ template <typename T, typename TEnum>
StringRef enumToStringRef(T Value, ArrayRef<EnumEntry<TEnum>> EnumValues) {
for (const EnumEntry<TEnum> &EnumItem : EnumValues)
if (EnumItem.Value == Value)
- return EnumItem.AltName;
+ return EnumItem.getAltName();
return "";
}
@@ -166,7 +200,7 @@ class LLVM_ABI ScopedPrinter {
bool Found = false;
for (const auto &EnumItem : EnumValues) {
if (EnumItem.Value == Value) {
- Name = EnumItem.Name;
+ Name = EnumItem.getName();
Found = true;
break;
}
@@ -198,7 +232,7 @@ class LLVM_ABI ScopedPrinter {
bool IsEnum = (Flag.Value & EnumMask) != TFlag{};
if ((!IsEnum && (Value & Flag.Value) == Flag.Value) ||
(IsEnum && (Value & EnumMask) == Flag.Value)) {
- SetFlags.emplace_back(Flag.Name, Flag.Value);
+ SetFlags.emplace_back(Flag.getName(), Flag.Value);
}
}
diff --git a/llvm/lib/BinaryFormat/DXContainer.cpp b/llvm/lib/BinaryFormat/DXContainer.cpp
index 46d91347742b2..9e9b603505b70 100644
--- a/llvm/lib/BinaryFormat/DXContainer.cpp
+++ b/llvm/lib/BinaryFormat/DXContainer.cpp
@@ -333,7 +333,7 @@ StringRef SourceInfo::getSectionName(SourceInfo::SectionType Type) {
auto V = to_underlying(Type);
if (!isValidSectionType(V))
return StringRef();
- return getSectionTypes()[V].Name;
+ return getSectionTypes()[V].getName();
}
static const EnumEntry<SourceInfo::Contents::CompressionType>
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
index ccec0b5910658..56a654c154185 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
@@ -3192,7 +3192,7 @@ void CodeViewDebug::endCVSubsection(MCSymbol *EndLabel) {
static StringRef getSymbolName(SymbolKind SymKind) {
for (const EnumEntry<SymbolKind> &EE : getSymbolTypeNames())
if (EE.Value == SymKind)
- return EE.Name;
+ return EE.getName();
return "";
}
diff --git a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
index 49b7df98957af..9fe6da1688f2e 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
@@ -59,7 +59,7 @@ static StringRef getLeafTypeName(TypeLeafKind LT) {
template <typename T>
static bool compEnumNames(const EnumEntry<T> &lhs, const EnumEntry<T> &rhs) {
- return lhs.Name < rhs.Name;
+ return lhs.getName() < rhs.getName();
}
template <typename T, typename TFlag>
@@ -88,7 +88,7 @@ static std::string getFlagNames(CodeViewRecordIO &IO, T Value,
else
FlagLabel += (" | ");
- FlagLabel += (Flag.Name.str() + " (0x" + utohexstr(Flag.Value) + ")");
+ FlagLabel += (Flag.getName().str() + " (0x" + utohexstr(Flag.Value) + ")");
}
if (!FlagLabel.empty()) {
@@ -107,7 +107,7 @@ static StringRef getEnumName(CodeViewRecordIO &IO, T Value,
StringRef Name;
for (const auto &EnumItem : EnumValues) {
if (EnumItem.Value == Value) {
- Name = EnumItem.Name;
+ Name = EnumItem.getName();
break;
}
}
diff --git a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
index 9bc3312753540..e3b8aed639bde 100644
--- a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
+++ b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
@@ -80,7 +80,7 @@ void ScalarEnumerationTraits<SymbolKind>::enumeration(IO &io,
SymbolKind &Value) {
auto SymbolNames = getSymbolTypeNames();
for (const auto &E : SymbolNames)
- io.enumCase(Value, E.Name, E.Value);
+ io.enumCase(Value, E.getName(), E.Value);
io.enumFallback<yaml::Hex16>(Value);
}
@@ -88,7 +88,7 @@ void ScalarBitSetTraits<CompileSym2Flags>::bitset(IO &io,
CompileSym2Flags &Flags) {
auto FlagNames = getCompileSym2FlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<CompileSym2Flags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<CompileSym2Flags>(E.Value));
}
}
@@ -96,35 +96,35 @@ void ScalarBitSetTraits<CompileSym3Flags>::bitset(IO &io,
CompileSym3Flags &Flags) {
auto FlagNames = getCompileSym3FlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<CompileSym3Flags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<CompileSym3Flags>(E.Value));
}
}
void ScalarBitSetTraits<ExportFlags>::bitset(IO &io, ExportFlags &Flags) {
auto FlagNames = getExportSymFlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<ExportFlags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<ExportFlags>(E.Value));
}
}
void ScalarBitSetTraits<PublicSymFlags>::bitset(IO &io, PublicSymFlags &Flags) {
auto FlagNames = getPublicSymFlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<PublicSymFlags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<PublicSymFlags>(E.Value));
}
}
void ScalarBitSetTraits<LocalSymFlags>::bitset(IO &io, LocalSymFlags &Flags) {
auto FlagNames = getLocalFlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<LocalSymFlags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<LocalSymFlags>(E.Value));
}
}
void ScalarBitSetTraits<ProcSymFlags>::bitset(IO &io, ProcSymFlags &Flags) {
auto FlagNames = getProcSymFlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<ProcSymFlags>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<ProcSymFlags>(E.Value));
}
}
@@ -132,14 +132,14 @@ void ScalarBitSetTraits<FrameProcedureOptions>::bitset(
IO &io, FrameProcedureOptions &Flags) {
auto FlagNames = getFrameProcSymFlagNames();
for (const auto &E : FlagNames) {
- io.bitSetCase(Flags, E.Name, static_cast<FrameProcedureOptions>(E.Value));
+ io.bitSetCase(Flags, E.getName(), static_cast<FrameProcedureOptions>(E.Value));
}
}
void ScalarEnumerationTraits<CPUType>::enumeration(IO &io, CPUType &Cpu) {
auto CpuNames = getCPUTypeNames();
for (const auto &E : CpuNames) {
- io.enumCase(Cpu, E.Name, static_cast<CPUType>(E.Value));
+ io.enumCase(Cpu, E.getName(), static_cast<CPUType>(E.Value));
}
}
@@ -171,7 +171,7 @@ void ScalarEnumerationTraits<RegisterId>::enumeration(IO &io, RegisterId &Reg) {
RegNames = getRegisterNames(*CpuType);
for (const auto &E : RegNames) {
- io.enumCase(Reg, E.Name, static_cast<RegisterId>(E.Value));
+ io.enumCase(Reg, E.getName(), static_cast<RegisterId>(E.Value));
}
io.enumFallback<Hex16>(Reg);
}
@@ -180,7 +180,7 @@ void ScalarEnumerationTraits<TrampolineType>::enumeration(
IO &io, TrampolineType &Tramp) {
auto TrampNames = getTrampolineNames();
for (const auto &E : TrampNames) {
- io.enumCase(Tramp, E.Name, static_cast<TrampolineType>(E.Value));
+ io.enumCase(Tramp, E.getName(), static_cast<TrampolineType>(E.Value));
}
}
@@ -188,7 +188,7 @@ void ScalarEnumerationTraits<ThunkOrdinal>::enumeration(IO &io,
ThunkOrdinal &Ord) {
auto ThunkNames = getThunkOrdinalNames();
for (const auto &E : ThunkNames) {
- io.enumCase(Ord, E.Name, static_cast<ThunkOrdinal>(E.Value));
+ io.enumCase(Ord, E.getName(), static_cast<ThunkOrdinal>(E.Value));
}
}
@@ -196,7 +196,7 @@ void ScalarEnumerationTraits<FrameCookieKind>::enumeration(
IO &io, FrameCookieKind &FC) {
auto ThunkNames = getFrameCookieKindNames();
for (const auto &E : ThunkNames) {
- io.enumCase(FC, E.Name, static_cast<FrameCookieKind>(E.Value));
+ io.enumCase(FC, E.getName(), static_cast<FrameCookieKind>(E.Value));
}
}
@@ -204,7 +204,7 @@ void ScalarEnumerationTraits<JumpTableEntrySize>::enumeration(
IO &io, JumpTableEntrySize &FC) {
auto ThunkNames = getJumpTableEntrySizeNames();
for (const auto &E : ThunkNames) {
- io.enumCase(FC, E.Name, static_cast<JumpTableEntrySize>(E.Value));
+ io.enumCase(FC, E.getName(), static_cast<JumpTableEntrySize>(E.Value));
}
}
diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp
index ba766dfffd91d..0d84f4a8d5a18 100644
--- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp
+++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp
@@ -621,55 +621,55 @@ void MappingTraits<DXContainerYAML::StringTableEntry>::mapping(
void ScalarEnumerationTraits<dxbc::PSV::SemanticKind>::enumeration(
IO &IO, dxbc::PSV::SemanticKind &Value) {
for (const auto &E : dxbc::PSV::getSemanticKinds())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::PSV::ComponentType>::enumeration(
IO &IO, dxbc::PSV::ComponentType &Value) {
for (const auto &E : dxbc::PSV::getComponentTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::PSV::InterpolationMode>::enumeration(
IO &IO, dxbc::PSV::InterpolationMode &Value) {
for (const auto &E : dxbc::PSV::getInterpolationModes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::PSV::ResourceType>::enumeration(
IO &IO, dxbc::PSV::ResourceType &Value) {
for (const auto &E : dxbc::PSV::getResourceTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::PSV::ResourceKind>::enumeration(
IO &IO, dxbc::PSV::ResourceKind &Value) {
for (const auto &E : dxbc::PSV::getResourceKinds())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::D3DSystemValue>::enumeration(
IO &IO, dxbc::D3DSystemValue &Value) {
for (const auto &E : dxbc::getD3DSystemValues())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::SigMinPrecision>::enumeration(
IO &IO, dxbc::SigMinPrecision &Value) {
for (const auto &E : dxbc::getSigMinPrecisions())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::SigComponentType>::enumeration(
IO &IO, dxbc::SigComponentType &Value) {
for (const auto &E : dxbc::getSigComponentTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::RootParameterType>::enumeration(
IO &IO, dxbc::RootParameterType &Value) {
for (const auto &E : dxbc::getRootParameterTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxil::ResourceClass>::enumeration(
@@ -682,43 +682,43 @@ void ScalarEnumerationTraits<dxil::ResourceClass>::enumeration(
};
for (const auto &E : ResourceClasses)
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::SamplerFilter>::enumeration(
IO &IO, dxbc::SamplerFilter &Value) {
for (const auto &E : dxbc::getSamplerFilters())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::StaticBorderColor>::enumeration(
IO &IO, dxbc::StaticBorderColor &Value) {
for (const auto &E : dxbc::getStaticBorderColors())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::TextureAddressMode>::enumeration(
IO &IO, dxbc::TextureAddressMode &Value) {
for (const auto &E : dxbc::getTextureAddressModes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::ShaderVisibility>::enumeration(
IO &IO, dxbc::ShaderVisibility &Value) {
for (const auto &E : dxbc::getShaderVisibility())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<dxbc::ComparisonFunc>::enumeration(
IO &IO, dxbc::ComparisonFunc &Value) {
for (const auto &E : dxbc::getComparisonFuncs())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<llvm::dxbc::SourceInfo::SectionType>::enumeration(
IO &IO, llvm::dxbc::SourceInfo::SectionType &Value) {
for (const auto &E : dxbc::SourceInfo::getSectionTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void ScalarEnumerationTraits<
@@ -726,7 +726,7 @@ void ScalarEnumerationTraits<
enumeration(IO &IO,
llvm::dxbc::SourceInfo::Contents::CompressionType &Value) {
for (const auto &E : dxbc::SourceInfo::Contents::getCompressionTypes())
- IO.enumCase(Value, E.Name, E.Value);
+ IO.enumCase(Value, E.getName(), E.Value);
}
void MappingTraits<llvm::DXContainerYAML::SourceInfo::Header>::mapping(
diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp
index 788626b016a77..c01da29e497b3 100644
--- a/llvm/tools/llvm-objdump/COFFDump.cpp
+++ b/llvm/tools/llvm-objdump/COFFDump.cpp
@@ -86,7 +86,7 @@ static void printOptionalEnumName(T Value,
ArrayRef<EnumEntry<TEnum>> EnumValues) {
for (const EnumEntry<TEnum> &I : EnumValues)
if (I.Value == Value) {
- outs() << "\t(" << I.Name << ')';
+ outs() << "\t(" << I.getName() << ')';
return;
}
}
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 0169e7fb0fff8..789d2a0afc7c0 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -694,7 +694,7 @@ template <typename ELFT> class GNUELFDumper : public ELFDumper<ELFT> {
(IsEnum && (Value & EnumMask) == Flag.Value)) {
if (!Str.empty())
Str += ", ";
- Str += Flag.AltName;
+ Str += Flag.getAltName();
}
}
return Str;
@@ -1469,10 +1469,10 @@ static std::string getGNUFlags(unsigned EOSAbi, unsigned EMachine,
// Find the flag in the known flags list.
auto I = llvm::find_if(FlagsList, [=](const EnumEntry<unsigned> &E) {
// Flags with empty names are not printed in GNU style output.
- return E.Value == Flag && !E.AltName.empty();
+ return E.Value == Flag && !E.getAltName().empty();
});
if (I != FlagsList.end()) {
- Str += I->AltName;
+ Str += I->getAltName();
continue;
}
@@ -2320,7 +2320,7 @@ void printFlags(T Value, ArrayRef<EnumEntry<TFlag>> Flags, raw_ostream &OS) {
SetFlags.push_back(Flag);
for (const EnumEntry<TFlag> &Flag : SetFlags)
- OS << Flag.Name << " ";
+ OS << Flag.getName() << " ";
}
template <class ELFT>
@@ -2625,7 +2625,7 @@ static Error checkHashTable(const ELFDumper<ELFT> &Dumper,
return createError("the hash table at 0x" + Twine::utohexstr(SecOffset) +
" is not supported: it contains non-standard 8 "
"byte entries on " +
- It->AltName + " platform");
+ It->getAltName() + " platform");
}
auto MakeError = [&](const Twine &Msg = "") {
@@ -3679,7 +3679,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
"ABI Version:", std::to_string(e.e_ident[ELF::EI_ABIVERSION]));
if (const EnumEntry<unsigned> *E = getObjectFileEnumEntry(e.e_type)) {
- Str = E->AltName.str();
+ Str = E->getAltName().str();
} else {
if (e.e_type >= ET_LOPROC)
Str = "Processor Specific: (" + utohexstr(e.e_type, /*LowerCase=*/true) + ")";
@@ -7524,7 +7524,7 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printFileHeaders() {
std::string TypeStr;
if (const EnumEntry<unsigned> *Ent = getObjectFileEnumEntry(E.e_type)) {
- TypeStr = Ent->Name.str();
+ TypeStr = Ent->getName().str();
} else {
if (E.e_type >= ET_LOPROC)
TypeStr = "Processor Specific";
@@ -7928,7 +7928,7 @@ void JSONELFDumper<ELFT>::printAuxillaryDynamicTableEntryInfo(
ListScope L(this->W, "Flags");
for (const auto &Flag : Flags) {
if (Flag.Value != 0 && (Value & Flag.Value) == Flag.Value)
- this->W.printString(Flag.Name);
+ this->W.printString(Flag.getName());
}
};
switch (Entry.getTag()) {
More information about the llvm-commits
mailing list