[llvm] 8eac7f5 - PPCMCExpr: Migrate to MCSpecifierExpr

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 7 23:01:34 PDT 2025


Author: Fangrui Song
Date: 2025-06-07T23:01:29-07:00
New Revision: 8eac7f5a81be00da3c47484fafad3498e5c0e617

URL: https://github.com/llvm/llvm-project/commit/8eac7f5a81be00da3c47484fafad3498e5c0e617
DIFF: https://github.com/llvm/llvm-project/commit/8eac7f5a81be00da3c47484fafad3498e5c0e617.diff

LOG: PPCMCExpr: Migrate to MCSpecifierExpr

Added: 
    

Modified: 
    llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index acf55a2143fc7..9d3d04e6b8add 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -37,9 +37,6 @@ DEFINE_PPC_REGCLASSES
 static int64_t
 EvaluateCRExpr(const MCExpr *E) {
   switch (E->getKind()) {
-  case MCExpr::Target:
-    return -1;
-
   case MCExpr::Constant: {
     int64_t Res = cast<MCConstantExpr>(E)->getValue();
     return Res < 0 ? -1 : Res;
@@ -88,6 +85,8 @@ EvaluateCRExpr(const MCExpr *E) {
     return Res < 0 ? -1 : Res;
   }
   case MCExpr::Specifier:
+    return -1;
+  case MCExpr::Target:
     llvm_unreachable("unused by this backend");
   }
 
@@ -1374,7 +1373,7 @@ const MCExpr *PPCAsmParser::extractSpecifier(const MCExpr *E,
   switch (E->getKind()) {
   case MCExpr::Constant:
     break;
-  case MCExpr::Target: {
+  case MCExpr::Specifier: {
     // Detect error but do not return a modified expression.
     auto *TE = cast<PPCMCExpr>(E);
     Spec = TE->getSpecifier();
@@ -1422,7 +1421,7 @@ const MCExpr *PPCAsmParser::extractSpecifier(const MCExpr *E,
       return MCBinaryExpr::create(BE->getOpcode(), LHS, RHS, Context);
     break;
   }
-  case MCExpr::Specifier:
+  case MCExpr::Target:
     llvm_unreachable("unused by this backend");
   }
 
@@ -1437,7 +1436,7 @@ bool PPCAsmParser::parseExpression(const MCExpr *&EVal) {
   if (getParser().parseExpression(EVal))
     return true;
 
-  auto Spec = PPCMCExpr::VK_None;
+  uint16_t Spec = PPCMCExpr::VK_None;
   const MCExpr *E = extractSpecifier(EVal, Spec);
   if (Spec != PPCMCExpr::VK_None)
     EVal = PPCMCExpr::create(Spec, E, getParser().getContext());

diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
index 376b0e7743234..728b6799f94dc 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
@@ -86,7 +86,3 @@ bool PPCMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
 
   return true;
 }
-
-void PPCMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
-  Streamer.visitUsedExpr(*getSubExpr());
-}

diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
index 19d35649ca36e..3d0511da2749f 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
@@ -15,9 +15,10 @@
 
 namespace llvm {
 
-class PPCMCExpr : public MCTargetExpr {
+class PPCMCExpr : public MCSpecifierExpr {
 public:
-  enum Specifier : uint8_t {
+  using Specifier = uint16_t;
+  enum {
     VK_None,
 
     VK_LO = MCSymbolRefExpr::FirstTargetSpecifier,
@@ -100,18 +101,12 @@ class PPCMCExpr : public MCTargetExpr {
   };
 
 private:
-  const Specifier specifier;
-  const MCExpr *Expr;
-
   std::optional<int64_t> evaluateAsInt64(int64_t Value) const;
 
   explicit PPCMCExpr(Specifier S, const MCExpr *Expr)
-      : specifier(S), Expr(Expr) {}
+      : MCSpecifierExpr(Expr, S) {}
 
 public:
-  /// @name Construction
-  /// @{
-
   static const PPCMCExpr *create(Specifier S, const MCExpr *Expr,
                                  MCContext &Ctx);
 
@@ -127,28 +122,11 @@ class PPCMCExpr : public MCTargetExpr {
     return create(VK_HA, 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;
-  void visitUsedExpr(MCStreamer &Streamer) const override;
-  MCFragment *findAssociatedFragment() const override {
-    return getSubExpr()->findAssociatedFragment();
-  }
 
   bool evaluateAsConstant(int64_t &Res) const;
-
-  static bool classof(const MCExpr *E) {
-    return E->getKind() == MCExpr::Target;
-  }
 };
 
 static inline PPCMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) {


        


More information about the llvm-commits mailing list