[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