[llvm] 0301580 - [PowerPC] Remove VK_PPC_TLSGD and VK_PPC_TLSLD

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 2 22:26:04 PST 2025


Author: Fangrui Song
Date: 2025-03-02T22:25:59-08:00
New Revision: 03015805804c8d334382a2c7fcdb6d3d368cd94f

URL: https://github.com/llvm/llvm-project/commit/03015805804c8d334382a2c7fcdb6d3d368cd94f
DIFF: https://github.com/llvm/llvm-project/commit/03015805804c8d334382a2c7fcdb6d3d368cd94f.diff

LOG: [PowerPC] Remove VK_PPC_TLSGD and VK_PPC_TLSLD

52cf8e44880bcf614068b66b63393aa8da1edd76 (2013) introduced the
VK_PPC_TLSGD workaround to prevent unconditional reference to
_GLOBAL_OFFSET_TABLE_ in ELFObjectWriter.

e2b355d651ed8f2cbe61672c4c39b6419e471265 (2015) removed the
`_GLOBAL_OFFSET_TABLE_` hack for the generic VK_TLSGD,
making the VK_PPC_TLSGD workaround unneeded.

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCExpr.h
    llvm/lib/MC/MCAsmInfo.cpp
    llvm/lib/MC/MCELFStreamer.cpp
    llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
    llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h
index b1105a253c276..8bae5349b515e 100644
--- a/llvm/include/llvm/MC/MCExpr.h
+++ b/llvm/include/llvm/MC/MCExpr.h
@@ -303,7 +303,6 @@ class MCSymbolRefExpr : public MCExpr {
     VK_PPC_GOT_TLSGD_LO,    // symbol at got@tlsgd at l
     VK_PPC_GOT_TLSGD_HI,    // symbol at got@tlsgd at h
     VK_PPC_GOT_TLSGD_HA,    // symbol at got@tlsgd at ha
-    VK_PPC_TLSGD,           // symbol at tlsgd
     VK_PPC_AIX_TLSGD,       // symbol at gd
     VK_PPC_AIX_TLSGDM,      // symbol at m
     VK_PPC_AIX_TLSIE,       // symbol at ie
@@ -319,7 +318,6 @@ class MCSymbolRefExpr : public MCExpr {
     VK_PPC_GOT_TLSLD_PCREL, // symbol at got@tlsld at pcrel
     VK_PPC_GOT_TPREL_PCREL, // symbol at got@tprel at pcrel
     VK_PPC_TLS_PCREL,       // symbol at tls@pcrel
-    VK_PPC_TLSLD,           // symbol at tlsld
     VK_PPC_LOCAL,           // symbol at local
     VK_PPC_NOTOC,           // symbol at notoc
     VK_PPC_PCREL_OPT,       // .reloc expr, R_PPC64_PCREL_OPT, expr

diff  --git a/llvm/lib/MC/MCAsmInfo.cpp b/llvm/lib/MC/MCAsmInfo.cpp
index f7270e87a6d07..9821bb298d7d4 100644
--- a/llvm/lib/MC/MCAsmInfo.cpp
+++ b/llvm/lib/MC/MCAsmInfo.cpp
@@ -133,9 +133,8 @@ void MCAsmInfo::initializeVariantKinds(ArrayRef<VariantKindDesc> Descs) {
     assert(It.second && "duplicate Kind");
     [[maybe_unused]] auto It2 =
         NameToVariantKind.try_emplace(Desc.Name.lower(), Desc.Kind);
-    // Workaround for VK_PPC_L/VK_PPC_LO ("l"), VK_PPC_TLSGD, and VK_PPC_TLSLD.
-    assert(It2.second ||
-           (Desc.Name == "l" || Desc.Name == "tlsgd" || Desc.Name == "tlsld"));
+    // Workaround for VK_PPC_L/VK_PPC_LO ("l").
+    assert(It2.second || Desc.Name == "l");
   }
 }
 

diff  --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp
index 65bb88eb6f32a..83fa445a8b936 100644
--- a/llvm/lib/MC/MCELFStreamer.cpp
+++ b/llvm/lib/MC/MCELFStreamer.cpp
@@ -419,12 +419,10 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) {
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HI:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HA:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_PCREL:
-    case MCSymbolRefExpr::VK_PPC_TLSGD:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HI:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HA:
-    case MCSymbolRefExpr::VK_PPC_TLSLD:
       break;
     }
     getAssembler().registerSymbol(symRef.getSymbol());

