From 532facc78e075255afde69f2d86f26e4d4dd4c7f Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 7 Jun 2025 23:32:18 -0700 Subject: [PATCH] ARMMCExpr: Migrate to MCSpecifierExpr --- .../Target/ARM/MCTargetDesc/ARMAsmBackend.cpp | 4 +-- .../ARM/MCTargetDesc/ARMELFStreamer.cpp | 2 +- .../ARM/MCTargetDesc/ARMMCCodeEmitter.cpp | 2 +- .../lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp | 4 --- llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h | 34 +++---------------- 5 files changed, 8 insertions(+), 38 deletions(-) diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp index 075fe8687b5a..a7320eea80b0 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -619,7 +619,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm, // Offset by 8 just as above. if (const MCSymbolRefExpr *SRE = dyn_cast(Fixup.getValue())) - if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL) + if (SRE->getSpecifier() == ARMMCExpr::VK_TLSCALL) return 0; return 0xffffff & (Value >> 2); case ARM::fixup_t2_uncondbranch: { @@ -746,7 +746,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm, uint32_t offset = (Value - 4) >> 2; if (const MCSymbolRefExpr *SRE = dyn_cast(Fixup.getValue())) - if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL) + if (SRE->getSpecifier() == ARMMCExpr::VK_TLSCALL) offset = 0; uint32_t signBit = (offset & 0x400000) >> 22; uint32_t I1Bit = (offset & 0x200000) >> 21; diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index 7884b10a48a9..49b89cad6d47 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -590,7 +590,7 @@ public: /// necessary. void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override { if (const MCSymbolRefExpr *SRE = dyn_cast_or_null(Value)) { - if (getSpecifier(SRE) == ARMMCExpr::VK_SBREL && !(Size == 4)) { + if (SRE->getSpecifier() == ARMMCExpr::VK_SBREL && !(Size == 4)) { getContext().reportError(Loc, "relocated expression must be 32-bit"); return; } diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp index 7fa4baac9970..e79cdbde62ca 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp @@ -1191,7 +1191,7 @@ uint32_t ARMMCCodeEmitter::getHiLoImmOpValue(const MCInst &MI, unsigned OpIdx, // :lower0_7: assembly prefixes. const MCExpr *E = MO.getExpr(); MCFixupKind Kind; - if (E->getKind() == MCExpr::Target) { + if (E->getKind() == MCExpr::Specifier) { const ARMMCExpr *ARM16Expr = cast(E); E = ARM16Expr->getSubExpr(); diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp index 6230491a7b01..b5e17e3c2da0 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp @@ -48,7 +48,3 @@ void ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { if (Expr->getKind() != MCExpr::SymbolRef) OS << ')'; } - -void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { - Streamer.visitUsedExpr(*getSubExpr()); -} diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h index 9b959ce12f64..bcd92de3434a 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h @@ -13,9 +13,10 @@ namespace llvm { -class ARMMCExpr : public MCTargetExpr { +class ARMMCExpr : public MCSpecifierExpr { public: - enum Specifier { + using Specifier = uint16_t; + enum { VK_None, VK_HI16 = MCSymbolRefExpr::FirstTargetSpecifier, // The R_ARM_MOVT_ABS relocation @@ -57,16 +58,10 @@ public: }; private: - const Specifier specifier; - const MCExpr *Expr; - explicit ARMMCExpr(Specifier S, const MCExpr *Expr) - : specifier(S), Expr(Expr) {} + : MCSpecifierExpr(Expr, S) {} public: - /// @name Construction - /// @{ - static const ARMMCExpr *create(Specifier S, const MCExpr *Expr, MCContext &Ctx); @@ -94,33 +89,12 @@ public: return create(VK_LO_0_7, Expr, Ctx); } - /// @} - /// @name Accessors - /// @{ - - Specifier getSpecifier() const { return specifier; } - 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 { return false; } - 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 inline ARMMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) { - return ARMMCExpr::Specifier(SRE->getKind()); -} } // end namespace llvm #endif