Skip to content

Commit f11dd11

Browse files
committed
RISCV: Replace RISCVMCExpr with MCSpecifierExpr
1 parent 51b63bb commit f11dd11

File tree

12 files changed

+45
-107
lines changed

12 files changed

+45
-107
lines changed

bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
3333

3434
bool equals(const MCSpecifierExpr &A, const MCSpecifierExpr &B,
3535
CompFuncTy Comp) const override {
36-
const auto &RISCVExprA = cast<RISCVMCExpr>(A);
37-
const auto &RISCVExprB = cast<RISCVMCExpr>(B);
36+
const auto &RISCVExprA = cast<MCSpecifierExpr>(A);
37+
const auto &RISCVExprB = cast<MCSpecifierExpr>(B);
3838
if (RISCVExprA.getSpecifier() != RISCVExprB.getSpecifier())
3939
return false;
4040

@@ -245,7 +245,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
245245
MCContext *Ctx) {
246246
Inst.setOpcode(Opcode);
247247
Inst.clear();
248-
Inst.addOperand(MCOperand::createExpr(RISCVMCExpr::create(
248+
Inst.addOperand(MCOperand::createExpr(MCSpecifierExpr::create(
249249
MCSymbolRefExpr::create(Target, MCSymbolRefExpr::VK_None, *Ctx),
250250
ELF::R_RISCV_CALL_PLT, *Ctx)));
251251
}
@@ -342,7 +342,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
342342
}
343343

344344
const MCSymbol *getTargetSymbol(const MCExpr *Expr) const override {
345-
auto *RISCVExpr = dyn_cast<RISCVMCExpr>(Expr);
345+
auto *RISCVExpr = dyn_cast<MCSpecifierExpr>(Expr);
346346
if (RISCVExpr && RISCVExpr->getSubExpr())
347347
return getTargetSymbol(RISCVExpr->getSubExpr());
348348

@@ -435,19 +435,19 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
435435
case ELF::R_RISCV_TLS_GD_HI20:
436436
// The GOT is reused so no need to create GOT relocations
437437
case ELF::R_RISCV_PCREL_HI20:
438-
return RISCVMCExpr::create(Expr, ELF::R_RISCV_PCREL_HI20, Ctx);
438+
return MCSpecifierExpr::create(Expr, ELF::R_RISCV_PCREL_HI20, Ctx);
439439
case ELF::R_RISCV_PCREL_LO12_I:
440440
case ELF::R_RISCV_PCREL_LO12_S:
441-
return RISCVMCExpr::create(Expr, RISCV::S_PCREL_LO, Ctx);
441+
return MCSpecifierExpr::create(Expr, RISCV::S_PCREL_LO, Ctx);
442442
case ELF::R_RISCV_HI20:
443-
return RISCVMCExpr::create(Expr, ELF::R_RISCV_HI20, Ctx);
443+
return MCSpecifierExpr::create(Expr, ELF::R_RISCV_HI20, Ctx);
444444
case ELF::R_RISCV_LO12_I:
445445
case ELF::R_RISCV_LO12_S:
446-
return RISCVMCExpr::create(Expr, RISCV::S_LO, Ctx);
446+
return MCSpecifierExpr::create(Expr, RISCV::S_LO, Ctx);
447447
case ELF::R_RISCV_CALL:
448-
return RISCVMCExpr::create(Expr, ELF::R_RISCV_CALL_PLT, Ctx);
448+
return MCSpecifierExpr::create(Expr, ELF::R_RISCV_CALL_PLT, Ctx);
449449
case ELF::R_RISCV_CALL_PLT:
450-
return RISCVMCExpr::create(Expr, ELF::R_RISCV_CALL_PLT, Ctx);
450+
return MCSpecifierExpr::create(Expr, ELF::R_RISCV_CALL_PLT, Ctx);
451451
}
452452
}
453453

@@ -466,10 +466,10 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
466466
return false;
467467

468468
const auto *ImmExpr = ImmOp.getExpr();
469-
if (!isa<RISCVMCExpr>(ImmExpr))
469+
if (!isa<MCSpecifierExpr>(ImmExpr))
470470
return false;
471471

472-
switch (cast<RISCVMCExpr>(ImmExpr)->getSpecifier()) {
472+
switch (cast<MCSpecifierExpr>(ImmExpr)->getSpecifier()) {
473473
default:
474474
return false;
475475
case ELF::R_RISCV_CALL_PLT:

llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,6 @@ class TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
117117
MCSection *getStaticDtorSection(unsigned Priority,
118118
const MCSymbol *KeySym) const override;
119119

120-
virtual const MCExpr *createTargetMCExpr(const MCExpr *Expr,
121-
uint8_t Specifier) const {
122-
return nullptr;
123-
}
124120
const MCExpr *
125121
lowerSymbolDifference(const MCSymbol *LHS, const MCSymbol *RHS,
126122
int64_t Addend,

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ const MCExpr *TargetLoweringObjectFileELF::lowerSymbolDifference(
12191219
if (Addend)
12201220
Res = MCBinaryExpr::createAdd(Res, MCConstantExpr::create(Addend, Ctx),
12211221
Ctx);
1222-
return createTargetMCExpr(Res, PLTPCRelativeSpecifier);
1222+
return MCSpecifierExpr::create(Res, PLTPCRelativeSpecifier, getContext());
12231223
}
12241224

12251225
if (!PLTRelativeSpecifier)

llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class RISCVAsmParser : public MCTargetAsmParser {
137137
// Helper to emit a combination of AUIPC and SecondOpcode. Used to implement
138138
// helpers such as emitLoadLocalAddress and emitLoadAddress.
139139
void emitAuipcInstPair(MCRegister DestReg, MCRegister TmpReg,
140-
const MCExpr *Symbol, RISCVMCExpr::Specifier VKHi,
140+
const MCExpr *Symbol, RISCV::Specifier VKHi,
141141
unsigned SecondOpcode, SMLoc IDLoc, MCStreamer &Out);
142142

143143
// Helper to emit pseudo instruction "lla" used in PC-rel addressing.
@@ -295,8 +295,7 @@ class RISCVAsmParser : public MCTargetAsmParser {
295295
#undef GET_OPERAND_DIAGNOSTIC_TYPES
296296
};
297297

298-
static bool classifySymbolRef(const MCExpr *Expr,
299-
RISCVMCExpr::Specifier &Kind);
298+
static bool classifySymbolRef(const MCExpr *Expr, RISCV::Specifier &Kind);
300299
static bool isSymbolDiff(const MCExpr *Expr);
301300

302301
RISCVAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
@@ -544,7 +543,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
544543
if (evaluateConstantImm(getImm(), Imm))
545544
return isShiftedInt<N - 1, 1>(fixImmediateForRV32(Imm, isRV64Imm()));
546545

547-
RISCVMCExpr::Specifier VK = RISCV::S_None;
546+
RISCV::Specifier VK = RISCV::S_None;
548547
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
549548
VK == RISCV::S_None;
550549
}
@@ -559,7 +558,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
559558
if (evaluateConstantImm(getImm(), Imm))
560559
return isInt<N>(fixImmediateForRV32(Imm, isRV64Imm()));
561560

562-
RISCVMCExpr::Specifier VK = RISCV::S_None;
561+
RISCV::Specifier VK = RISCV::S_None;
563562
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
564563
VK == RISCV::S_None;
565564
}
@@ -572,7 +571,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
572571
if (!isImm() || evaluateConstantImm(getImm(), Imm))
573572
return false;
574573

575-
RISCVMCExpr::Specifier VK = RISCV::S_None;
574+
RISCV::Specifier VK = RISCV::S_None;
576575
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
577576
VK == RISCV::S_None;
578577
}
@@ -583,7 +582,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
583582
if (!isImm() || evaluateConstantImm(getImm(), Imm))
584583
return false;
585584

586-
RISCVMCExpr::Specifier VK = RISCV::S_None;
585+
RISCV::Specifier VK = RISCV::S_None;
587586
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
588587
VK == ELF::R_RISCV_CALL_PLT;
589588
}
@@ -594,7 +593,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
594593
if (!isImm() || evaluateConstantImm(getImm(), Imm))
595594
return false;
596595

597-
RISCVMCExpr::Specifier VK = RISCV::S_None;
596+
RISCV::Specifier VK = RISCV::S_None;
598597
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
599598
VK == ELF::R_RISCV_CALL_PLT;
600599
}
@@ -605,7 +604,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
605604
if (!isImm() || evaluateConstantImm(getImm(), Imm))
606605
return false;
607606

