[llvm] d1ee636 - MCSymbol: Remove Kind
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 3 19:17:11 PDT 2025
Author: Fangrui Song
Date: 2025-08-03T19:17:05-07:00
New Revision: d1ee636b98aae1029575af05c3dadca25620188a
URL: https://github.com/llvm/llvm-project/commit/d1ee636b98aae1029575af05c3dadca25620188a
DIFF: https://github.com/llvm/llvm-project/commit/d1ee636b98aae1029575af05c3dadca25620188a.diff
LOG: MCSymbol: Remove Kind
The object file format specific derived classes are used in context
where the type is statically known. We don't use isa/dyn_cast and we
want to discourage dynamic dispatching on the type.
Added:
Modified:
llvm/include/llvm/MC/MCSymbol.h
llvm/include/llvm/MC/MCSymbolCOFF.h
llvm/include/llvm/MC/MCSymbolELF.h
llvm/include/llvm/MC/MCSymbolGOFF.h
llvm/include/llvm/MC/MCSymbolMachO.h
llvm/include/llvm/MC/MCSymbolWasm.h
llvm/include/llvm/MC/MCSymbolXCOFF.h
llvm/lib/MC/MCContext.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCSymbol.h b/llvm/include/llvm/MC/MCSymbol.h
index cb9f26136b1fb..123e96ef4526a 100644
--- a/llvm/include/llvm/MC/MCSymbol.h
+++ b/llvm/include/llvm/MC/MCSymbol.h
@@ -41,18 +41,6 @@ class raw_ostream;
/// it is a reference to an external entity, it has a null section.
class MCSymbol {
protected:
- /// The kind of the symbol. If it is any value other than unset then this
- /// class is actually one of the appropriate subclasses of MCSymbol.
- enum SymbolKind {
- SymbolKindUnset,
- SymbolKindCOFF,
- SymbolKindELF,
- SymbolKindGOFF,
- SymbolKindMachO,
- SymbolKindWasm,
- SymbolKindXCOFF,
- };
-
/// A symbol can contain an Offset, or Value, or be Common, but never more
/// than one of these.
enum Contents : uint8_t {
@@ -103,10 +91,6 @@ class MCSymbol {
/// This symbol is weak external.
mutable unsigned IsWeakExternal : 1;
- /// LLVM RTTI discriminator. This is actually a SymbolKind enumerator, but is
- /// unsigned to avoid sign extension and achieve better bitpacking with MSVC.
- unsigned Kind : 3;
-
/// True if we have created a relocation that uses this symbol.
mutable unsigned IsUsedInReloc : 1;
@@ -162,11 +146,11 @@ class MCSymbol {
uint64_t AlignmentPadding;
};
- MCSymbol(SymbolKind Kind, const MCSymbolTableEntry *Name, bool isTemporary)
+ MCSymbol(const MCSymbolTableEntry *Name, bool isTemporary)
: IsTemporary(isTemporary), IsRedefinable(false), IsRegistered(false),
IsExternal(false), IsPrivateExtern(false), IsWeakExternal(false),
- Kind(Kind), IsUsedInReloc(false), IsResolving(0),
- SymbolContents(SymContentsUnset), CommonAlignLog2(0), Flags(0) {
+ IsUsedInReloc(false), IsResolving(0), SymbolContents(SymContentsUnset),
+ CommonAlignLog2(0), Flags(0) {
Offset = 0;
HasName = !!Name;
if (Name)
diff --git a/llvm/include/llvm/MC/MCSymbolCOFF.h b/llvm/include/llvm/MC/MCSymbolCOFF.h
index 3b90e7c812dc7..0742cf7b406c7 100644
--- a/llvm/include/llvm/MC/MCSymbolCOFF.h
+++ b/llvm/include/llvm/MC/MCSymbolCOFF.h
@@ -31,7 +31,7 @@ class MCSymbolCOFF : public MCSymbol {
public:
MCSymbolCOFF(const MCSymbolTableEntry *Name, bool isTemporary)
- : MCSymbol(SymbolKindCOFF, Name, isTemporary) {}
+ : MCSymbol(Name, isTemporary) {}
uint16_t getType() const {
return Type;
diff --git a/llvm/include/llvm/MC/MCSymbolELF.h b/llvm/include/llvm/MC/MCSymbolELF.h
index 80b37eaf6b6ad..1af175a18e8ec 100644
--- a/llvm/include/llvm/MC/MCSymbolELF.h
+++ b/llvm/include/llvm/MC/MCSymbolELF.h
@@ -20,7 +20,7 @@ class MCSymbolELF : public MCSymbol {
public:
MCSymbolELF(const MCSymbolTableEntry *Name, bool isTemporary)
- : MCSymbol(SymbolKindELF, Name, isTemporary) {}
+ : MCSymbol(Name, isTemporary) {}
void setSize(const MCExpr *SS) { SymbolSize = SS; }
const MCExpr *getSize() const { return SymbolSize; }
diff --git a/llvm/include/llvm/MC/MCSymbolGOFF.h b/llvm/include/llvm/MC/MCSymbolGOFF.h
index 6577747d52c7b..11d4df4aea634 100644
--- a/llvm/include/llvm/MC/MCSymbolGOFF.h
+++ b/llvm/include/llvm/MC/MCSymbolGOFF.h
@@ -33,7 +33,7 @@ class MCSymbolGOFF : public MCSymbol {
public:
MCSymbolGOFF(const MCSymbolTableEntry *Name, bool IsTemporary)
- : MCSymbol(SymbolKindGOFF, Name, IsTemporary) {}
+ : MCSymbol(Name, IsTemporary) {}
void setLDAttributes(GOFF::LDAttr Attr) {
modifyFlags(SF_LD, SF_LD);
diff --git a/llvm/include/llvm/MC/MCSymbolMachO.h b/llvm/include/llvm/MC/MCSymbolMachO.h
index c5c51fee64137..b2b4442e0d666 100644
--- a/llvm/include/llvm/MC/MCSymbolMachO.h
+++ b/llvm/include/llvm/MC/MCSymbolMachO.h
@@ -44,7 +44,7 @@ class MCSymbolMachO : public MCSymbol {
public:
MCSymbolMachO(const MCSymbolTableEntry *Name, bool isTemporary)
- : MCSymbol(SymbolKindMachO, Name, isTemporary) {}
+ : MCSymbol(Name, isTemporary) {}
bool isPrivateExtern() const { return IsPrivateExtern; }
void setPrivateExtern(bool Value) { IsPrivateExtern = Value; }
diff --git a/llvm/include/llvm/MC/MCSymbolWasm.h b/llvm/include/llvm/MC/MCSymbolWasm.h
index 26744a4cda065..bd13896ac0712 100644
--- a/llvm/include/llvm/MC/MCSymbolWasm.h
+++ b/llvm/include/llvm/MC/MCSymbolWasm.h
@@ -35,7 +35,7 @@ class MCSymbolWasm : public MCSymbol {
public:
MCSymbolWasm(const MCSymbolTableEntry *Name, bool isTemporary)
- : MCSymbol(SymbolKindWasm, Name, isTemporary) {}
+ : MCSymbol(Name, isTemporary) {}
const MCExpr *getSize() const { return SymbolSize; }
void setSize(const MCExpr *SS) { SymbolSize = SS; }
diff --git a/llvm/include/llvm/MC/MCSymbolXCOFF.h b/llvm/include/llvm/MC/MCSymbolXCOFF.h
index 041749cb25a30..d86b2d7527fbe 100644
--- a/llvm/include/llvm/MC/MCSymbolXCOFF.h
+++ b/llvm/include/llvm/MC/MCSymbolXCOFF.h
@@ -23,7 +23,7 @@ class MCSymbolXCOFF : public MCSymbol {
public:
MCSymbolXCOFF(const MCSymbolTableEntry *Name, bool isTemporary)
- : MCSymbol(SymbolKindXCOFF, Name, isTemporary) {}
+ : MCSymbol(Name, isTemporary) {}
enum CodeModel : uint8_t { CM_Small, CM_Large };
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index 80d69c52eac52..5e364e9ad50c0 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -294,11 +294,9 @@ MCSymbol *MCContext::createSymbolImpl(const MCSymbolTableEntry *Name,
case MCContext::IsDXContainer:
break;
case MCContext::IsSPIRV:
- return new (Name, *this)
- MCSymbol(MCSymbol::SymbolKindUnset, Name, IsTemporary);
+ return new (Name, *this) MCSymbol(Name, IsTemporary);
}
- return new (Name, *this)
- MCSymbol(MCSymbol::SymbolKindUnset, Name, IsTemporary);
+ return new (Name, *this) MCSymbol(Name, IsTemporary);
}
MCSymbol *MCContext::cloneSymbol(MCSymbol &Sym) {
More information about the llvm-commits
mailing list