[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