608-
RISCVMCExpr::Specifier VK = RISCV::S_None;
607+
RISCV::Specifier VK = RISCV::S_None;
609608
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
610609
VK == ELF::R_RISCV_TPREL_ADD;
611610
}
@@ -616,7 +615,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
616615
if (!isImm() || evaluateConstantImm(getImm(), Imm))
617616
return false;
618617

619-
RISCVMCExpr::Specifier VK = RISCV::S_None;
618+
RISCV::Specifier VK = RISCV::S_None;
620619
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
621620
VK == ELF::R_RISCV_TLSDESC_CALL;
622621
}
@@ -870,7 +869,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
870869
if (evaluateConstantImm(getImm(), Imm))
871870
return isInt<12>(fixImmediateForRV32(Imm, isRV64Imm()));
872871

873-
RISCVMCExpr::Specifier VK = RISCV::S_None;
872+
RISCV::Specifier VK = RISCV::S_None;
874873
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
875874
(VK == RISCV::S_LO || VK == RISCV::S_PCREL_LO ||
876875
VK == RISCV::S_TPREL_LO || VK == ELF::R_RISCV_TLSDESC_LOAD_LO12 ||
@@ -902,7 +901,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
902901
if (evaluateConstantImm(getImm(), Imm))
903902
return isInt<20>(fixImmediateForRV32(Imm, isRV64Imm()));
904903

905-
RISCVMCExpr::Specifier VK = RISCV::S_None;
904+
RISCV::Specifier VK = RISCV::S_None;
906905
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
907906
VK == RISCV::S_QC_ABS20;
908907
}
@@ -915,7 +914,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
915914
if (evaluateConstantImm(getImm(), Imm))
916915
return isUInt<20>(Imm);
917916

