Skip to content

Commit 43be31e

Browse files
committed
SPARC: Simplify SparcMCExpr
Reduce direct uses of SparcMCExpr, facilitating transition to MCSpecifierExpr in the future.
1 parent 4903c11 commit 43be31e

File tree

7 files changed

+39
-42
lines changed

7 files changed

+39
-42
lines changed

llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -848,14 +848,14 @@ bool SparcAsmParser::expandSETX(MCInst &Inst, SMLoc IDLoc,
848848
// sethi %hh(val), tmp
849849
Instructions.push_back(MCInstBuilder(SP::SETHIi)
850850
.addReg(MCTmpOp.getReg())
851-
.addExpr(SparcMCExpr::create(
852-
ELF::R_SPARC_HH22, ValExpr, getContext())));
851+
.addExpr(Sparc::createSpecifierExpr(
852+
getContext(), ValExpr, ELF::R_SPARC_HH22)));
853853
// or tmp, %hm(val), tmp
854854
Instructions.push_back(MCInstBuilder(SP::ORri)
855855
.addReg(MCTmpOp.getReg())
856856
.addReg(MCTmpOp.getReg())
857-
.addExpr(SparcMCExpr::create(
858-
ELF::R_SPARC_HM10, ValExpr, getContext())));
857+
.addExpr(Sparc::createSpecifierExpr(
858+
getContext(), ValExpr, ELF::R_SPARC_HM10)));
859859
// sllx tmp, 32, tmp
860860
Instructions.push_back(MCInstBuilder(SP::SLLXri)
861861
.addReg(MCTmpOp.getReg())
@@ -1165,7 +1165,7 @@ ParseStatus SparcAsmParser::parseTailRelocSym(OperandVector &Operands) {
11651165
return Error(getLoc(), "expected valid identifier for operand modifier");
11661166

11671167
StringRef Name = getParser().getTok().getIdentifier();
1168-
uint16_t RelType = SparcMCExpr::parseSpecifier(Name);
1168+
uint16_t RelType = Sparc::parseSpecifier(Name);
11691169
if (RelType == 0)
11701170
return Error(getLoc(), "invalid relocation specifier");
11711171

@@ -1689,7 +1689,7 @@ const SparcMCExpr *SparcAsmParser::adjustPICRelocation(uint16_t RelType,
16891689
}
16901690
}
16911691

1692-
return SparcMCExpr::create(RelType, subExpr, getContext());
1692+
return Sparc::createSpecifierExpr(getContext(), subExpr, RelType);
16931693
}
16941694

16951695
bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
@@ -1700,7 +1700,7 @@ bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,
17001700

17011701
StringRef name = Tok.getString();
17021702

1703-
auto VK = SparcMCExpr::parseSpecifier(name);
1703+
auto VK = Sparc::parseSpecifier(name);
17041704
switch (VK) {
17051705
case 0:
17061706
Error(getLoc(), "invalid relocation specifier");

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ SparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym,
5050
MCStreamer &Streamer) const {
5151
if (Encoding & dwarf::DW_EH_PE_pcrel) {
5252
MCContext &Ctx = Streamer.getContext();
53-
return SparcMCExpr::create(ELF::R_SPARC_DISP32,
54-
MCSymbolRefExpr::create(Sym, Ctx), Ctx);
53+
return Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
5554
}
5655

5756
return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
@@ -63,8 +62,7 @@ SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
6362
MCStreamer &Streamer) const {
6463
if (Encoding & dwarf::DW_EH_PE_pcrel) {
6564
MCContext &Ctx = Streamer.getContext();
66-
return SparcMCExpr::create(ELF::R_SPARC_DISP32,
67-
MCSymbolRefExpr::create(Sym, Ctx), Ctx);
65+
return Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
6866
}
6967
return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
7068
}

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ getMachineOpValue(const MCInst &MI, const MCOperand &MO,
135135
assert(MO.isExpr());
136136
const MCExpr *Expr = MO.getExpr();
137137
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
138-
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
138+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
139139
return 0;
140140
}
141141

@@ -165,7 +165,7 @@ unsigned SparcMCCodeEmitter::getSImm5OpValue(const MCInst &MI, unsigned OpNo,
165165
return CE->getValue();
166166

167167
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
168-
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
168+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
169169
return 0;
170170
}
171171
Fixups.push_back(MCFixup::create(0, Expr, ELF::R_SPARC_5));
@@ -191,7 +191,7 @@ SparcMCCodeEmitter::getSImm13OpValue(const MCInst &MI, unsigned OpNo,
191191
return CE->getValue();
192192

193193
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
194-
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
194+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getSpecifier()));
195195
return 0;
196196
}
197197
Fixups.push_back(MCFixup::create(0, Expr, Sparc::fixup_sparc_13));

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,26 @@ using namespace llvm;
2222

2323
#define DEBUG_TYPE "sparcmcexpr"
2424

25-
const SparcMCExpr *SparcMCExpr::create(uint16_t S, const MCExpr *Expr,
26-
MCContext &Ctx) {
27-
return new (Ctx) SparcMCExpr(S, Expr);
25+
const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
26+
const MCExpr *Expr, uint16_t S) {
27+
return new (Ctx) SparcMCExpr(Expr, S);
28+
}
29+
30+
const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
31+
const MCSymbol *Sym, uint16_t S) {
32+
return new (Ctx) SparcMCExpr(MCSymbolRefExpr::create(Sym, Ctx), S);
2833
}
2934

