Skip to content

Commit 38658b5

Browse files
committed
LanaiMCExpr: Migrate to MCSpecifierExpr
1 parent ef328e9 commit 38658b5

File tree

5 files changed

+26
-57
lines changed

5 files changed

+26
-57
lines changed

llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
232232

233233
// Symbolic reference expression
234234
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
235-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI;
235+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI;
236236

237237
// Binary expression
238238
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
239239
if (const LanaiMCExpr *SymbolRefExpr =
240240
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
241-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI;
241+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI;
242242

243243
return false;
244244
}
@@ -269,13 +269,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
269269

270270
// Symbolic reference expression
271271
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
272-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
272+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
273273

274274
// Binary expression
275275
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
276276
if (const LanaiMCExpr *SymbolRefExpr =
277277
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
278-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
278+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
279279

280280
return false;
281281
}
@@ -293,13 +293,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
293293

294294
// Symbolic reference expression
295295
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
296-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
296+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
297297

298298
// Binary expression
299299
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
300300
if (const LanaiMCExpr *SymbolRefExpr =
301301
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
302-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
302+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
303303

304304
return false;
305305
}
@@ -340,7 +340,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
340340

341341
// Symbolic reference expression
342342
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
343-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
343+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
344344
if (const MCSymbolRefExpr *SymbolRefExpr =
345345
dyn_cast<MCSymbolRefExpr>(Imm.Value)) {
346346
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
@@ -350,7 +350,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
350350
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value)) {
351351
if (const LanaiMCExpr *SymbolRefExpr =
352352
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
353-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
353+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
354354
if (const MCSymbolRefExpr *SymbolRefExpr =
355355
dyn_cast<MCSymbolRefExpr>(BinaryExpr->getLHS()))
356356
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
@@ -468,14 +468,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
468468
#ifndef NDEBUG
469469
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
470470
assert(SymbolRefExpr &&
471-
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO);
471+
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO);
472472
#endif
473473
Inst.addOperand(MCOperand::createExpr(getImm()));
474474
} else if (isa<MCBinaryExpr>(getImm())) {
475475
#ifndef NDEBUG
476476
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
477477
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
478-
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
478+
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
479479
LanaiMCExpr::VK_Lanai_ABS_LO);
480480
#endif
481481
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -499,14 +499,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
499499
#ifndef NDEBUG
500500
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
501501
assert(SymbolRefExpr &&
502-
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI);
502+
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI);
503503
#endif
504504
Inst.addOperand(MCOperand::createExpr(getImm()));
505505
} else if (isa<MCBinaryExpr>(getImm())) {
506506
#ifndef NDEBUG
507507
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
508508
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
509-
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
509+
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
510510
LanaiMCExpr::VK_Lanai_ABS_HI);
511511
#endif
512512
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -530,7 +530,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
530530
#ifndef NDEBUG
531531
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
532532
assert(SymbolRefExpr &&
533-
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None);
533+
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None);
534534
#endif
535535
Inst.addOperand(MCOperand::createExpr(getImm()));
536536
} else if (isa<MCSymbolRefExpr>(getImm())) {
@@ -545,7 +545,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
545545
#ifndef NDEBUG
546546
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
547547
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
548-
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
548+
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
549549
LanaiMCExpr::VK_Lanai_None);
550550
#endif
551551
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -737,7 +737,7 @@ std::unique_ptr<LanaiOperand> LanaiAsmParser::parseIdentifier() {
737737
SMLoc Start = Parser.getTok().getLoc();
738738
SMLoc End = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1);
739739
const MCExpr *Res, *RHS = nullptr;
740-
LanaiMCExpr::VariantKind Kind = LanaiMCExpr::VK_Lanai_None;
740+
LanaiMCExpr::Spec Kind = LanaiMCExpr::VK_Lanai_None;
741741

