[llvm] 43be31e - SPARC: Simplify SparcMCExpr
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 13 00:12:13 PDT 2025
Author: Fangrui Song
Date: 2025-06-13T00:12:08-07:00
New Revision: 43be31e35ab0985ec381041762586902c2718751
URL: https://github.com/llvm/llvm-project/commit/43be31e35ab0985ec381041762586902c2718751
DIFF: https://github.com/llvm/llvm-project/commit/43be31e35ab0985ec381041762586902c2718751.diff
LOG: SPARC: Simplify SparcMCExpr
Reduce direct uses of SparcMCExpr, facilitating transition to
MCSpecifierExpr in the future.
Added:
Modified:
llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
index 3deeac38e5604..187ecbaad4bb2 100644
--- a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
+++ b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
@@ -848,14 +848,14 @@ bool SparcAsmParser::expandSETX(MCInst &Inst, SMLoc IDLoc,
// sethi %hh(val), tmp
Instructions.push_back(MCInstBuilder(SP::SETHIi)
.addReg(MCTmpOp.getReg())
- .addExpr(SparcMCExpr::create(
- ELF::R_SPARC_HH22, ValExpr, getContext())));
+ .addExpr(Sparc::createSpecifierExpr(
+ getContext(), ValExpr, ELF::R_SPARC_HH22)));
// or tmp, %hm(val), tmp
Instructions.push_back(MCInstBuilder(SP::ORri)
.addReg(MCTmpOp.getReg())
.addReg(MCTmpOp.getReg())
- .addExpr(SparcMCExpr::create(
- ELF::R_SPARC_HM10, ValExpr, getContext())));
+ .addExpr(Sparc::createSpecifierExpr(
+ getContext(), ValExpr, ELF::R_SPARC_HM10)));
// sllx tmp, 32, tmp
Instructions.push_back(MCInstBuilder(SP::SLLXri)
.addReg(MCTmpOp.getReg())
@@ -1165,7 +1165,7 @@ ParseStatus SparcAsmParser::parseTailRelocSym(OperandVector &Operands) {
return Error(getLoc(), "expected valid identifier for operand modifier");
StringRef Name = getParser().getTok().getIdentifier();
- uint16_t RelType = SparcMCExpr::parseSpecifier(Name);
+ uint16_t RelType = Sparc::parseSpecifier(Name);
if (RelType == 0)
return Error(getLoc(), "invalid relocation specifier");
@@ -1689,7 +1689,7 @@ const SparcMCExpr *SparcAsmParser::adjustPICRelocation(uint16_t RelType,
}
}
- return SparcMCExpr::create(RelType, subExpr, getContext());
+ return Sparc::createSpecifierExpr(getContext(), subExpr, RelType);
}
bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
@@ -1700,7 +1700,7 @@ bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
StringRef name = Tok.getString();
- auto VK = SparcMCExpr::parseSpecifier(name);
+ auto VK = Sparc::parseSpecifier(name);
switch (VK) {
case 0:
Error(getLoc(), "invalid relocation specifier");
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
index 8de9a789a63bf..3049072b001cb 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
@@ -50,8 +50,7 @@ SparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym,
MCStreamer &Streamer) const {
if (Encoding & dwarf::DW_EH_PE_pcrel) {
MCContext &Ctx = Streamer.getContext();
- return SparcMCExpr::create(ELF::R_SPARC_DISP32,
- MCSymbolRefExpr::create(Sym, Ctx), Ctx);
+ return Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
}
return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
@@ -63,8 +62,7 @@ SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
MCStreamer &Streamer) const {
if (Encoding & dwarf::DW_EH_PE_pcrel) {
MCContext &Ctx = Streamer.getContext();
- return SparcMCExpr::create(ELF::R_SPARC_DISP32,
- MCSymbolRefExpr::create(Sym, Ctx), Ctx);
+ return Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
}
return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
}
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
index 2c8dbaa5aba60..4ce9bea5d7958 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
@@ -135,7 +135,7 @@ getMachineOpValue(const MCInst &MI, const MCOperand &MO,
assert(MO.isExpr());
const MCExpr *Expr = MO.getExpr();
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
- Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
+ Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
return 0;
}
@@ -165,7 +165,7 @@ unsigned SparcMCCodeEmitter::getSImm5OpValue(const MCInst &MI, unsigned OpNo,
return CE->getValue();
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
- Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
+ Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
return 0;
}
Fixups.push_back(MCFixup::create(0, Expr, ELF::R_SPARC_5));
@@ -191,7 +191,7 @@ SparcMCCodeEmitter::getSImm13OpValue(const MCInst &MI, unsigned OpNo,
return CE->getValue();
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
- Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
+ Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
return 0;
}
Fixups.push_back(MCFixup::create(0, Expr, Sparc::fixup_sparc_13));
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
index 09e55a66fcc6b..2e03e47399864 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
@@ -22,13 +22,18 @@ using namespace llvm;
#define DEBUG_TYPE "sparcmcexpr"
-const SparcMCExpr *SparcMCExpr::create(uint16_t S, const MCExpr *Expr,
- MCContext &Ctx) {
- return new (Ctx) SparcMCExpr(S, Expr);
+const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
+ const MCExpr *Expr, uint16_t S) {
+ return new (Ctx) SparcMCExpr(Expr, S);
+}
+
+const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
+ const MCSymbol *Sym, uint16_t S) {
+ return new (Ctx) SparcMCExpr(MCSymbolRefExpr::create(Sym, Ctx), S);
}
void SparcMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
- StringRef S = getSpecifierName(specifier);
+ StringRef S = Sparc::getSpecifierName(specifier);
if (!S.empty())
OS << '%' << S << '(';
getSubExpr()->print(OS, MAI);
@@ -36,7 +41,7 @@ void SparcMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
OS << ')';
}
-StringRef SparcMCExpr::getSpecifierName(uint16_t S) {
+StringRef Sparc::getSpecifierName(uint16_t S) {
// clang-format off
switch (uint16_t(S)) {
case 0: return {};
@@ -83,7 +88,7 @@ StringRef SparcMCExpr::getSpecifierName(uint16_t S) {
llvm_unreachable("Unhandled SparcMCExpr::Specifier");
}
-uint16_t SparcMCExpr::parseSpecifier(StringRef name) {
+uint16_t Sparc::parseSpecifier(StringRef name) {
return StringSwitch<uint16_t>(name)
.Case("lo", ELF::R_SPARC_LO10)
.Case("hi", ELF::R_SPARC_HI22)
@@ -128,8 +133,3 @@ uint16_t SparcMCExpr::parseSpecifier(StringRef name) {
.Case("gdop", ELF::R_SPARC_GOTDATA_OP)
.Default(0);
}
-
-uint16_t SparcMCExpr::getFixupKind() const {
- assert(uint16_t(specifier) < FirstTargetFixupKind);
- return specifier;
-}
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
index 8368e8ff8795b..612b439bfc740 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
@@ -21,21 +21,21 @@ namespace llvm {
class StringRef;
class SparcMCExpr : public MCSpecifierExpr {
-private:
- explicit SparcMCExpr(uint16_t S, const MCExpr *Expr)
- : MCSpecifierExpr(Expr, S) {}
-
public:
- static const SparcMCExpr *create(uint16_t S, const MCExpr *Expr,
- MCContext &Ctx);
- uint16_t getFixupKind() const;
-
+ explicit SparcMCExpr(const MCExpr *Expr, uint16_t S)
+ : MCSpecifierExpr(Expr, S) {}
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
-
- static uint16_t parseSpecifier(StringRef name);
- static StringRef getSpecifierName(uint16_t S);
};
+namespace Sparc {
+const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCExpr *Expr,
+ uint16_t S);
+const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCSymbol *Sym,
+ uint16_t S);
+uint16_t parseSpecifier(StringRef name);
+StringRef getSpecifierName(uint16_t S);
+} // namespace Sparc
+
} // end namespace llvm.
#endif
diff --git a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
index a30cf5a661bb3..ffefdf97edab1 100644
--- a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
+++ b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
@@ -82,7 +82,7 @@ class SparcAsmPrinter : public AsmPrinter {
static MCOperand createSparcMCOperand(uint16_t Kind, MCSymbol *Sym,
MCContext &OutContext) {
const MCSymbolRefExpr *MCSym = MCSymbolRefExpr::create(Sym, OutContext);
- const SparcMCExpr *expr = SparcMCExpr::create(Kind, MCSym, OutContext);
+ const SparcMCExpr *expr = Sparc::createSpecifierExpr(OutContext, MCSym, Kind);
return MCOperand::createExpr(expr);
}
static MCOperand createPCXCallOP(MCSymbol *Label,
@@ -101,7 +101,7 @@ static MCOperand createPCXRelExprOp(uint16_t Spec, MCSymbol *GOTLabel,
const MCBinaryExpr *Sub = MCBinaryExpr::createSub(Cur, Start, OutContext);
const MCBinaryExpr *Add = MCBinaryExpr::createAdd(GOT, Sub, OutContext);
- const SparcMCExpr *expr = SparcMCExpr::create(Spec, Add, OutContext);
+ const SparcMCExpr *expr = Sparc::createSpecifierExpr(OutContext, Add, Spec);
return MCOperand::createExpr(expr);
}
@@ -302,7 +302,7 @@ MCOperand SparcAsmPrinter::lowerOperand(const MachineOperand &MO) const {
const MCExpr *expr = MCSymbolRefExpr::create(Symbol, OutContext);
if (RelType)
- expr = SparcMCExpr::create(RelType, expr, OutContext);
+ expr = Sparc::createSpecifierExpr(OutContext, expr, RelType);
return MCOperand::createExpr(expr);
}
@@ -374,7 +374,7 @@ void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
const MachineOperand &MO = MI->getOperand (opNum);
auto TF = MO.getTargetFlags();
- StringRef Spec = SparcMCExpr::getSpecifierName(TF);
+ StringRef Spec = Sparc::getSpecifierName(TF);
O << Spec;
switch (MO.getType()) {
case MachineOperand::MO_Register:
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
index 668e6eab4e1bc..be11ea272ed1f 100644
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
@@ -39,8 +39,7 @@ const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
}
MCContext &Ctx = getContext();
- return SparcMCExpr::create(ELF::R_SPARC_DISP32,
- MCSymbolRefExpr::create(SSym, Ctx), Ctx);
+ return Sparc::createSpecifierExpr(Ctx, SSym, ELF::R_SPARC_DISP32);
}
return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,
More information about the llvm-commits
mailing list