[llvm] 755b473 - VEMCCodeEmitter: Set PCRel at fixup creation

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 4 18:12:24 PDT 2025


Author: Fangrui Song
Date: 2025-07-04T18:12:20-07:00
New Revision: 755b4732cf8142d29176c05188bf119277a8c3fb

URL: https://github.com/llvm/llvm-project/commit/755b4732cf8142d29176c05188bf119277a8c3fb
DIFF: https://github.com/llvm/llvm-project/commit/755b4732cf8142d29176c05188bf119277a8c3fb.diff

LOG: VEMCCodeEmitter: 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/VE/MCTargetDesc/VEAsmBackend.cpp
    llvm/lib/Target/VE/MCTargetDesc/VEMCCodeEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
index ad7b92f8cf389..16b6a9acf8e61 100644
--- a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
+++ b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp
@@ -96,22 +96,14 @@ class VEAsmBackend : public MCAsmBackend {
   MCFixupKindInfo getFixupKindInfo(MCFixupKind Kind) const override {
     const static MCFixupKindInfo Infos[VE::NumTargetFixupKinds] = {
         // name, offset, bits, flags
-        {"fixup_ve_reflong", 0, 32, 0},
-        {"fixup_ve_srel32", 0, 32, MCFixupKindInfo::FKF_IsPCRel},
-        {"fixup_ve_hi32", 0, 32, 0},
-        {"fixup_ve_lo32", 0, 32, 0},
-        {"fixup_ve_pc_hi32", 0, 32, MCFixupKindInfo::FKF_IsPCRel},
-        {"fixup_ve_pc_lo32", 0, 32, MCFixupKindInfo::FKF_IsPCRel},
-        {"fixup_ve_got_hi32", 0, 32, 0},
-        {"fixup_ve_got_lo32", 0, 32, 0},
-        {"fixup_ve_gotoff_hi32", 0, 32, 0},
-        {"fixup_ve_gotoff_lo32", 0, 32, 0},
-        {"fixup_ve_plt_hi32", 0, 32, 0},
-        {"fixup_ve_plt_lo32", 0, 32, 0},
-        {"fixup_ve_tls_gd_hi32", 0, 32, 0},
-        {"fixup_ve_tls_gd_lo32", 0, 32, 0},
-        {"fixup_ve_tpoff_hi32", 0, 32, 0},
-        {"fixup_ve_tpoff_lo32", 0, 32, 0},
+        {"fixup_ve_reflong", 0, 32, 0},     {"fixup_ve_srel32", 0, 32, 0},
+        {"fixup_ve_hi32", 0, 32, 0},        {"fixup_ve_lo32", 0, 32, 0},
+        {"fixup_ve_pc_hi32", 0, 32, 0},     {"fixup_ve_pc_lo32", 0, 32, 0},
+        {"fixup_ve_got_hi32", 0, 32, 0},    {"fixup_ve_got_lo32", 0, 32, 0},
+        {"fixup_ve_gotoff_hi32", 0, 32, 0}, {"fixup_ve_gotoff_lo32", 0, 32, 0},
+        {"fixup_ve_plt_hi32", 0, 32, 0},    {"fixup_ve_plt_lo32", 0, 32, 0},
+        {"fixup_ve_tls_gd_hi32", 0, 32, 0}, {"fixup_ve_tls_gd_lo32", 0, 32, 0},
+        {"fixup_ve_tpoff_hi32", 0, 32, 0},  {"fixup_ve_tpoff_lo32", 0, 32, 0},
     };
 
     if (Kind < FirstTargetFixupKind)

diff  --git a/llvm/lib/Target/VE/MCTargetDesc/VEMCCodeEmitter.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEMCCodeEmitter.cpp
index 9b114d6e11b51..711937c488275 100644
--- a/llvm/lib/Target/VE/MCTargetDesc/VEMCCodeEmitter.cpp
+++ b/llvm/lib/Target/VE/MCTargetDesc/VEMCCodeEmitter.cpp
@@ -76,6 +76,18 @@ class VEMCCodeEmitter : public MCCodeEmitter {
 
 } // end anonymous namespace
 
+static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
+                     const MCExpr *Value, uint16_t Kind) {
+  bool PCRel = false;
+  switch (Kind) {
+  case VE::fixup_ve_srel32:
+  case VE::fixup_ve_pc_hi32:
+  case VE::fixup_ve_pc_lo32:
+    PCRel = true;
+  }
+  Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
+}
+
 void VEMCCodeEmitter::encodeInstruction(const MCInst &MI,
                                         SmallVectorImpl<char> &CB,
                                         SmallVectorImpl<MCFixup> &Fixups,
@@ -100,7 +112,7 @@ unsigned VEMCCodeEmitter::getMachineOpValue(const MCInst &MI,
   const MCExpr *Expr = MO.getExpr();
   if (const auto *SExpr = dyn_cast<MCSpecifierExpr>(Expr)) {
     auto Kind = VE::getFixupKind(SExpr->getSpecifier());
-    Fixups.push_back(MCFixup::create(0, Expr, Kind));
+    addFixup(Fixups, 0, Expr, Kind);
     return 0;
   }
 
@@ -120,8 +132,7 @@ VEMCCodeEmitter::getBranchTargetOpValue(const MCInst &MI, unsigned OpNo,
   if (MO.isReg() || MO.isImm())
     return getMachineOpValue(MI, MO, Fixups, STI);
 
-  Fixups.push_back(
-      MCFixup::create(0, MO.getExpr(), (MCFixupKind)VE::fixup_ve_srel32));
+  addFixup(Fixups, 0, MO.getExpr(), VE::fixup_ve_srel32);
   return 0;
 }
 


        


More information about the llvm-commits mailing list