918-
RISCVMCExpr::Specifier VK = RISCV::S_None;
917+
RISCV::Specifier VK = RISCV::S_None;
919918
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
920919
(VK == ELF::R_RISCV_HI20 || VK == ELF::R_RISCV_TPREL_HI20);
921920
}
@@ -928,7 +927,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
928927
if (evaluateConstantImm(getImm(), Imm))
929928
return isUInt<20>(Imm);
930929

931-
RISCVMCExpr::Specifier VK = RISCV::S_None;
930+
RISCV::Specifier VK = RISCV::S_None;
932931
return RISCVAsmParser::classifySymbolRef(getImm(), VK) &&
933932
(VK == ELF::R_RISCV_PCREL_HI20 || VK == ELF::R_RISCV_GOT_HI20 ||
934933
VK == ELF::R_RISCV_TLS_GOT_HI20 || VK == ELF::R_RISCV_TLS_GD_HI20 ||
@@ -2099,7 +2098,7 @@ bool RISCVAsmParser::parseExprWithSpecifier(const MCExpr *&Res, SMLoc &E) {
20992098
if (getParser().parseParenExpression(SubExpr, E))
21002099
return true;
21012100

2102-
Res = RISCVMCExpr::create(SubExpr, Spec, getContext());
2101+
Res = MCSpecifierExpr::create(SubExpr, Spec, getContext());
21032102
return false;
21042103
}
21052104

@@ -2183,11 +2182,11 @@ ParseStatus RISCVAsmParser::parseCallSymbol(OperandVector &Operands) {
21832182
}
21842183

21852184
SMLoc E = SMLoc::getFromPointer(S.getPointer() + Identifier.size());
2186-
RISCVMCExpr::Specifier Kind = ELF::R_RISCV_CALL_PLT;
2185+
RISCV::Specifier Kind = ELF::R_RISCV_CALL_PLT;
21872186

21882187
MCSymbol *Sym = getContext().getOrCreateSymbol(Identifier);
21892188
Res = MCSymbolRefExpr::create(Sym, getContext());
2190-
Res = RISCVMCExpr::create(Res, Kind, getContext());
2189+
Res = MCSpecifierExpr::create(Res, Kind, getContext());
21912190
Operands.push_back(RISCVOperand::createImm(Res, S, E, isRV64()));
21922191
return ParseStatus::Success;
21932192
}
@@ -2203,7 +2202,7 @@ ParseStatus RISCVAsmParser::parsePseudoJumpSymbol(OperandVector &Operands) {
22032202
if (Res->getKind() != MCExpr::ExprKind::SymbolRef)
22042203
return Error(S, "operand must be a valid jump target");
22052204

2206-
Res = RISCVMCExpr::create(Res, ELF::R_RISCV_CALL_PLT, getContext());
2205+
Res = MCSpecifierExpr::create(Res, ELF::R_RISCV_CALL_PLT, getContext());
22072206
Operands.push_back(RISCVOperand::createImm(Res, S, E, isRV64()));
22082207
return ParseStatus::Success;
22092208
}
@@ -2918,10 +2917,9 @@ bool RISCVAsmParser::parseInstruction(ParseInstructionInfo &Info,
29182917
}
29192918

