[llvm] 3544eba - MSP430MCCodeEmitter: Set PCRel at fixup creation
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 18:04:35 PDT 2025
Author: Fangrui Song
Date: 2025-07-04T18:04:29-07:00
New Revision: 3544eba44a3310ca78203a8091ec2494e048e36e
URL: https://github.com/llvm/llvm-project/commit/3544eba44a3310ca78203a8091ec2494e048e36e
DIFF: https://github.com/llvm/llvm-project/commit/3544eba44a3310ca78203a8091ec2494e048e36e.diff
LOG: MSP430MCCodeEmitter: 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/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
llvm/lib/Target/MSP430/MCTargetDesc/MSP430MCCodeEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
index 852fa6b338e99..19db609348d64 100644
--- a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
+++ b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
@@ -46,21 +46,23 @@ class MSP430AsmBackend : public MCAsmBackend {
}
MCFixupKindInfo getFixupKindInfo(MCFixupKind Kind) const override {
+ // clang-format off
const static MCFixupKindInfo Infos[MSP430::NumTargetFixupKinds] = {
// This table must be in the same order of enum in MSP430FixupKinds.h.
//
// name offset bits flags
{"fixup_32", 0, 32, 0},
- {"fixup_10_pcrel", 0, 10, MCFixupKindInfo::FKF_IsPCRel},
+ {"fixup_10_pcrel", 0, 10, 0},
{"fixup_16", 0, 16, 0},
- {"fixup_16_pcrel", 0, 16, MCFixupKindInfo::FKF_IsPCRel},
+ {"fixup_16_pcrel", 0, 16, 0},
{"fixup_16_byte", 0, 16, 0},
- {"fixup_16_pcrel_byte", 0, 16, MCFixupKindInfo::FKF_IsPCRel},
- {"fixup_2x_pcrel", 0, 10, MCFixupKindInfo::FKF_IsPCRel},
- {"fixup_rl_pcrel", 0, 16, MCFixupKindInfo::FKF_IsPCRel},
+ {"fixup_16_pcrel_byte", 0, 16, 0},
+ {"fixup_2x_pcrel", 0, 10, 0},
+ {"fixup_rl_pcrel", 0, 16, 0},
{"fixup_8", 0, 8, 0},
{"fixup_sym_
diff ", 0, 32, 0},
};
+ // clang-format on
static_assert((std::size(Infos)) == MSP430::NumTargetFixupKinds,
"Not all fixup kinds added to Infos array");
diff --git a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430MCCodeEmitter.cpp b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430MCCodeEmitter.cpp
index 5d05ef0863f8f..f018bdbeb0bfb 100644
--- a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430MCCodeEmitter.cpp
+++ b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430MCCodeEmitter.cpp
@@ -77,6 +77,20 @@ class MSP430MCCodeEmitter : public MCCodeEmitter {
const MCSubtargetInfo &STI) const override;
};
+static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
+ const MCExpr *Value, uint16_t Kind) {
+ bool PCRel = false;
+ switch (Kind) {
+ case MSP430::fixup_10_pcrel:
+ case MSP430::fixup_16_pcrel:
+ case MSP430::fixup_16_pcrel_byte:
+ case MSP430::fixup_2x_pcrel:
+ case MSP430::fixup_rl_pcrel:
+ PCRel = true;
+ }
+ Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
+}
+
void MSP430MCCodeEmitter::encodeInstruction(const MCInst &MI,
SmallVectorImpl<char> &CB,
SmallVectorImpl<MCFixup> &Fixups,
@@ -111,8 +125,7 @@ unsigned MSP430MCCodeEmitter::getMachineOpValue(const MCInst &MI,
}
assert(MO.isExpr() && "Expected expr operand");
- Fixups.push_back(MCFixup::create(
- Offset, MO.getExpr(), static_cast<MCFixupKind>(MSP430::fixup_16_byte)));
+ addFixup(Fixups, Offset, MO.getExpr(), MSP430::fixup_16_byte);
Offset += 2;
return 0;
}
@@ -143,8 +156,7 @@ unsigned MSP430MCCodeEmitter::getMemOpValue(const MCInst &MI, unsigned Op,
FixupKind = MSP430::fixup_16_byte;
break;
}
- Fixups.push_back(MCFixup::create(Offset, MO2.getExpr(),
- static_cast<MCFixupKind>(FixupKind)));
+ addFixup(Fixups, Offset, MO2.getExpr(), FixupKind);
Offset += 2;
return Reg;
}
@@ -157,8 +169,7 @@ unsigned MSP430MCCodeEmitter::getPCRelImmOpValue(const MCInst &MI, unsigned Op,
return MO.getImm();
assert(MO.isExpr() && "Expr operand expected");
- Fixups.push_back(MCFixup::create(
- 0, MO.getExpr(), static_cast<MCFixupKind>(MSP430::fixup_10_pcrel)));
+ addFixup(Fixups, 0, MO.getExpr(), MSP430::fixup_10_pcrel);
return 0;
}
More information about the llvm-commits
mailing list