[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