[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