[llvm] 7d71a35 - MCFixup: Remove FK_PCRel_ from getKindForSize
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat May 24 12:02:23 PDT 2025
Author: Fangrui Song
Date: 2025-05-24T12:02:18-07:00
New Revision: 7d71a356582c3cdffdfc01be29e171b87e44badb
URL: https://github.com/llvm/llvm-project/commit/7d71a356582c3cdffdfc01be29e171b87e44badb
DIFF: https://github.com/llvm/llvm-project/commit/7d71a356582c3cdffdfc01be29e171b87e44badb.diff
LOG: MCFixup: Remove FK_PCRel_ from getKindForSize
Remove FK_PCRel_* kinds from the generic fixup list, as they are not
generic like FK_Data_*. In getRelocType, FK_PCRel_* can be replaced with
FK_Data_* by leveraging the IsPCRel argument. Their inclusion in the
generic kind list caused confusion for PowerPC, RISCV, and VE targets.
The X86/M68k uses can be implemented as target-specific fixups.
Added:
Modified:
llvm/include/llvm/MC/MCFixup.h
llvm/lib/MC/MCObjectStreamer.cpp
llvm/lib/MC/WasmObjectWriter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCFixup.h b/llvm/include/llvm/MC/MCFixup.h
index 85ae555f9326f..7575202eaec57 100644
--- a/llvm/include/llvm/MC/MCFixup.h
+++ b/llvm/include/llvm/MC/MCFixup.h
@@ -110,17 +110,17 @@ class MCFixup {
/// Return the generic fixup kind for a value with the given size. It
/// is an error to pass an unsupported size.
- static MCFixupKind getKindForSize(unsigned Size, bool IsPCRel) {
+ static MCFixupKind getDataKindForSize(unsigned Size) {
switch (Size) {
default: llvm_unreachable("Invalid generic fixup size!");
case 1:
- return IsPCRel ? FK_PCRel_1 : FK_Data_1;
+ return FK_Data_1;
case 2:
- return IsPCRel ? FK_PCRel_2 : FK_Data_2;
+ return FK_Data_2;
case 4:
- return IsPCRel ? FK_PCRel_4 : FK_Data_4;
+ return FK_Data_4;
case 8:
- return IsPCRel ? FK_PCRel_8 : FK_Data_8;
+ return FK_Data_8;
}
}
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index 7036c408c2e32..816c60bfdc5db 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -201,9 +201,8 @@ void MCObjectStreamer::emitValueImpl(const MCExpr *Value, unsigned Size,
emitIntValue(AbsValue, Size);
return;
}
- DF->getFixups().push_back(
- MCFixup::create(DF->getContents().size(), Value,
- MCFixup::getKindForSize(Size, false), Loc));
+ DF->getFixups().push_back(MCFixup::create(
+ DF->getContents().size(), Value, MCFixup::getDataKindForSize(Size), Loc));
DF->appendContents(Size, 0);
}
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index 03746aeb6a3a6..d0e1853e8a89b 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -1897,7 +1897,7 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
assert(llvm::all_of(DataFrag.getContents(), [](char C) { return !C; }));
for (const MCFixup &Fixup : DataFrag.getFixups()) {
assert(Fixup.getKind() ==
- MCFixup::getKindForSize(is64Bit() ? 8 : 4, false));
+ MCFixup::getDataKindForSize(is64Bit() ? 8 : 4));
const MCExpr *Expr = Fixup.getValue();
auto *SymRef = dyn_cast<MCSymbolRefExpr>(Expr);
if (!SymRef)
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
index 83183970a422d..7884b10a48a99 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
@@ -1299,9 +1299,8 @@ void ARMELFStreamer::EmitPersonalityFixup(StringRef Name) {
visitUsedExpr(*PersonalityRef);
MCDataFragment *DF = getOrCreateDataFragment();
- DF->getFixups().push_back(MCFixup::create(DF->getContents().size(),
- PersonalityRef,
- MCFixup::getKindForSize(4, false)));
+ DF->getFixups().push_back(
+ MCFixup::create(DF->getContents().size(), PersonalityRef, FK_Data_4));
}
void ARMELFStreamer::FlushPendingOffset() {
diff --git a/llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp b/llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp
index 3bd1d0d7dcaeb..d6f57318595cc 100644
--- a/llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp
+++ b/llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp
@@ -139,9 +139,8 @@ void M68kMCCodeEmitter::encodeRelocImm(const MCInst &MI, unsigned OpIdx,
// Relocatable address
unsigned InsertByte = getBytePosition<Size>(InsertPos);
- Fixups.push_back(MCFixup::create(InsertByte, Expr,
- getFixupForSize(Size, /*IsPCRel=*/false),
- MI.getLoc()));
+ Fixups.push_back(MCFixup::create(
+ InsertByte, Expr, MCFixup::getDataKindForSize(Size), MI.getLoc()));
}
}
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
index e58c361db3104..d2db022ababc2 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
@@ -167,11 +167,9 @@ unsigned PPCELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
}
break;
case FK_Data_4:
- case FK_PCRel_4:
Type = ELF::R_PPC_REL32;
break;
case FK_Data_8:
- case FK_PCRel_8:
Type = ELF::R_PPC64_REL64;
break;
}
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
index 42095d4a2b149..dd291cee32dc6 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
@@ -84,7 +84,6 @@ unsigned RISCVELFObjectWriter::getRelocType(MCContext &Ctx,
Ctx.reportError(Fixup.getLoc(), "unsupported relocation type");
return ELF::R_RISCV_NONE;
case FK_Data_4:
- case FK_PCRel_4:
return ELF::R_RISCV_32_PCREL;
case RISCV::fixup_riscv_pcrel_hi20:
return ELF::R_RISCV_PCREL_HI20;
diff --git a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
index ecf8bf9dddfd7..9a23a0e09f164 100644
--- a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
+++ b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
@@ -28,10 +28,6 @@ static uint64_t adjustFixupValue(unsigned Kind, uint64_t Value) {
case FK_Data_2:
case FK_Data_4:
case FK_Data_8:
- case FK_PCRel_1:
- case FK_PCRel_2:
- case FK_PCRel_4:
- case FK_PCRel_8:
return Value;
case VE::fixup_ve_hi32:
case VE::fixup_ve_pc_hi32:
@@ -60,14 +56,11 @@ static unsigned getFixupKindNumBytes(unsigned Kind) {
default:
llvm_unreachable("Unknown fixup kind!");
case FK_Data_1:
- case FK_PCRel_1:
return 1;
case FK_Data_2:
- case FK_PCRel_2:
return 2;
return 4;
case FK_Data_4:
- case FK_PCRel_4:
case VE::fixup_ve_reflong:
case VE::fixup_ve_srel32:
case VE::fixup_ve_hi32:
diff --git a/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
index 5d0d18d86d3f8..5d5b4c01c22e5 100644
--- a/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
+++ b/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
@@ -67,12 +67,10 @@ unsigned VEELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
"1-byte pc-relative data relocation is not supported");
return ELF::R_VE_NONE;
case FK_Data_2:
- case FK_PCRel_2:
Ctx.reportError(Fixup.getLoc(),
"2-byte pc-relative data relocation is not supported");
return ELF::R_VE_NONE;
case FK_Data_4:
- case FK_PCRel_4:
return ELF::R_VE_SREL32;
case FK_Data_8:
case FK_PCRel_8:
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 6e1e6c5ec3db5..6e28c058b702d 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -451,7 +451,18 @@ static MCFixupKind getImmFixupKind(uint64_t TSFlags) {
return MCFixupKind(X86::reloc_signed_4byte);
}
}
- return MCFixup::getKindForSize(Size, isPCRel);
+ switch (Size) {
+ default:
+ llvm_unreachable("Invalid generic fixup size!");
+ case 1:
+ return isPCRel ? FK_PCRel_1 : FK_Data_1;
+ case 2:
+ return isPCRel ? FK_PCRel_2 : FK_Data_2;
+ case 4:
+ return isPCRel ? FK_PCRel_4 : FK_Data_4;
+ case 8:
+ return isPCRel ? FK_PCRel_8 : FK_Data_8;
+ }
}
enum GlobalOffsetTableExprKind { GOT_None, GOT_Normal, GOT_SymDiff };
More information about the llvm-commits
mailing list