[llvm] 4a6b4d3 - RISCVMCExpr: Migrate to MCSpecifierExpr

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 7 22:14:33 PDT 2025


Author: Fangrui Song
Date: 2025-06-07T22:14:28-07:00
New Revision: 4a6b4d38943d391236afbc878477e5822685de97

URL: https://github.com/llvm/llvm-project/commit/4a6b4d38943d391236afbc878477e5822685de97
DIFF: https://github.com/llvm/llvm-project/commit/4a6b4d38943d391236afbc878477e5822685de97.diff

LOG: RISCVMCExpr: Migrate to MCSpecifierExpr

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
    llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp
    llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
    llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
index 378554adc803d..a0bf378f3c767 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
@@ -48,7 +48,6 @@ RISCVELFObjectWriter::~RISCVELFObjectWriter() = default;
 unsigned RISCVELFObjectWriter::getRelocType(const MCFixup &Fixup,
                                             const MCValue &Target,
                                             bool IsPCRel) const {
-  const MCExpr *Expr = Fixup.getValue();
   unsigned Kind = Fixup.getTargetKind();
   auto Spec = RISCVMCExpr::Specifier(Target.getSpecifier());
   switch (Spec) {
@@ -119,14 +118,11 @@ unsigned RISCVELFObjectWriter::getRelocType(const MCFixup &Fixup,
     reportError(Fixup.getLoc(), "2-byte data relocations not supported");
     return ELF::R_RISCV_NONE;
   case FK_Data_4:
-    if (Expr->getKind() == MCExpr::Target) {
-      auto Spec = cast<RISCVMCExpr>(Expr)->getSpecifier();
-      switch (Spec) {
-      case ELF::R_RISCV_32_PCREL:
-      case ELF::R_RISCV_GOT32_PCREL:
-      case ELF::R_RISCV_PLT32:
-        return Spec;
-      }
+    switch (Spec) {
+    case ELF::R_RISCV_32_PCREL:
+    case ELF::R_RISCV_GOT32_PCREL:
+    case ELF::R_RISCV_PLT32:
+      return Spec;
     }
     return ELF::R_RISCV_32;
   case FK_Data_8:

diff  --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp
index 9c3f398e05da9..dd5540038c437 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp
@@ -565,7 +565,7 @@ uint64_t RISCVMCCodeEmitter::getImmOpValue(const MCInst &MI, unsigned OpNo,
   MCExpr::ExprKind Kind = Expr->getKind();
   unsigned FixupKind = RISCV::fixup_riscv_invalid;
   bool RelaxCandidate = false;
-  if (Kind == MCExpr::Target) {
+  if (Kind == MCExpr::Specifier) {
     const RISCVMCExpr *RVExpr = cast<RISCVMCExpr>(Expr);
     FixupKind = RVExpr->getSpecifier();
     switch (RVExpr->getSpecifier()) {

diff  --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
index e4ccf50292315..f5f40ad44ac19 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
@@ -87,20 +87,6 @@ const MCFixup *RISCVMCExpr::getPCRelHiFixup(const MCFragment **DFOut) const {
   return nullptr;
 }
 
-bool RISCVMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
-                                            const MCAssembler *Asm) const {
-  if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
-    return false;
-  Res.setSpecifier(specifier);
-
-  // Custom fixup types are not valid with symbol 
diff erence expressions.
-  return !Res.getSubSym();
-}
-
-void RISCVMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
-  Streamer.visitUsedExpr(*getSubExpr());
-}
-
 std::optional<RISCVMCExpr::Specifier>
 RISCVMCExpr::getSpecifierForName(StringRef name) {
   return StringSwitch<std::optional<RISCVMCExpr::Specifier>>(name)

diff  --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h
index 917c59ab3961b..d3b4a94f2f281 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h
@@ -21,7 +21,7 @@ namespace llvm {
 
 class StringRef;
 
-class RISCVMCExpr : public MCTargetExpr {
+class RISCVMCExpr : public MCSpecifierExpr {
 public:
   using Specifier = uint16_t;
   // Specifiers mapping to relocation types below FirstTargetFixupKind are
@@ -38,20 +38,13 @@ class RISCVMCExpr : public MCTargetExpr {
   };
 
 private:
-  const MCExpr *Expr;
-  const Specifier specifier;
-
   explicit RISCVMCExpr(const MCExpr *Expr, Specifier S)
-      : Expr(Expr), specifier(S) {}
+      : MCSpecifierExpr(Expr, S) {}
 
 public:
   static const RISCVMCExpr *create(const MCExpr *Expr, Specifier S,
                                    MCContext &Ctx);
 
-  Specifier getSpecifier() const { return specifier; }
-
-  const MCExpr *getSubExpr() const { return Expr; }
-
   /// Get the corresponding PC-relative HI fixup that a VK_PCREL_LO
   /// points to, and optionally the fragment containing it.
   ///
@@ -60,16 +53,6 @@ class RISCVMCExpr : public MCTargetExpr {
   const MCFixup *getPCRelHiFixup(const MCFragment **DFOut) const;
 
   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;
-  }
 
   static std::optional<Specifier> getSpecifierForName(StringRef name);
   static StringRef getSpecifierName(Specifier Kind);


        


More information about the llvm-commits mailing list