[llvm] f02386d - Sparc: Don't build SparcMCExpr with a zero specifier

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sun May 4 14:37:08 PDT 2025


Author: Fangrui Song
Date: 2025-05-04T14:37:04-07:00
New Revision: f02386db26affa28eb050174f080567ca8d4b60f

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

LOG: Sparc: Don't build SparcMCExpr with a zero specifier

Added: 
    

Modified: 
    llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
    llvm/lib/Target/Sparc/SparcMCInstLower.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
index 3aaedef6120d8..e5a277ecabdd0 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
@@ -171,24 +171,15 @@ unsigned SparcMCCodeEmitter::
 getCallTargetOpValue(const MCInst &MI, unsigned OpNo,
                      SmallVectorImpl<MCFixup> &Fixups,
                      const MCSubtargetInfo &STI) const {
-  const MCOperand &MO = MI.getOperand(OpNo);
-  const MCExpr *Expr = MO.getExpr();
-  const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr);
-
   if (MI.getOpcode() == SP::TLS_CALL) {
     // No fixups for __tls_get_addr. Will emit for fixups for tls_symbol in
     // encodeInstruction.
-#ifndef NDEBUG
-    // Verify that the callee is actually __tls_get_addr.
-    assert(SExpr && SExpr->getSubExpr()->getKind() == MCExpr::SymbolRef &&
-           "Unexpected expression in TLS_CALL");
-    const MCSymbolRefExpr *SymExpr = cast<MCSymbolRefExpr>(SExpr->getSubExpr());
-    assert(SymExpr->getSymbol().getName() == "__tls_get_addr" &&
-           "Unexpected function for TLS_CALL");
-#endif
     return 0;
   }
 
+  const MCOperand &MO = MI.getOperand(OpNo);
+  const MCExpr *Expr = MO.getExpr();
+  auto *SExpr = cast<SparcMCExpr>(Expr);
   Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
   return 0;
 }

diff  --git a/llvm/lib/Target/Sparc/SparcMCInstLower.cpp b/llvm/lib/Target/Sparc/SparcMCInstLower.cpp
index 8b8d9d7f835ad..cfcb29d6a4d9f 100644
--- a/llvm/lib/Target/Sparc/SparcMCInstLower.cpp
+++ b/llvm/lib/Target/Sparc/SparcMCInstLower.cpp
@@ -56,10 +56,9 @@ static MCOperand LowerSymbolOperand(const MachineInstr *MI,
     break;
   }
 
-  const MCSymbolRefExpr *MCSym = MCSymbolRefExpr::create(Symbol,
-                                                         AP.OutContext);
-  const SparcMCExpr *expr = SparcMCExpr::create(Kind, MCSym,
-                                                AP.OutContext);
+  const MCExpr *expr = MCSymbolRefExpr::create(Symbol, AP.OutContext);
+  if (Kind)
+    expr = SparcMCExpr::create(Kind, expr, AP.OutContext);
   return MCOperand::createExpr(expr);
 }
 


        


More information about the llvm-commits mailing list