3035
void SparcMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
31-
StringRef S = getSpecifierName(specifier);
36+
StringRef S = Sparc::getSpecifierName(specifier);
3237
if (!S.empty())
3338
OS << '%' << S << '(';
3439
getSubExpr()->print(OS, MAI);
3540
if (!S.empty())
3641
OS << ')';
3742
}
3843

39-
StringRef SparcMCExpr::getSpecifierName(uint16_t S) {
44+
StringRef Sparc::getSpecifierName(uint16_t S) {
4045
// clang-format off
4146
switch (uint16_t(S)) {
4247
case 0: return {};
@@ -83,7 +88,7 @@ StringRef SparcMCExpr::getSpecifierName(uint16_t S) {
8388
llvm_unreachable("Unhandled SparcMCExpr::Specifier");
8489
}
8590

86-
uint16_t SparcMCExpr::parseSpecifier(StringRef name) {
91+
uint16_t Sparc::parseSpecifier(StringRef name) {
8792
return StringSwitch<uint16_t>(name)
8893
.Case("lo", ELF::R_SPARC_LO10)
8994
.Case("hi", ELF::R_SPARC_HI22)
@@ -128,8 +133,3 @@ uint16_t SparcMCExpr::parseSpecifier(StringRef name) {
128133
.Case("gdop", ELF::R_SPARC_GOTDATA_OP)
129134
.Default(0);
130135
}
131-
132-
uint16_t SparcMCExpr::getFixupKind() const {
133-
assert(uint16_t(specifier) < FirstTargetFixupKind);
134-
return specifier;
135-
}

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,21 @@ namespace llvm {
2121

2222
class StringRef;
2323
class SparcMCExpr : public MCSpecifierExpr {
24-
private:
25-
explicit SparcMCExpr(uint16_t S, const MCExpr *Expr)
26-
: MCSpecifierExpr(Expr, S) {}
27-
2824
public:
29-
static const SparcMCExpr *create(uint16_t S, const MCExpr *Expr,
30-
MCContext &Ctx);
31-
uint16_t getFixupKind() const;
32-
25+
explicit SparcMCExpr(const MCExpr *Expr, uint16_t S)
26+
: MCSpecifierExpr(Expr, S) {}
3327
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
34-
35-
static uint16_t parseSpecifier(StringRef name);
36-
static StringRef getSpecifierName(uint16_t S);
3728
};
3829

30+
namespace Sparc {
31+
const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCExpr *Expr,
32+
uint16_t S);
33+
const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCSymbol *Sym,
34+
uint16_t S);
35+
uint16_t parseSpecifier(StringRef name);
36+
StringRef getSpecifierName(uint16_t S);
37+
} // namespace Sparc
38+
3939
} // end namespace llvm.
4040

4141
#endif

llvm/lib/Target/Sparc/SparcAsmPrinter.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class SparcAsmPrinter : public AsmPrinter {
8282
static MCOperand createSparcMCOperand(uint16_t Kind, MCSymbol *Sym,
8383
MCContext &OutContext) {
8484
const MCSymbolRefExpr *MCSym = MCSymbolRefExpr::create(Sym, OutContext);
85-
const SparcMCExpr *expr = SparcMCExpr::create(Kind, MCSym, OutContext);
85+
const SparcMCExpr *expr = Sparc::createSpecifierExpr(OutContext, MCSym, Kind);
8686
return MCOperand::createExpr(expr);
8787
}
8888
static MCOperand createPCXCallOP(MCSymbol *Label,
@@ -101,7 +101,7 @@ static MCOperand createPCXRelExprOp(uint16_t Spec, MCSymbol *GOTLabel,
101101

102102
const MCBinaryExpr *Sub = MCBinaryExpr::createSub(Cur, Start, OutContext);
103103
const MCBinaryExpr *Add = MCBinaryExpr::createAdd(GOT, Sub, OutContext);
104-
const SparcMCExpr *expr = SparcMCExpr::create(Spec, Add, OutContext);
104+
const SparcMCExpr *expr = Sparc::createSpecifierExpr(OutContext, Add, Spec);
105105
return MCOperand::createExpr(expr);
106106
}
107107

@@ -302,7 +302,7 @@ MCOperand SparcAsmPrinter::lowerOperand(const MachineOperand &MO) const {
302302

303303
const MCExpr *expr = MCSymbolRefExpr::create(Symbol, OutContext);
304304
if (RelType)
305-
expr = SparcMCExpr::create(RelType, expr, OutContext);
305+
expr = Sparc::createSpecifierExpr(OutContext, expr, RelType);
306306
return MCOperand::createExpr(expr);
307307
}
308308

@@ -374,7 +374,7 @@ void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
374374
const MachineOperand &MO = MI->getOperand (opNum);
375375
auto TF = MO.getTargetFlags();
376376

377-
StringRef Spec = SparcMCExpr::getSpecifierName(TF);
377+
StringRef Spec = Sparc::getSpecifierName(TF);
378378
O << Spec;
379379
switch (MO.getType()) {
380380
case MachineOperand::MO_Register:

llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
3939
}
4040

4141
MCContext &Ctx = getContext();
42-
return SparcMCExpr::create(ELF::R_SPARC_DISP32,
43-
MCSymbolRefExpr::create(SSym, Ctx), Ctx);
42+
return Sparc::createSpecifierExpr(Ctx, SSym, ELF::R_SPARC_DISP32);
4443
}
4544

4645
return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,

0 commit comments

Comments
 (0)