[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