742742
if (Lexer.getKind() != AsmToken::Identifier)
743743
return nullptr;
@@ -866,15 +866,15 @@ bool shouldBeSls(const LanaiOperand &Op) {
866866
// The instruction should be encoded as an SLS if the operand is a symbolic
867867
// reference with no variant.
868868
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Op.getImm()))
869-
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
869+
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
870870
// The instruction should be encoded as an SLS if the operand is a binary
871871
// expression with the left-hand side being a symbolic reference with no
872872
// variant.
873873
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Op.getImm())) {
874874
const LanaiMCExpr *LHSSymbolRefExpr =
875875
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS());
876876
return (LHSSymbolRefExpr &&
877-
LHSSymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None);
877+
LHSSymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None);
878878
}
879879
return false;
880880
}

llvm/lib/Target/Lanai/LanaiMCInstLower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ LanaiMCInstLower::GetConstantPoolIndexSymbol(const MachineOperand &MO) const {
6464

6565
MCOperand LanaiMCInstLower::LowerSymbolOperand(const MachineOperand &MO,
6666
MCSymbol *Sym) const {
67-
LanaiMCExpr::VariantKind Kind;
67+
LanaiMCExpr::Spec Kind;
6868

6969
switch (MO.getTargetFlags()) {
7070
case LanaiII::MO_NO_FLAG:

llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static Lanai::Fixups FixupKind(const MCExpr *Expr) {
9090
if (isa<MCSymbolRefExpr>(Expr))
9191
return Lanai::FIXUP_LANAI_21;
9292
if (const LanaiMCExpr *McExpr = dyn_cast<LanaiMCExpr>(Expr)) {
93-
LanaiMCExpr::VariantKind ExprKind = McExpr->getKind();
93+
LanaiMCExpr::Spec ExprKind = McExpr->getSpecifier();
9494
switch (ExprKind) {
9595
case LanaiMCExpr::VK_Lanai_None:
9696
return Lanai::FIXUP_LANAI_21;

llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ using namespace llvm;
1414

1515
#define DEBUG_TYPE "lanaimcexpr"
1616

17-
const LanaiMCExpr *LanaiMCExpr::create(VariantKind Kind, const MCExpr *Expr,
17+
const LanaiMCExpr *LanaiMCExpr::create(Spec S, const MCExpr *Expr,
1818
MCContext &Ctx) {
19-
return new (Ctx) LanaiMCExpr(Kind, Expr);
19+
return new (Ctx) LanaiMCExpr(Expr, S);
2020
}
2121

2222
void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
@@ -41,15 +41,3 @@ void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
4141
Expr->print(OS, MAI);
4242
OS << ')';
4343
}
44-
45-
void LanaiMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
46-
Streamer.visitUsedExpr(*getSubExpr());
47-
}
48-
49-
bool LanaiMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
50-
const MCAssembler *Asm) const {
51-
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
52-
return false;
53-
Res.setSpecifier(specifier);
54-
return true;
55-
}

llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,19 @@
1414

1515
namespace llvm {
1616

17-
class LanaiMCExpr : public MCTargetExpr {
17+
class LanaiMCExpr : public MCSpecifierExpr {
1818
public:
19-
enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
19+
using Spec = MCSpecifierExpr::Spec;
20+
enum { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
2021

2122
private:
22-
const VariantKind specifier;
23-
const MCExpr *Expr;
24-
25-
explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr)
26-
: specifier(Kind), Expr(Expr) {}
23+
explicit LanaiMCExpr(const MCExpr *Expr, Spec S) : MCSpecifierExpr(Expr, S) {}
2724

2825
public:
29-
static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr,
26+
static const LanaiMCExpr *create(Spec Kind, const MCExpr *Expr,
3027
MCContext &Ctx);
3128

32-
// Returns the kind of this expression.
33-
VariantKind getKind() const { return specifier; }
34-
35-
// Returns the child of this expression.
36-
const MCExpr *getSubExpr() const { return Expr; }
37-
3829
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
39-
bool evaluateAsRelocatableImpl(MCValue &Res,
40-
const MCAssembler *Asm) const override;
41-
void visitUsedExpr(MCStreamer &Streamer) const override;
42-
MCFragment *findAssociatedFragment() const override {
43-
return getSubExpr()->findAssociatedFragment();
44-
}
45-
46-
static bool classof(const MCExpr *E) {
47-
return E->getKind() == MCExpr::Target;
48-
}
4930
};
5031
} // end namespace llvm
5132

0 commit comments

Comments
 (0)