[llvm] 43397e5 - LoongArchMCCodeEmitter: Set PCRel at fixup creation
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 16:18:43 PDT 2025
Author: Fangrui Song
Date: 2025-07-04T16:18:39-07:00
New Revision: 43397e5fe3debd779d82ee13a685113b41eb8ccf
URL: https://github.com/llvm/llvm-project/commit/43397e5fe3debd779d82ee13a685113b41eb8ccf
DIFF: https://github.com/llvm/llvm-project/commit/43397e5fe3debd779d82ee13a685113b41eb8ccf.diff
LOG: LoongArchMCCodeEmitter: Set PCRel at fixup creation
Avoid reliance on the MCAssembler::evaluateFixup workaround that checks
MCFixupKindInfo::FKF_IsPCRel. Additionally, standardize how fixups are
appended. This helper will facilitate future fixup data structure
optimizations.
Added:
Modified:
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
index 4a9d56160b812..98e5eff652b55 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
@@ -57,9 +57,9 @@ MCFixupKindInfo LoongArchAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
// LoongArchFixupKinds.h.
//
// {name, offset, bits, flags}
- {"fixup_loongarch_b16", 10, 16, MCFixupKindInfo::FKF_IsPCRel},
- {"fixup_loongarch_b21", 0, 26, MCFixupKindInfo::FKF_IsPCRel},
- {"fixup_loongarch_b26", 0, 26, MCFixupKindInfo::FKF_IsPCRel},
+ {"fixup_loongarch_b16", 10, 16, 0},
+ {"fixup_loongarch_b21", 0, 26, 0},
+ {"fixup_loongarch_b26", 0, 26, 0},
{"fixup_loongarch_abs_hi20", 5, 20, 0},
{"fixup_loongarch_abs_lo12", 10, 12, 0},
{"fixup_loongarch_abs64_lo20", 5, 20, 0},
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
index 970efb01c40d5..b7ead5e61ab81 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
@@ -97,6 +97,18 @@ class LoongArchMCCodeEmitter : public MCCodeEmitter {
};
} // end namespace
+static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
+ const MCExpr *Value, uint16_t Kind) {
+ bool PCRel = false;
+ switch (Kind) {
+ case LoongArch::fixup_loongarch_b16:
+ case LoongArch::fixup_loongarch_b21:
+ case LoongArch::fixup_loongarch_b26:
+ PCRel = true;
+ }
+ Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
+}
+
unsigned
LoongArchMCCodeEmitter::getMachineOpValue(const MCInst &MI, const MCOperand &MO,
SmallVectorImpl<MCFixup> &Fixups,
@@ -195,7 +207,7 @@ LoongArchMCCodeEmitter::getExprOpValue(const MCInst &MI, const MCOperand &MO,
assert(FixupKind != LoongArch::fixup_loongarch_invalid &&
"Unhandled expression!");
- Fixups.push_back(MCFixup::create(0, Expr, MCFixupKind(FixupKind)));
+ addFixup(Fixups, 0, Expr, FixupKind);
// If linker relaxation is enabled and supported by this relocation, set
// a bit so that if fixup is unresolved, a R_LARCH_RELAX relocation will be
// appended.
@@ -248,7 +260,7 @@ void LoongArchMCCodeEmitter::expandAddTPRel(const MCInst &MI,
"Expected %le_add_r relocation on TP-relative symbol");
// Emit the correct %le_add_r relocation for the symbol.
- Fixups.push_back(MCFixup::create(0, Expr, ELF::R_LARCH_TLS_LE_ADD_R));
+ addFixup(Fixups, 0, Expr, ELF::R_LARCH_TLS_LE_ADD_R);
if (STI.hasFeature(LoongArch::FeatureRelax))
Fixups.back().setLinkerRelaxable();
More information about the llvm-commits
mailing list