[llvm] 7d500b1 - SPARC: Remove unneeded MCFixupKindInfo::FKF_IsPCRel

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 4 15:45:19 PDT 2025


Author: Fangrui Song
Date: 2025-07-04T15:45:14-07:00
New Revision: 7d500b115db5577c206f162b29e90811f1f66a1c

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

LOG: SPARC: Remove unneeded MCFixupKindInfo::FKF_IsPCRel

SPARC now sets PCRel at fixup creation and no longer needs to the
MCAssembler::evaluateFixup workaround that checks
MCFixupKindInfo::FKF_IsPCRel.

Added: 
    

Modified: 
    llvm/lib/MC/MCAssembler.cpp
    llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
    llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 4b7845335d822..7e6365a4574d2 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -161,9 +161,11 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, MCFixup &Fixup,
     return true;
   }
 
-  bool IsResolved = false;
+  // TODO: Require targets to set PCRel at fixup creation time.
   unsigned FixupFlags = getBackend().getFixupKindInfo(Fixup.getKind()).Flags;
-  bool IsPCRel = FixupFlags & MCFixupKindInfo::FKF_IsPCRel;
+  if (FixupFlags & MCFixupKindInfo::FKF_IsPCRel)
+    Fixup.setPCRel();
+  bool IsResolved = false;
   if (FixupFlags & MCFixupKindInfo::FKF_IsTarget) {
     IsResolved = getBackend().evaluateTargetFixup(Fixup, Target, Value);
   } else {
@@ -177,7 +179,7 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, MCFixup &Fixup,
 
     bool ShouldAlignPC =
         FixupFlags & MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
-    if (IsPCRel) {
+    if (Fixup.isPCRel()) {
       uint64_t Offset = getFragmentOffset(F) + Fixup.getOffset();
 
       // A number of ARM fixups in Thumb mode require that the effective PC
@@ -202,8 +204,6 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, MCFixup &Fixup,
 
   if (IsResolved && mc::isRelocRelocation(Fixup.getKind()))
     IsResolved = false;
-  if (IsPCRel)
-    Fixup.setPCRel();
   getBackend().applyFixup(F, Fixup, Target, Contents, Value, IsResolved);
   return true;
 }

diff  --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
index e6822399a5f3f..92b3ab8634ad7 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
@@ -182,15 +182,15 @@ std::optional<MCFixupKind> SparcAsmBackend::getFixupKind(StringRef Name) const {
 MCFixupKindInfo SparcAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
   // clang-format off
   const static MCFixupKindInfo InfosBE[Sparc::NumTargetFixupKinds] = {
-    // name                    offset bits  flags
-    { "fixup_sparc_call30",     2,     30,  MCFixupKindInfo::FKF_IsPCRel },
-    { "fixup_sparc_13",        19,     13,  0 },
+      // name                    offset bits flags
+      {"fixup_sparc_call30",     2,     30,  0},
+      {"fixup_sparc_13",        19,     13,  0},
   };
 
   const static MCFixupKindInfo InfosLE[Sparc::NumTargetFixupKinds] = {
-    // name                    offset bits  flags
-    { "fixup_sparc_call30",     0,     30,  MCFixupKindInfo::FKF_IsPCRel },
-    { "fixup_sparc_13",         0,     13,  0 },
+      // name                    offset bits flags
+      {"fixup_sparc_call30",     0,     30,  0},
+      {"fixup_sparc_13",         0,     13,  0},
   };
   // clang-format on
 
@@ -208,22 +208,22 @@ MCFixupKindInfo SparcAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
   MCFixupKindInfo Info{};
   switch (uint16_t(Kind)) {
   case ELF::R_SPARC_PC10:
-    Info = {"", 22, 10, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 22, 10, 0};
     break;
   case ELF::R_SPARC_PC22:
-    Info = {"", 10, 22, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 10, 22, 0};
     break;
   case ELF::R_SPARC_WDISP10:
-    Info = {"", 0, 32, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 0, 32, 0};
     break;
   case ELF::R_SPARC_WDISP16:
-    Info = {"", 0, 32, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 0, 32, 0};
     break;
   case ELF::R_SPARC_WDISP19:
-    Info = {"", 13, 19, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 13, 19, 0};
     break;
   case ELF::R_SPARC_WDISP22:
-    Info = {"", 10, 22, MCFixupKindInfo::FKF_IsPCRel};
+    Info = {"", 10, 22, 0};
     break;
 
   case ELF::R_SPARC_HI22:

diff  --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
index 40cc5fde5d777..2335853469467 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
@@ -101,6 +101,7 @@ static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
   case ELF::R_SPARC_WDISP16:
   case ELF::R_SPARC_WDISP19:
   case ELF::R_SPARC_WDISP22:
+  case Sparc::fixup_sparc_call30:
     PCRel = true;
   }
   Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));


        


More information about the llvm-commits mailing list