diff  --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index a3646532c4530..038bb805b2f30 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -111,7 +111,6 @@ class PPCAsmParser : public MCTargetAsmParser {
 
   const MCExpr *extractModifierFromExpr(const MCExpr *E,
                                         PPCMCExpr::VariantKind &Variant);
-  const MCExpr *fixupVariantKind(const MCExpr *E);
   bool parseExpression(const MCExpr *&EVal);
 
   bool parseOperand(OperandVector &Operands);
@@ -1456,56 +1455,6 @@ PPCAsmParser::extractModifierFromExpr(const MCExpr *E,
   llvm_unreachable("Invalid expression kind!");
 }
 
-/// Find all VK_TLSGD/VK_TLSLD symbol references in expression and replace
-/// them by VK_PPC_TLSGD/VK_PPC_TLSLD.  This is necessary to avoid having
-/// _GLOBAL_OFFSET_TABLE_ created via ELFObjectWriter::RelocNeedsGOT.
-/// FIXME: This is a hack.
-const MCExpr *PPCAsmParser::fixupVariantKind(const MCExpr *E) {
-  MCContext &Context = getParser().getContext();
-
-  switch (E->getKind()) {
-  case MCExpr::Target:
-  case MCExpr::Constant:
-    return E;
-
-  case MCExpr::SymbolRef: {
-    const MCSymbolRefExpr *SRE = cast<MCSymbolRefExpr>(E);
-    MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;
-
-    switch (SRE->getKind()) {
-    case MCSymbolRefExpr::VK_TLSGD:
-      Variant = MCSymbolRefExpr::VK_PPC_TLSGD;
-      break;
-    case MCSymbolRefExpr::VK_TLSLD:
-      Variant = MCSymbolRefExpr::VK_PPC_TLSLD;
-      break;
-    default:
-      return E;
-    }
-    return MCSymbolRefExpr::create(&SRE->getSymbol(), Variant, Context);
-  }
-
-  case MCExpr::Unary: {
-    const MCUnaryExpr *UE = cast<MCUnaryExpr>(E);
-    const MCExpr *Sub = fixupVariantKind(UE->getSubExpr());
-    if (Sub == UE->getSubExpr())
-      return E;
-    return MCUnaryExpr::create(UE->getOpcode(), Sub, Context);
-  }
-
-  case MCExpr::Binary: {
-    const MCBinaryExpr *BE = cast<MCBinaryExpr>(E);
-    const MCExpr *LHS = fixupVariantKind(BE->getLHS());
-    const MCExpr *RHS = fixupVariantKind(BE->getRHS());
-    if (LHS == BE->getLHS() && RHS == BE->getRHS())
-      return E;
-    return MCBinaryExpr::create(BE->getOpcode(), LHS, RHS, Context);
-  }
-  }
-
-  llvm_unreachable("Invalid expression kind!");
-}
-
 /// This 
diff ers from the default "parseExpression" in that it handles
 /// modifiers.
 bool PPCAsmParser::parseExpression(const MCExpr *&EVal) {
@@ -1514,8 +1463,6 @@ bool PPCAsmParser::parseExpression(const MCExpr *&EVal) {
   if (getParser().parseExpression(EVal))
     return true;
 
-  EVal = fixupVariantKind(EVal);
-
   PPCMCExpr::VariantKind Variant;
   const MCExpr *E = extractModifierFromExpr(EVal, Variant);
   if (E)

diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
index d2fcb9766d788..395d43b960e76 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
@@ -399,13 +399,13 @@ unsigned PPCELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
     case PPC::fixup_ppc_nofixup:
       switch (Modifier) {
       default: llvm_unreachable("Unsupported Modifier");
-      case MCSymbolRefExpr::VK_PPC_TLSGD:
+      case MCSymbolRefExpr::VK_TLSGD:
         if (is64Bit())
           Type = ELF::R_PPC64_TLSGD;
         else
           Type = ELF::R_PPC_TLSGD;
         break;
-      case MCSymbolRefExpr::VK_PPC_TLSLD:
+      case MCSymbolRefExpr::VK_TLSLD:
         if (is64Bit())
           Type = ELF::R_PPC64_TLSLD;
         else

diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
index b6d1fd7a581a5..fb5b665882a2f 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
@@ -23,8 +23,8 @@ const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
     {MCSymbolRefExpr::VK_GOT, "GOT"},
     {MCSymbolRefExpr::VK_PCREL, "PCREL"},
     {MCSymbolRefExpr::VK_PLT, "PLT"},
-    {MCSymbolRefExpr::VK_TLSGD, "TLSGD"},
-    {MCSymbolRefExpr::VK_TLSLD, "TLSLD"},
+    {MCSymbolRefExpr::VK_TLSGD, "tlsgd"},
+    {MCSymbolRefExpr::VK_TLSLD, "tlsld"},
     {MCSymbolRefExpr::VK_TPREL, "TPREL"},
     {MCSymbolRefExpr::VK_PPC_LO, "l"},
     {MCSymbolRefExpr::VK_PPC_HI, "h"},
@@ -77,7 +77,6 @@ const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
     {MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO, "got at tlsgd@l"},
     {MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HI, "got at tlsgd@h"},
     {MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HA, "got at tlsgd@ha"},
-    {MCSymbolRefExpr::VK_PPC_TLSGD, "tlsgd"},
     {MCSymbolRefExpr::VK_PPC_AIX_TLSGD, "gd"},
     {MCSymbolRefExpr::VK_PPC_AIX_TLSGDM, "m"},
     {MCSymbolRefExpr::VK_PPC_AIX_TLSIE, "ie"},
@@ -93,7 +92,6 @@ const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
     {MCSymbolRefExpr::VK_PPC_GOT_TLSLD_PCREL, "got at tlsld@pcrel"},
     {MCSymbolRefExpr::VK_PPC_GOT_TPREL_PCREL, "got at tprel@pcrel"},
     {MCSymbolRefExpr::VK_PPC_TLS_PCREL, "tls at pcrel"},
-    {MCSymbolRefExpr::VK_PPC_TLSLD, "tlsld"},
     {MCSymbolRefExpr::VK_PPC_LOCAL, "local"},
     {MCSymbolRefExpr::VK_PPC_NOTOC, "notoc"},
     {MCSymbolRefExpr::VK_PPC_PCREL_OPT, "<<invalid>>"},

diff  --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index ae42da6ea6e42..80c30bafaf65f 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -1474,7 +1474,7 @@ void PPCAsmPrinter::emitInstruction(const MachineInstr *MI) {
   case PPC::GETtlsADDR32: {
     // Transform: %r3 = GETtlsADDR32 %r3, @sym
     // Into: BL_TLS __tls_get_addr(sym at tlsgd)@PLT
-    EmitTlsCall(MI, MCSymbolRefExpr::VK_PPC_TLSGD);
+    EmitTlsCall(MI, MCSymbolRefExpr::VK_TLSGD);
     return;
   }
   case PPC::GETtlsTpointer32AIX: {
@@ -1526,7 +1526,7 @@ void PPCAsmPrinter::emitInstruction(const MachineInstr *MI) {
   case PPC::GETtlsldADDR32: {
     // Transform: %r3 = GETtlsldADDR32 %r3, @sym
     // Into: BL_TLS __tls_get_addr(sym at tlsld)@PLT
-    EmitTlsCall(MI, MCSymbolRefExpr::VK_PPC_TLSLD);
+    EmitTlsCall(MI, MCSymbolRefExpr::VK_TLSLD);
     return;
   }
   case PPC::ADDISdtprelHA:


        


More information about the llvm-commits mailing list