29202919
bool RISCVAsmParser::classifySymbolRef(const MCExpr *Expr,
2921-
RISCVMCExpr::Specifier &Kind) {
2920+
RISCV::Specifier &Kind) {
29222921
Kind = RISCV::S_None;
2923-
2924-
if (const RISCVMCExpr *RE = dyn_cast<RISCVMCExpr>(Expr)) {
2922+
if (const auto *RE = dyn_cast<MCSpecifierExpr>(Expr)) {
29252923
Kind = RE->getSpecifier();
29262924
Expr = RE->getSubExpr();
29272925
}
@@ -3434,7 +3432,7 @@ void RISCVAsmParser::emitLoadImm(MCRegister DestReg, int64_t Value,
34343432

34353433
void RISCVAsmParser::emitAuipcInstPair(MCRegister DestReg, MCRegister TmpReg,
34363434
const MCExpr *Symbol,
3437-
RISCVMCExpr::Specifier VKHi,
3435+
RISCV::Specifier VKHi,
34383436
unsigned SecondOpcode, SMLoc IDLoc,
34393437
MCStreamer &Out) {
34403438
// A pair of instructions for PC-relative addressing; expands to
@@ -3445,11 +3443,11 @@ void RISCVAsmParser::emitAuipcInstPair(MCRegister DestReg, MCRegister TmpReg,
34453443
MCSymbol *TmpLabel = Ctx.createNamedTempSymbol("pcrel_hi");
34463444
Out.emitLabel(TmpLabel);
34473445

3448-
const RISCVMCExpr *SymbolHi = RISCVMCExpr::create(Symbol, VKHi, Ctx);
3446+
const auto *SymbolHi = MCSpecifierExpr::create(Symbol, VKHi, Ctx);
34493447
emitToStreamer(Out,
34503448
MCInstBuilder(RISCV::AUIPC).addReg(TmpReg).addExpr(SymbolHi));
34513449

3452-
const MCExpr *RefToLinkTmpLabel = RISCVMCExpr::create(
3450+
const MCExpr *RefToLinkTmpLabel = MCSpecifierExpr::create(
34533451
MCSymbolRefExpr::create(TmpLabel, Ctx), RISCV::S_PCREL_LO, Ctx);
34543452

34553453
emitToStreamer(Out, MCInstBuilder(SecondOpcode)

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCAsmInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const MCExpr *RISCVMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
4444
MCContext &Ctx = Streamer.getContext();
4545
const MCExpr *ME = MCSymbolRefExpr::create(Sym, Ctx);
4646
assert(Encoding & dwarf::DW_EH_PE_sdata4 && "Unexpected encoding");
47-
return RISCVMCExpr::create(ME, ELF::R_RISCV_32_PCREL, Ctx);
47+
return MCSpecifierExpr::create(ME, ELF::R_RISCV_32_PCREL, Ctx);
4848
}
4949

5050
void RISCVMCAsmInfo::printSpecifierExpr(raw_ostream &OS,

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCAsmInfo.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVMCASMINFO_H
1414
#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVMCASMINFO_H
1515

16-
#include "RISCVMCExpr.h"
1716
#include "llvm/MC/MCAsmInfoELF.h"
1817
#include "llvm/MC/MCFixup.h"
1918

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void RISCVMCCodeEmitter::expandTLSDESCCall(const MCInst &MI,
177177
MCOperand SrcSymbol = MI.getOperand(3);
178178
assert(SrcSymbol.isExpr() &&
179179
"Expected expression as first input to TLSDESCCALL");
180-
const RISCVMCExpr *Expr = dyn_cast<RISCVMCExpr>(SrcSymbol.getExpr());
180+
const auto *Expr = dyn_cast<MCSpecifierExpr>(SrcSymbol.getExpr());
181181
MCRegister Link = MI.getOperand(0).getReg();
182182
MCRegister Dest = MI.getOperand(1).getReg();
183183
int64_t Imm = MI.getOperand(2).getImm();
@@ -205,7 +205,7 @@ void RISCVMCCodeEmitter::expandAddTPRel(const MCInst &MI,
205205
assert(SrcSymbol.isExpr() &&
206206
"Expected expression as third input to TP-relative add");
207207

208-
const RISCVMCExpr *Expr = dyn_cast<RISCVMCExpr>(SrcSymbol.getExpr());
208+
const auto *Expr = dyn_cast<MCSpecifierExpr>(SrcSymbol.getExpr());
209209
assert(Expr && Expr->getSpecifier() == ELF::R_RISCV_TPREL_ADD &&
210210
"Expected tprel_add relocation on TP-relative symbol");
211211

@@ -566,7 +566,7 @@ uint64_t RISCVMCCodeEmitter::getImmOpValue(const MCInst &MI, unsigned OpNo,
566566
unsigned FixupKind = RISCV::fixup_riscv_invalid;
567567
bool RelaxCandidate = false;
568568
if (Kind == MCExpr::Specifier) {
569-
const RISCVMCExpr *RVExpr = cast<RISCVMCExpr>(Expr);
569+
const auto *RVExpr = cast<MCSpecifierExpr>(Expr);
570570
FixupKind = RVExpr->getSpecifier();
571571
switch (RVExpr->getSpecifier()) {
572572
default:

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313

14-
#include "RISCVMCExpr.h"
1514
#include "MCTargetDesc/RISCVAsmBackend.h"
1615
#include "MCTargetDesc/RISCVMCAsmInfo.h"
1716
#include "RISCVFixupKinds.h"
@@ -27,11 +26,6 @@ using namespace llvm;
2726

2827
#define DEBUG_TYPE "riscvmcexpr"
2928

30-
const RISCVMCExpr *RISCVMCExpr::create(const MCExpr *Expr, Specifier S,
31-
MCContext &Ctx) {
32-
return new (Ctx) RISCVMCExpr(Expr, S);
33-
}
34-
3529
RISCV::Specifier RISCV::parseSpecifierName(StringRef name) {
3630
return StringSwitch<RISCV::Specifier>(name)
3731
.Case("lo", RISCV::S_LO)

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)