[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