[llvm] 003fa77 - Sparc: Remove VK_LO/VK_HI and replace enum Specifier with uint16_t
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun May 4 23:51:22 PDT 2025
Author: Fangrui Song
Date: 2025-05-04T23:51:17-07:00
New Revision: 003fa7731d81a47c98e9c55f80d509933c9b91f6
URL: https://github.com/llvm/llvm-project/commit/003fa7731d81a47c98e9c55f80d509933c9b91f6
DIFF: https://github.com/llvm/llvm-project/commit/003fa7731d81a47c98e9c55f80d509933c9b91f6.diff
LOG: Sparc: Remove VK_LO/VK_HI and replace enum Specifier with uint16_t
Added:
Modified:
llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.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/SparcISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
index ae61ff579b882..f0eb403a7c71e 100644
--- a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
+++ b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
@@ -109,8 +109,7 @@ class SparcAsmParser : public MCTargetAsmParser {
ParseStatus parseExpression(int64_t &Val);
// Helper function for dealing with %lo / %hi in PIC mode.
- const SparcMCExpr *adjustPICRelocation(SparcMCExpr::Specifier VK,
- const MCExpr *subExpr);
+ const SparcMCExpr *adjustPICRelocation(uint16_t VK, const MCExpr *subExpr);
// Helper function to see if current token can start an expression.
bool isPossibleExpression(const AsmToken &Token);
@@ -701,7 +700,7 @@ bool SparcAsmParser::expandSET(MCInst &Inst, SMLoc IDLoc,
// In either case, start with the 'sethi'.
if (!IsEffectivelyImm13) {
MCInst TmpInst;
- const MCExpr *Expr = adjustPICRelocation(SparcMCExpr::VK_HI, ValExpr);
+ const MCExpr *Expr = adjustPICRelocation(ELF::R_SPARC_HI22, ValExpr);
TmpInst.setLoc(IDLoc);
TmpInst.setOpcode(SP::SETHIi);
TmpInst.addOperand(MCRegOp);
@@ -726,7 +725,7 @@ bool SparcAsmParser::expandSET(MCInst &Inst, SMLoc IDLoc,
if (IsEffectivelyImm13)
Expr = ValExpr;
else
- Expr = adjustPICRelocation(SparcMCExpr::VK_LO, ValExpr);
+ Expr = adjustPICRelocation(ELF::R_SPARC_LO10, ValExpr);
TmpInst.setLoc(IDLoc);
TmpInst.setOpcode(SP::ORri);
TmpInst.addOperand(MCRegOp);
@@ -766,7 +765,7 @@ bool SparcAsmParser::expandSETSW(MCInst &Inst, SMLoc IDLoc,
Instructions.push_back(
MCInstBuilder(SP::SETHIi)
.addReg(MCRegOp.getReg())
- .addExpr(adjustPICRelocation(SparcMCExpr::VK_HI, ValExpr)));
+ .addExpr(adjustPICRelocation(ELF::R_SPARC_HI22, ValExpr)));
PrevReg = MCRegOp;
}
@@ -774,7 +773,7 @@ bool SparcAsmParser::expandSETSW(MCInst &Inst, SMLoc IDLoc,
// If the immediate has the lower bits set or is small, we need to emit an or.
if (!NoLowBitsImm || IsSmallImm) {
const MCExpr *Expr =
- IsSmallImm ? ValExpr : adjustPICRelocation(SparcMCExpr::VK_LO, ValExpr);
+ IsSmallImm ? ValExpr : adjustPICRelocation(ELF::R_SPARC_LO10, ValExpr);
// or rd, %lo(val), rd
Instructions.push_back(MCInstBuilder(SP::ORri)
@@ -830,13 +829,13 @@ bool SparcAsmParser::expandSETX(MCInst &Inst, SMLoc IDLoc,
Instructions.push_back(
MCInstBuilder(SP::SETHIi)
.addReg(MCRegOp.getReg())
- .addExpr(adjustPICRelocation(SparcMCExpr::VK_HI, ValExpr)));
+ .addExpr(adjustPICRelocation(ELF::R_SPARC_HI22, ValExpr)));
// or rd, %lo(val), rd
Instructions.push_back(
MCInstBuilder(SP::ORri)
.addReg(MCRegOp.getReg())
.addReg(MCRegOp.getReg())
- .addExpr(adjustPICRelocation(SparcMCExpr::VK_LO, ValExpr)));
+ .addExpr(adjustPICRelocation(ELF::R_SPARC_LO10, ValExpr)));
// Small positive immediates can be expressed as a single `sethi`+`or`
// combination, so we can just return here.
@@ -1166,11 +1165,11 @@ ParseStatus SparcAsmParser::parseTailRelocSym(OperandVector &Operands) {
return Error(getLoc(), "expected valid identifier for operand modifier");
StringRef Name = getParser().getTok().getIdentifier();
- SparcMCExpr::Specifier VK = SparcMCExpr::parseSpecifier(Name);
- if (VK == SparcMCExpr::VK_None)
+ uint16_t RelType = SparcMCExpr::parseSpecifier(Name);
+ if (RelType == 0)
return Error(getLoc(), "invalid relocation specifier");
- if (!MatchesKind(VK)) {
+ if (!MatchesKind(RelType)) {
// Did not match the specified set of relocation types, put '%' back.
getLexer().UnLex(Tok);
return ParseStatus::NoMatch;
@@ -1185,7 +1184,7 @@ ParseStatus SparcAsmParser::parseTailRelocSym(OperandVector &Operands) {
if (getParser().parseParenExpression(SubExpr, E))
return ParseStatus::Failure;
- const MCExpr *Val = adjustPICRelocation(VK, SubExpr);
+ const MCExpr *Val = adjustPICRelocation(RelType, SubExpr);
Operands.push_back(SparcOperand::CreateTailRelocSym(Val, S, E));
return ParseStatus::Success;
}
@@ -1666,29 +1665,28 @@ static bool hasGOTReference(const MCExpr *Expr) {
return false;
}
-const SparcMCExpr *
-SparcAsmParser::adjustPICRelocation(SparcMCExpr::Specifier VK,
- const MCExpr *subExpr) {
+const SparcMCExpr *SparcAsmParser::adjustPICRelocation(uint16_t RelType,
+ const MCExpr *subExpr) {
// When in PIC mode, "%lo(...)" and "%hi(...)" behave
diff erently.
// If the expression refers contains _GLOBAL_OFFSET_TABLE, it is
// actually a %pc10 or %pc22 relocation. Otherwise, they are interpreted
// as %got10 or %got22 relocation.
if (getContext().getObjectFileInfo()->isPositionIndependent()) {
- switch(VK) {
+ switch (RelType) {
default: break;
- case SparcMCExpr::VK_LO:
- VK = SparcMCExpr::Specifier(
- hasGOTReference(subExpr) ? ELF::R_SPARC_PC10 : ELF::R_SPARC_GOT10);
+ case ELF::R_SPARC_LO10:
+ RelType =
+ hasGOTReference(subExpr) ? ELF::R_SPARC_PC10 : ELF::R_SPARC_GOT10;
break;
- case SparcMCExpr::VK_HI:
- VK = SparcMCExpr::Specifier(
- hasGOTReference(subExpr) ? ELF::R_SPARC_PC22 : ELF::R_SPARC_GOT22);
+ case ELF::R_SPARC_HI22:
+ RelType =
+ hasGOTReference(subExpr) ? ELF::R_SPARC_PC22 : ELF::R_SPARC_GOT22;
break;
}
}
- return SparcMCExpr::create(VK, subExpr, getContext());
+ return SparcMCExpr::create(RelType, subExpr, getContext());
}
bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
@@ -1699,9 +1697,9 @@ bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
StringRef name = Tok.getString();
- SparcMCExpr::Specifier VK = SparcMCExpr::parseSpecifier(name);
- switch (uint16_t(VK)) {
- case SparcMCExpr::VK_None:
+ auto VK = SparcMCExpr::parseSpecifier(name);
+ switch (VK) {
+ case 0:
Error(getLoc(), "invalid relocation specifier");
return false;
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
index 57203fd5c80ae..983fe03449a73 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
@@ -26,7 +26,7 @@ using namespace llvm;
const SparcMCExpr *SparcMCExpr::create(uint16_t S, const MCExpr *Expr,
MCContext &Ctx) {
- return new (Ctx) SparcMCExpr(Specifier(S), Expr);
+ return new (Ctx) SparcMCExpr(S, Expr);
}
void SparcMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
@@ -38,12 +38,12 @@ void SparcMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
OS << ')';
}
-StringRef SparcMCExpr::getSpecifierName(SparcMCExpr::Specifier S) {
+StringRef SparcMCExpr::getSpecifierName(uint16_t S) {
// clang-format off
switch (uint16_t(S)) {
- case VK_None: return {};
- case VK_LO: return "lo";
- case VK_HI: return "hi";
+ case 0: return {};
+ case ELF::R_SPARC_LO10: return "lo";
+ case ELF::R_SPARC_HI22: return "hi";
case ELF::R_SPARC_H44: return "h44";
case ELF::R_SPARC_M44: return "m44";
case ELF::R_SPARC_L44: return "l44";
@@ -85,62 +85,55 @@ StringRef SparcMCExpr::getSpecifierName(SparcMCExpr::Specifier S) {
llvm_unreachable("Unhandled SparcMCExpr::Specifier");
}
-SparcMCExpr::Specifier SparcMCExpr::parseSpecifier(StringRef name) {
- return StringSwitch<SparcMCExpr::Specifier>(name)
- .Case("lo", VK_LO)
- .Case("hi", VK_HI)
- .Case("h44", (SparcMCExpr::Specifier)ELF::R_SPARC_H44)
- .Case("m44", (SparcMCExpr::Specifier)ELF::R_SPARC_M44)
- .Case("l44", (SparcMCExpr::Specifier)ELF::R_SPARC_L44)
- .Case("hh", (SparcMCExpr::Specifier)ELF::R_SPARC_HH22)
+uint16_t SparcMCExpr::parseSpecifier(StringRef name) {
+ return StringSwitch<uint16_t>(name)
+ .Case("lo", ELF::R_SPARC_LO10)
+ .Case("hi", ELF::R_SPARC_HI22)
+ .Case("h44", ELF::R_SPARC_H44)
+ .Case("m44", ELF::R_SPARC_M44)
+ .Case("l44", ELF::R_SPARC_L44)
+ .Case("hh", ELF::R_SPARC_HH22)
// Nonstandard GNU extension
- .Case("uhi", (SparcMCExpr::Specifier)ELF::R_SPARC_HH22)
- .Case("hm", (SparcMCExpr::Specifier)ELF::R_SPARC_HM10)
+ .Case("uhi", ELF::R_SPARC_HH22)
+ .Case("hm", ELF::R_SPARC_HM10)
// Nonstandard GNU extension
- .Case("ulo", (SparcMCExpr::Specifier)ELF::R_SPARC_HM10)
- .Case("lm", (SparcMCExpr::Specifier)ELF::R_SPARC_LM22)
- .Case("pc22", (SparcMCExpr::Specifier)ELF::R_SPARC_PC22)
- .Case("pc10", (SparcMCExpr::Specifier)ELF::R_SPARC_PC10)
- .Case("got22", (SparcMCExpr::Specifier)ELF::R_SPARC_GOT22)
- .Case("got10", (SparcMCExpr::Specifier)ELF::R_SPARC_GOT10)
- .Case("got13", (SparcMCExpr::Specifier)ELF::R_SPARC_GOT13)
- .Case("r_disp32", (SparcMCExpr::Specifier)ELF::R_SPARC_DISP32)
- .Case("tgd_hi22", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_GD_HI22)
- .Case("tgd_lo10", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_GD_LO10)
- .Case("tgd_add", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_GD_ADD)
- .Case("tgd_call", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_GD_CALL)
- .Case("tldm_hi22", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDM_HI22)
- .Case("tldm_lo10", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDM_LO10)
- .Case("tldm_add", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDM_ADD)
- .Case("tldm_call", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDM_CALL)
- .Case("tldo_hix22", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDO_HIX22)
- .Case("tldo_lox10", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDO_LOX10)
- .Case("tldo_add", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LDO_ADD)
- .Case("tie_hi22", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_IE_HI22)
- .Case("tie_lo10", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_IE_LO10)
- .Case("tie_ld", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_IE_LD)
- .Case("tie_ldx", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_IE_LDX)
- .Case("tie_add", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_IE_ADD)
- .Case("tle_hix22", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LE_HIX22)
- .Case("tle_lox10", (SparcMCExpr::Specifier)ELF::R_SPARC_TLS_LE_LOX10)
- .Case("hix", (SparcMCExpr::Specifier)ELF::R_SPARC_HIX22)
- .Case("lox", (SparcMCExpr::Specifier)ELF::R_SPARC_LOX10)
- .Case("gdop_hix22", (SparcMCExpr::Specifier)ELF::R_SPARC_GOTDATA_OP_HIX22)
- .Case("gdop_lox10", (SparcMCExpr::Specifier)ELF::R_SPARC_GOTDATA_OP_LOX10)
- .Case("gdop", (SparcMCExpr::Specifier)ELF::R_SPARC_GOTDATA_OP)
- .Default(VK_None);
+ .Case("ulo", ELF::R_SPARC_HM10)
+ .Case("lm", ELF::R_SPARC_LM22)
+ .Case("pc22", ELF::R_SPARC_PC22)
+ .Case("pc10", ELF::R_SPARC_PC10)
+ .Case("got22", ELF::R_SPARC_GOT22)
+ .Case("got10", ELF::R_SPARC_GOT10)
+ .Case("got13", ELF::R_SPARC_GOT13)
+ .Case("r_disp32", ELF::R_SPARC_DISP32)
+ .Case("tgd_hi22", ELF::R_SPARC_TLS_GD_HI22)
+ .Case("tgd_lo10", ELF::R_SPARC_TLS_GD_LO10)
+ .Case("tgd_add", ELF::R_SPARC_TLS_GD_ADD)
+ .Case("tgd_call", ELF::R_SPARC_TLS_GD_CALL)
+ .Case("tldm_hi22", ELF::R_SPARC_TLS_LDM_HI22)
+ .Case("tldm_lo10", ELF::R_SPARC_TLS_LDM_LO10)
+ .Case("tldm_add", ELF::R_SPARC_TLS_LDM_ADD)
+ .Case("tldm_call", ELF::R_SPARC_TLS_LDM_CALL)
+ .Case("tldo_hix22", ELF::R_SPARC_TLS_LDO_HIX22)
+ .Case("tldo_lox10", ELF::R_SPARC_TLS_LDO_LOX10)
+ .Case("tldo_add", ELF::R_SPARC_TLS_LDO_ADD)
+ .Case("tie_hi22", ELF::R_SPARC_TLS_IE_HI22)
+ .Case("tie_lo10", ELF::R_SPARC_TLS_IE_LO10)
+ .Case("tie_ld", ELF::R_SPARC_TLS_IE_LD)
+ .Case("tie_ldx", ELF::R_SPARC_TLS_IE_LDX)
+ .Case("tie_add", ELF::R_SPARC_TLS_IE_ADD)
+ .Case("tle_hix22", ELF::R_SPARC_TLS_LE_HIX22)
+ .Case("tle_lox10", ELF::R_SPARC_TLS_LE_LOX10)
+ .Case("hix", ELF::R_SPARC_HIX22)
+ .Case("lox", ELF::R_SPARC_LOX10)
+ .Case("gdop_hix22", ELF::R_SPARC_GOTDATA_OP_HIX22)
+ .Case("gdop_lox10", ELF::R_SPARC_GOTDATA_OP_LOX10)
+ .Case("gdop", ELF::R_SPARC_GOTDATA_OP)
+ .Default(0);
}
uint16_t SparcMCExpr::getFixupKind() const {
- // clang-format off
- switch (specifier) {
- default:
- assert(uint16_t(specifier) < FirstTargetFixupKind);
- return specifier;
- case VK_LO: return ELF::R_SPARC_LO10;
- case VK_HI: return ELF::R_SPARC_HI22;
- }
- // clang-format on
+ assert(uint16_t(specifier) < FirstTargetFixupKind);
+ return specifier;
}
bool SparcMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
index b99e8ce084795..095b115ea5a05 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
@@ -21,35 +21,20 @@ namespace llvm {
class StringRef;
class SparcMCExpr : public MCTargetExpr {
-public:
- enum Specifier {
- VK_None,
- VK_LO = 200, // larger than any relocation type
- VK_HI,
- };
-
private:
- const Specifier specifier;
+ const uint16_t specifier;
const MCExpr *Expr;
- explicit SparcMCExpr(Specifier S, const MCExpr *Expr)
+ explicit SparcMCExpr(uint16_t S, const MCExpr *Expr)
: specifier(S), Expr(Expr) {}
public:
- /// @name Construction
- /// @{
-
static const SparcMCExpr *create(uint16_t S, const MCExpr *Expr,
MCContext &Ctx);
- /// @}
- /// @name Accessors
- /// @{
-
- Specifier getSpecifier() const { return specifier; }
+ uint16_t getSpecifier() const { return specifier; }
const MCExpr *getSubExpr() const { return Expr; }
uint16_t getFixupKind() const;
- /// @}
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
bool evaluateAsRelocatableImpl(MCValue &Res,
const MCAssembler *Asm) const override;
@@ -62,8 +47,8 @@ class SparcMCExpr : public MCTargetExpr {
return E->getKind() == MCExpr::Target;
}
- static Specifier parseSpecifier(StringRef name);
- static StringRef getSpecifierName(Specifier S);
+ static uint16_t parseSpecifier(StringRef name);
+ static StringRef getSpecifierName(uint16_t S);
};
} // end namespace llvm.
diff --git a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
index ed8d2fa057bce..3cf26ce209ac9 100644
--- a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
+++ b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
@@ -79,8 +79,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(SparcMCExpr::Specifier(Kind), MCSym, OutContext);
+ const SparcMCExpr *expr = SparcMCExpr::create(Kind, MCSym, OutContext);
return MCOperand::createExpr(expr);
}
static MCOperand createPCXCallOP(MCSymbol *Label,
@@ -99,8 +98,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(SparcMCExpr::Specifier(Spec), Add, OutContext);
+ const SparcMCExpr *expr = SparcMCExpr::create(Spec, Add, OutContext);
return MCOperand::createExpr(expr);
}
@@ -164,7 +162,7 @@ static void EmitSHL(MCStreamer &OutStreamer,
EmitBinary(OutStreamer, SP::SLLri, RS1, Imm, RD, STI);
}
-static void EmitHiLo(MCStreamer &OutStreamer, MCSymbol *GOTSym, uint16_t HiKind,
+static void emitHiLo(MCStreamer &OutStreamer, MCSymbol *GOTSym, uint16_t HiKind,
uint16_t LoKind, MCOperand &RD, MCContext &OutContext,
const MCSubtargetInfo &STI) {
MCOperand hi = createSparcMCOperand(HiKind, GOTSym, OutContext);
@@ -192,11 +190,11 @@ void SparcAsmPrinter::LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
default:
llvm_unreachable("Unsupported absolute code model");
case CodeModel::Small:
- EmitHiLo(*OutStreamer, GOTLabel, SparcMCExpr::VK_HI, SparcMCExpr::VK_LO,
+ emitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_HI22, ELF::R_SPARC_LO10,
MCRegOP, OutContext, STI);
break;
case CodeModel::Medium: {
- EmitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_H44, ELF::R_SPARC_M44,
+ emitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_H44, ELF::R_SPARC_M44,
MCRegOP, OutContext, STI);
MCOperand imm = MCOperand::createExpr(MCConstantExpr::create(12,
OutContext));
@@ -207,14 +205,14 @@ void SparcAsmPrinter::LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
break;
}
case CodeModel::Large: {
- EmitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_HH22, ELF::R_SPARC_HM10,
+ emitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_HH22, ELF::R_SPARC_HM10,
MCRegOP, OutContext, STI);
MCOperand imm = MCOperand::createExpr(MCConstantExpr::create(32,
OutContext));
EmitSHL(*OutStreamer, MCRegOP, imm, MCRegOP, STI);
// Use register %o7 to load the lower 32 bits.
MCOperand RegO7 = MCOperand::createReg(SP::O7);
- EmitHiLo(*OutStreamer, GOTLabel, SparcMCExpr::VK_HI, SparcMCExpr::VK_LO,
+ emitHiLo(*OutStreamer, GOTLabel, ELF::R_SPARC_HI22, ELF::R_SPARC_LO10,
RegO7, OutContext, STI);
EmitADD(*OutStreamer, MCRegOP, RegO7, MCRegOP, STI);
}
@@ -277,7 +275,7 @@ MCOperand SparcAsmPrinter::lowerOperand(const MachineOperand &MO) const {
case MachineOperand::MO_BlockAddress:
case MachineOperand::MO_ExternalSymbol:
case MachineOperand::MO_ConstantPoolIndex: {
- SparcMCExpr::Specifier Kind = (SparcMCExpr::Specifier)MO.getTargetFlags();
+ auto RelType = MO.getTargetFlags();
const MCSymbol *Symbol = nullptr;
switch (MO.getType()) {
default:
@@ -300,8 +298,8 @@ MCOperand SparcAsmPrinter::lowerOperand(const MachineOperand &MO) const {
}
const MCExpr *expr = MCSymbolRefExpr::create(Symbol, OutContext);
- if (Kind)
- expr = SparcMCExpr::create(Kind, expr, OutContext);
+ if (RelType)
+ expr = SparcMCExpr::create(RelType, expr, OutContext);
return MCOperand::createExpr(expr);
}
@@ -371,7 +369,7 @@ void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
raw_ostream &O) {
const DataLayout &DL = getDataLayout();
const MachineOperand &MO = MI->getOperand (opNum);
- SparcMCExpr::Specifier TF = (SparcMCExpr::Specifier)MO.getTargetFlags();
+ auto TF = MO.getTargetFlags();
StringRef Spec = SparcMCExpr::getSpecifierName(TF);
O << Spec;
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
index 1be39a98ad8c2..0dae245c228aa 100644
--- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp
+++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
@@ -2202,7 +2202,7 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
llvm_unreachable("Unsupported absolute code model");
case CodeModel::Small:
// abs32.
- return makeHiLoPair(Op, SparcMCExpr::VK_HI, SparcMCExpr::VK_LO, DAG);
+ return makeHiLoPair(Op, ELF::R_SPARC_HI22, ELF::R_SPARC_LO10, DAG);
case CodeModel::Medium: {
// abs44.
SDValue H44 = makeHiLoPair(Op, ELF::R_SPARC_H44, ELF::R_SPARC_M44, DAG);
@@ -2215,7 +2215,7 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
// abs64.
SDValue Hi = makeHiLoPair(Op, ELF::R_SPARC_HH22, ELF::R_SPARC_HM10, DAG);
Hi = DAG.getNode(ISD::SHL, DL, VT, Hi, DAG.getConstant(32, DL, MVT::i32));
- SDValue Lo = makeHiLoPair(Op, SparcMCExpr::VK_HI, SparcMCExpr::VK_LO, DAG);
+ SDValue Lo = makeHiLoPair(Op, ELF::R_SPARC_HI22, ELF::R_SPARC_LO10, DAG);
return DAG.getNode(ISD::ADD, DL, VT, Hi, Lo);
}
}
More information about the llvm-commits
mailing list