Skip to content

Commit 254a92d

Browse files
committed
MC: Add MCSpecifierExpr::create
as a target-agnostic implementation to replace target-specific XXXMCExpr::create.
1 parent df54a2d commit 254a92d

File tree

8 files changed

+28
-28
lines changed

8 files changed

+28
-28
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -510,12 +510,16 @@ class LLVM_ABI MCSpecifierExpr : public MCExpr {
510510
// Target-specific relocation specifier code
511511
const Spec specifier;
512512

513-
public:
514-
explicit MCSpecifierExpr(const MCExpr *Expr, Spec S)
515-
: MCExpr(Specifier, SMLoc()), Expr(Expr), specifier(S) {}
513+
explicit MCSpecifierExpr(const MCExpr *Expr, Spec S, SMLoc Loc = SMLoc())
514+
: MCExpr(Specifier, Loc), Expr(Expr), specifier(S) {}
516515
virtual ~MCSpecifierExpr() = default;
517516

518517
public:
518+
LLVM_ABI static const MCSpecifierExpr *
519+
create(const MCExpr *Expr, Spec S, MCContext &Ctx, SMLoc Loc = SMLoc());
520+
LLVM_ABI static const MCSpecifierExpr *
521+
create(const MCSymbol *Sym, Spec S, MCContext &Ctx, SMLoc Loc = SMLoc());
522+
519523
Spec getSpecifier() const { return specifier; }
520524
const MCExpr *getSubExpr() const { return Expr; }
521525

llvm/lib/MC/MCExpr.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,16 @@ MCFragment *MCExpr::findAssociatedFragment() const {
737737
llvm_unreachable("Invalid assembly expression kind!");
738738
}
739739

740+
const MCSpecifierExpr *MCSpecifierExpr::create(const MCExpr *Expr, Spec S,
741+
MCContext &Ctx, SMLoc Loc) {
742+
return new (Ctx) MCSpecifierExpr(Expr, S, Loc);
743+
}
744+
745+
const MCSpecifierExpr *MCSpecifierExpr::create(const MCSymbol *Sym, Spec S,
746+
MCContext &Ctx, SMLoc Loc) {
747+
return new (Ctx) MCSpecifierExpr(MCSymbolRefExpr::create(Sym, Ctx), S, Loc);
748+
}
749+
740750
bool MCSpecifierExpr::evaluateAsRelocatableImpl(MCValue &Res,
741751
const MCAssembler *Asm) const {
742752
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))

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

Lines changed: 5 additions & 5 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(Sparc::createSpecifierExpr(
852-
getContext(), ValExpr, ELF::R_SPARC_HH22)));
851+
.addExpr(MCSpecifierExpr::create(
852+
ValExpr, ELF::R_SPARC_HH22, getContext())));
853853
// or tmp, %hm(val), tmp
854854
Instructions.push_back(MCInstBuilder(SP::ORri)
855855
.addReg(MCTmpOp.getReg())
856856
.addReg(MCTmpOp.getReg())
857-
.addExpr(Sparc::createSpecifierExpr(
858-
getContext(), ValExpr, ELF::R_SPARC_HM10)));
857+
.addExpr(MCSpecifierExpr::create(
858+
ValExpr, ELF::R_SPARC_HM10, getContext())));
859859
// sllx tmp, 32, tmp
860860
Instructions.push_back(MCInstBuilder(SP::SLLXri)
861861
.addReg(MCTmpOp.getReg())
@@ -1689,7 +1689,7 @@ const SparcMCExpr *SparcAsmParser::adjustPICRelocation(uint16_t RelType,
16891689
}
16901690
}
16911691

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

16951695
bool SparcAsmParser::matchSparcAsmModifiers(const MCExpr *&EVal,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +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 Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
53+
return MCSpecifierExpr::create(Sym, ELF::R_SPARC_DISP32, Ctx);
5454
}
5555

5656
return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
@@ -62,7 +62,7 @@ SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
6262
MCStreamer &Streamer) const {
6363
if (Encoding & dwarf::DW_EH_PE_pcrel) {
6464
MCContext &Ctx = Streamer.getContext();
65-
return Sparc::createSpecifierExpr(Ctx, Sym, ELF::R_SPARC_DISP32);
65+
return MCSpecifierExpr::create(Sym, ELF::R_SPARC_DISP32, Ctx);
6666
}
6767
return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
6868
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,6 @@ using namespace llvm;
2222

2323
#define DEBUG_TYPE "sparcmcexpr"
2424

25-
const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
26-
const MCExpr *Expr, uint16_t S) {
27-
return new (Ctx) MCSpecifierExpr(Expr, S);
28-
}
29-
30-
const SparcMCExpr *Sparc::createSpecifierExpr(MCContext &Ctx,
31-
const MCSymbol *Sym, uint16_t S) {
32-
return new (Ctx) MCSpecifierExpr(MCSymbolRefExpr::create(Sym, Ctx), S);
33-
}
34-
3525
StringRef Sparc::getSpecifierName(uint16_t S) {
3626
// clang-format off
3727
switch (uint16_t(S)) {

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ class StringRef;
2323
using SparcMCExpr = MCSpecifierExpr;
2424

2525
namespace Sparc {
26-
const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCExpr *Expr,
27-
uint16_t S);
28-
const SparcMCExpr *createSpecifierExpr(MCContext &Ctx, const MCSymbol *Sym,
29-
uint16_t S);
3026
uint16_t parseSpecifier(StringRef name);
3127
StringRef getSpecifierName(uint16_t S);
3228
} // namespace Sparc

llvm/lib/Target/Sparc/SparcAsmPrinter.cpp

Lines changed: 3 additions & 3 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 = Sparc::createSpecifierExpr(OutContext, MCSym, Kind);
85+
const SparcMCExpr *expr = MCSpecifierExpr::create(MCSym, Kind, OutContext);
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 = Sparc::createSpecifierExpr(OutContext, Add, Spec);
104+
const SparcMCExpr *expr = MCSpecifierExpr::create(Add, Spec, OutContext);
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 = Sparc::createSpecifierExpr(OutContext, expr, RelType);
305+
expr = MCSpecifierExpr::create(expr, RelType, OutContext);
306306
return MCOperand::createExpr(expr);
307307
}
308308

llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp

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

4141
MCContext &Ctx = getContext();
42-
return Sparc::createSpecifierExpr(Ctx, SSym, ELF::R_SPARC_DISP32);
42+
return MCSpecifierExpr::create(SSym, ELF::R_SPARC_DISP32, Ctx);
4343
}
4444

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

0 commit comments

Comments
 (0)