[llvm] 38658b5 - LanaiMCExpr: Migrate to MCSpecifierExpr
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 8 00:26:31 PDT 2025
Author: Fangrui Song
Date: 2025-06-08T00:26:26-07:00
New Revision: 38658b54b244ced1eccbf73b1342d064524501b0
URL: https://github.com/llvm/llvm-project/commit/38658b54b244ced1eccbf73b1342d064524501b0
DIFF: https://github.com/llvm/llvm-project/commit/38658b54b244ced1eccbf73b1342d064524501b0.diff
LOG: LanaiMCExpr: Migrate to MCSpecifierExpr
Added:
Modified:
llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
llvm/lib/Target/Lanai/LanaiMCInstLower.cpp
llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp
llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.cpp
llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCExpr.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
index 78b3d163bfbbc..b2fcd7af07331 100644
--- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
+++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
@@ -232,13 +232,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
// Symbolic reference expression
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(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<MCBinaryExpr>(Imm.Value))
if (const LanaiMCExpr *SymbolRefExpr =
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
- return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI;
+ return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI;
return false;
}
@@ -269,13 +269,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
// Symbolic reference expression
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(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<MCBinaryExpr>(Imm.Value))
if (const LanaiMCExpr *SymbolRefExpr =
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
- return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
+ return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
return false;
}
@@ -293,13 +293,13 @@ struct LanaiOperand : public MCParsedAsmOperand {
// Symbolic reference expression
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(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<MCBinaryExpr>(Imm.Value))
if (const LanaiMCExpr *SymbolRefExpr =
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
- return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
+ return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
return false;
}
@@ -340,7 +340,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
// Symbolic reference expression
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
- return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
+ return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
if (const MCSymbolRefExpr *SymbolRefExpr =
dyn_cast<MCSymbolRefExpr>(Imm.Value)) {
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
@@ -350,7 +350,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value)) {
if (const LanaiMCExpr *SymbolRefExpr =
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
- return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
+ return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
if (const MCSymbolRefExpr *SymbolRefExpr =
dyn_cast<MCSymbolRefExpr>(BinaryExpr->getLHS()))
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
@@ -468,14 +468,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
#ifndef NDEBUG
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(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<MCBinaryExpr>(getImm())) {
#ifndef NDEBUG
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
- cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
+ cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
LanaiMCExpr::VK_Lanai_ABS_LO);
#endif
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -499,14 +499,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
#ifndef NDEBUG
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(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<MCBinaryExpr>(getImm())) {
#ifndef NDEBUG
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
- cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
+ cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
LanaiMCExpr::VK_Lanai_ABS_HI);
#endif
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -530,7 +530,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
#ifndef NDEBUG
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
assert(SymbolRefExpr &&
- SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None);
+ SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None);
#endif
Inst.addOperand(MCOperand::createExpr(getImm()));
} else if (isa<MCSymbolRefExpr>(getImm())) {
@@ -545,7 +545,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
#ifndef NDEBUG
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
- cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
+ cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
LanaiMCExpr::VK_Lanai_None);
#endif
Inst.addOperand(MCOperand::createExpr(getImm()));
@@ -737,7 +737,7 @@ std::unique_ptr<LanaiOperand> 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<LanaiMCExpr>(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<LanaiMCExpr>(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 c2fba5dcd89a4..21b327fd8f7cd 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 7ddfac85760d8..779c83e5b3f2f 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<MCSymbolRefExpr>(Expr))
return Lanai::FIXUP_LANAI_21;
if (const LanaiMCExpr *McExpr = dyn_cast<LanaiMCExpr>(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 fced12328628e..eec1b7f482f18 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 3543fe020f816..90f8a3e5bbd59 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
More information about the llvm-commits
mailing list