From 38658b54b244ced1eccbf73b1342d064524501b0 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sun, 8 Jun 2025 00:26:26 -0700 Subject: [PATCH] LanaiMCExpr: Migrate to MCSpecifierExpr --- .../Target/Lanai/AsmParser/LanaiAsmParser.cpp | 34 +++++++++---------- llvm/lib/Target/Lanai/LanaiMCInstLower.cpp | 2 +- .../Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp | 2 +- .../Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp | 16 ++------- .../Target/Lanai/MCTargetDesc/LanaiMCExpr.h | 29 +++------------- 5 files changed, 26 insertions(+), 57 deletions(-) diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp index 78b3d163bfbb..b2fcd7af0733 100644 --- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp +++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp @@ -232,13 +232,13 @@ public: // Symbolic reference expression if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(Imm.Value)) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI; // Binary expression if (const MCBinaryExpr *BinaryExpr = dyn_cast(Imm.Value)) if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(BinaryExpr->getLHS())) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI; return false; } @@ -269,13 +269,13 @@ public: // Symbolic reference expression if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(Imm.Value)) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO; // Binary expression if (const MCBinaryExpr *BinaryExpr = dyn_cast(Imm.Value)) if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(BinaryExpr->getLHS())) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO; return false; } @@ -293,13 +293,13 @@ public: // Symbolic reference expression if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(Imm.Value)) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO; // Binary expression if (const MCBinaryExpr *BinaryExpr = dyn_cast(Imm.Value)) if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(BinaryExpr->getLHS())) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO; return false; } @@ -340,7 +340,7 @@ public: // Symbolic reference expression if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(Imm.Value)) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None; if (const MCSymbolRefExpr *SymbolRefExpr = dyn_cast(Imm.Value)) { return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None; @@ -350,7 +350,7 @@ public: if (const MCBinaryExpr *BinaryExpr = dyn_cast(Imm.Value)) { if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(BinaryExpr->getLHS())) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None; if (const MCSymbolRefExpr *SymbolRefExpr = dyn_cast(BinaryExpr->getLHS())) return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None; @@ -468,14 +468,14 @@ public: #ifndef NDEBUG const LanaiMCExpr *SymbolRefExpr = dyn_cast(getImm()); assert(SymbolRefExpr && - SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO); + SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO); #endif Inst.addOperand(MCOperand::createExpr(getImm())); } else if (isa(getImm())) { #ifndef NDEBUG const MCBinaryExpr *BinaryExpr = dyn_cast(getImm()); assert(BinaryExpr && isa(BinaryExpr->getLHS()) && - cast(BinaryExpr->getLHS())->getKind() == + cast(BinaryExpr->getLHS())->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO); #endif Inst.addOperand(MCOperand::createExpr(getImm())); @@ -499,14 +499,14 @@ public: #ifndef NDEBUG const LanaiMCExpr *SymbolRefExpr = dyn_cast(getImm()); assert(SymbolRefExpr && - SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI); + SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI); #endif Inst.addOperand(MCOperand::createExpr(getImm())); } else if (isa(getImm())) { #ifndef NDEBUG const MCBinaryExpr *BinaryExpr = dyn_cast(getImm()); assert(BinaryExpr && isa(BinaryExpr->getLHS()) && - cast(BinaryExpr->getLHS())->getKind() == + cast(BinaryExpr->getLHS())->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI); #endif Inst.addOperand(MCOperand::createExpr(getImm())); @@ -530,7 +530,7 @@ public: #ifndef NDEBUG const LanaiMCExpr *SymbolRefExpr = dyn_cast(getImm()); assert(SymbolRefExpr && - SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None); + SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None); #endif Inst.addOperand(MCOperand::createExpr(getImm())); } else if (isa(getImm())) { @@ -545,7 +545,7 @@ public: #ifndef NDEBUG const MCBinaryExpr *BinaryExpr = dyn_cast(getImm()); assert(BinaryExpr && isa(BinaryExpr->getLHS()) && - cast(BinaryExpr->getLHS())->getKind() == + cast(BinaryExpr->getLHS())->getSpecifier() == LanaiMCExpr::VK_Lanai_None); #endif Inst.addOperand(MCOperand::createExpr(getImm())); @@ -737,7 +737,7 @@ std::unique_ptr LanaiAsmParser::parseIdentifier() { SMLoc Start = Parser.getTok().getLoc(); SMLoc End = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1); const MCExpr *Res, *RHS = nullptr; - LanaiMCExpr::VariantKind Kind = LanaiMCExpr::VK_Lanai_None; + LanaiMCExpr::Spec Kind = LanaiMCExpr::VK_Lanai_None; if (Lexer.getKind() != AsmToken::Identifier) return nullptr; @@ -866,7 +866,7 @@ bool shouldBeSls(const LanaiOperand &Op) { // The instruction should be encoded as an SLS if the operand is a symbolic // reference with no variant. if (const LanaiMCExpr *SymbolRefExpr = dyn_cast(Op.getImm())) - return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None; + return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None; // The instruction should be encoded as an SLS if the operand is a binary // expression with the left-hand side being a symbolic reference with no // variant. @@ -874,7 +874,7 @@ bool shouldBeSls(const LanaiOperand &Op) { const LanaiMCExpr *LHSSymbolRefExpr = dyn_cast(BinaryExpr->getLHS()); return (LHSSymbolRefExpr && - LHSSymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None); + LHSSymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None); } return false; } diff --git a/llvm/lib/Target/Lanai/LanaiMCInstLower.cpp b/llvm/lib/Target/Lanai/LanaiMCInstLower.cpp index c2fba5dcd89a..21b327fd8f7c 100644 --- a/llvm/lib/Target/Lanai/LanaiMCInstLower.cpp +++ b/llvm/lib/Target/Lanai/LanaiMCInstLower.cpp @@ -64,7 +64,7 @@ LanaiMCInstLower::GetConstantPoolIndexSymbol(const MachineOperand &MO) const { MCOperand LanaiMCInstLower::LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const { - LanaiMCExpr::VariantKind Kind; + LanaiMCExpr::Spec Kind; switch (MO.getTargetFlags()) { case LanaiII::MO_NO_FLAG: diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp index 7ddfac85760d..779c83e5b3f2 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp @@ -90,7 +90,7 @@ static Lanai::Fixups FixupKind(const MCExpr *Expr) { if (isa(Expr)) return Lanai::FIXUP_LANAI_21; if (const LanaiMCExpr *McExpr = dyn_cast(Expr)) { - LanaiMCExpr::VariantKind ExprKind = McExpr->getKind(); + LanaiMCExpr::Spec ExprKind = McExpr->getSpecifier(); switch (ExprKind) { case LanaiMCExpr::VK_Lanai_None: return Lanai::FIXUP_LANAI_21; diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp index fced12328628..eec1b7f482f1 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp @@ -14,9 +14,9 @@ using namespace llvm; #define DEBUG_TYPE "lanaimcexpr" -const LanaiMCExpr *LanaiMCExpr::create(VariantKind Kind, const MCExpr *Expr, +const LanaiMCExpr *LanaiMCExpr::create(Spec S, const MCExpr *Expr, MCContext &Ctx) { - return new (Ctx) LanaiMCExpr(Kind, Expr); + return new (Ctx) LanaiMCExpr(Expr, S); } void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { @@ -41,15 +41,3 @@ void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { Expr->print(OS, MAI); OS << ')'; } - -void LanaiMCExpr::visitUsedExpr(MCStreamer &Streamer) const { - Streamer.visitUsedExpr(*getSubExpr()); -} - -bool LanaiMCExpr::evaluateAsRelocatableImpl(MCValue &Res, - const MCAssembler *Asm) const { - if (!getSubExpr()->evaluateAsRelocatable(Res, Asm)) - return false; - Res.setSpecifier(specifier); - return true; -} diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h index 3543fe020f81..90f8a3e5bbd5 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h @@ -14,38 +14,19 @@ namespace llvm { -class LanaiMCExpr : public MCTargetExpr { +class LanaiMCExpr : public MCSpecifierExpr { public: - enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO }; + using Spec = MCSpecifierExpr::Spec; + enum { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO }; private: - const VariantKind specifier; - const MCExpr *Expr; - - explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr) - : specifier(Kind), Expr(Expr) {} + explicit LanaiMCExpr(const MCExpr *Expr, Spec S) : MCSpecifierExpr(Expr, S) {} public: - static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr, + static const LanaiMCExpr *create(Spec Kind, const MCExpr *Expr, MCContext &Ctx); - // Returns the kind of this expression. - VariantKind getKind() const { return specifier; } - - // Returns the child of this expression. - const MCExpr *getSubExpr() const { return Expr; } - void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override; - bool evaluateAsRelocatableImpl(MCValue &Res, - const MCAssembler *Asm) const override; - void visitUsedExpr(MCStreamer &Streamer) const override; - MCFragment *findAssociatedFragment() const override { - return getSubExpr()->findAssociatedFragment(); - } - - static bool classof(const MCExpr *E) { - return E->getKind() == MCExpr::Target; - } }; } // end namespace llvm