[llvm] 13b4a09 - Sparc: Move H44/M44/L44 computation back to adjustFixupValue

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon May 5 09:25:20 PDT 2025


Author: Fangrui Song
Date: 2025-05-05T09:25:15-07:00
New Revision: 13b4a097a887142687346005a72814abff5a8f7b

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

LOG: Sparc: Move H44/M44/L44 computation back to adjustFixupValue

Essentially revert the evaluateAsRelocatableImpl part from
f39696e7dee4f1dce8c10d2b17f987643c480895. Ensure that absolute
relocation evaluation is in one place. SparcAsmBackend.cpp enables
better diagnostics if needed.

Added: 
    

Modified: 
    llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
    llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
index b6e5893d318bf..3ea8bede91ea4 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
@@ -68,6 +68,13 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
   case ELF::R_SPARC_LO10:
     return Value & 0x3ff;
 
+  case ELF::R_SPARC_H44:
+    return (Value >> 22) & 0x3fffff;
+  case ELF::R_SPARC_M44:
+    return (Value >> 12) & 0x3ff;
+  case ELF::R_SPARC_L44:
+    return Value & 0xfff;
+
   case ELF::R_SPARC_HH22:
     return (Value >> 42) & 0x3fffff;
   case ELF::R_SPARC_HM10:

diff  --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
index 983fe03449a73..a5a98844a7162 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp
@@ -141,26 +141,6 @@ bool SparcMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
   if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
     return false;
 
-  if (Res.isAbsolute()) {
-    std::optional<int64_t> V;
-    auto C = (uint64_t)Res.getConstant();
-    switch (uint16_t(specifier)) {
-    case ELF::R_SPARC_H44:
-      V = (C >> 22) & 0x3fffff;
-      break;
-    case ELF::R_SPARC_M44:
-      V = (C >> 12) & 0x3ff;
-      break;
-    case ELF::R_SPARC_L44:
-      V = C & 0xfff;
-      break;
-    }
-    if (V) {
-      Res = MCValue::get(*V);
-      return true;
-    }
-  }
-
   Res.setSpecifier(specifier);
   return true;
 }


        


More information about the llvm-commits mailing list