[llvm] 955c048 - AArch64MCCodeEmitter: Standardize how fixups are appended
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 16:27:33 PDT 2025
Author: Fangrui Song
Date: 2025-07-04T16:27:28-07:00
New Revision: 955c04862e99baed1ec96de8e4e8248ba9a3d739
URL: https://github.com/llvm/llvm-project/commit/955c04862e99baed1ec96de8e4e8248ba9a3d739
DIFF: https://github.com/llvm/llvm-project/commit/955c04862e99baed1ec96de8e4e8248ba9a3d739.diff
LOG: AArch64MCCodeEmitter: Standardize how fixups are appended
This helper will facilitate future fixup data structure optimizations.
Added:
Modified:
llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
index 23d38178c9f04..dd070d73bfc50 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
@@ -31,7 +31,8 @@ namespace {
class AArch64AsmBackend : public MCAsmBackend {
static const unsigned PCRelFlagVal =
- MCFixupKindInfo::FKF_IsAlignedDownTo32Bits | MCFixupKindInfo::FKF_IsPCRel;
+ MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
+
protected:
Triple TheTriple;
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp
index 45e8949809da9..838ac748c4580 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp
@@ -223,6 +223,11 @@ class AArch64MCCodeEmitter : public MCCodeEmitter {
} // end anonymous namespace
+static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
+ const MCExpr *Value, uint16_t Kind, bool PCRel = false) {
+ Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
+}
+
/// getMachineOpValue - Return binary encoding of operand. If the machine
/// operand requires relocation, record the relocation and return zero.
unsigned
@@ -248,7 +253,7 @@ AArch64MCCodeEmitter::getLdStUImm12OpValue(const MCInst &MI, unsigned OpIdx,
else {
assert(MO.isExpr() && "unable to encode load/store imm operand");
MCFixupKind Kind = MCFixupKind(FixupKind);
- Fixups.push_back(MCFixup::create(0, MO.getExpr(), Kind));
+ addFixup(Fixups, 0, MO.getExpr(), Kind);
++MCNumFixups;
}
@@ -272,7 +277,7 @@ AArch64MCCodeEmitter::getAdrLabelOpValue(const MCInst &MI, unsigned OpIdx,
unsigned Kind = MI.getOpcode() == AArch64::ADR
? AArch64::fixup_aarch64_pcrel_adr_imm21
: AArch64::fixup_aarch64_pcrel_adrp_imm21;
- Fixups.push_back(MCFixup::create(0, Expr, Kind, true));
+ addFixup(Fixups, 0, Expr, Kind, true);
MCNumFixups += 1;
return 0;
}
@@ -299,7 +304,7 @@ AArch64MCCodeEmitter::getAddSubImmOpValue(const MCInst &MI, unsigned OpIdx,
// Encode the 12 bits of the fixup.
MCFixupKind Kind = MCFixupKind(AArch64::fixup_aarch64_add_imm12);
- Fixups.push_back(MCFixup::create(0, Expr, Kind));
+ addFixup(Fixups, 0, Expr, Kind);
++MCNumFixups;
@@ -326,8 +331,8 @@ uint32_t AArch64MCCodeEmitter::getCondBranchTargetOpValue(
return MO.getImm();
assert(MO.isExpr() && "Unexpected target type!");
- Fixups.push_back(MCFixup::create(
- 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch19, true));
+ addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch19,
+ true);
++MCNumFixups;
return 0;
}
@@ -364,8 +369,8 @@ AArch64MCCodeEmitter::getPAuthPCRelOpValue(const MCInst &MI, unsigned OpIdx,
return -(MO.getImm());
assert(MO.isExpr() && "Unexpected target type!");
- Fixups.push_back(MCFixup::create(
- 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch16, true));
+ addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch16,
+ true);
++MCNumFixups;
return 0;
}
@@ -383,8 +388,8 @@ AArch64MCCodeEmitter::getLoadLiteralOpValue(const MCInst &MI, unsigned OpIdx,
return MO.getImm();
assert(MO.isExpr() && "Unexpected target type!");
- Fixups.push_back(MCFixup::create(
- 0, MO.getExpr(), AArch64::fixup_aarch64_ldr_pcrel_imm19, true));
+ addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_ldr_pcrel_imm19,
+ true);
++MCNumFixups;
return 0;
}
@@ -428,8 +433,8 @@ uint32_t AArch64MCCodeEmitter::getTestBranchTargetOpValue(
return MO.getImm();
assert(MO.isExpr() && "Unexpected ADR target type!");
- Fixups.push_back(MCFixup::create(
- 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch14, true));
+ addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch14,
+ true);
++MCNumFixups;
return 0;
}
@@ -450,7 +455,7 @@ AArch64MCCodeEmitter::getBranchTargetOpValue(const MCInst &MI, unsigned OpIdx,
unsigned Kind = MI.getOpcode() == AArch64::BL
? AArch64::fixup_aarch64_pcrel_call26
: AArch64::fixup_aarch64_pcrel_branch26;
- Fixups.push_back(MCFixup::create(0, MO.getExpr(), Kind, true));
+ addFixup(Fixups, 0, MO.getExpr(), Kind, true);
++MCNumFixups;
@@ -730,7 +735,7 @@ void AArch64MCCodeEmitter::encodeInstruction(const MCInst &MI,
auto Reloc = STI.getTargetTriple().getEnvironment() == Triple::GNUILP32
? ELF::R_AARCH64_P32_TLSDESC_CALL
: ELF::R_AARCH64_TLSDESC_CALL;
- Fixups.push_back(MCFixup::create(0, MI.getOperand(0).getExpr(), Reloc));
+ addFixup(Fixups, 0, MI.getOperand(0).getExpr(), Reloc);
return;
}
More information about the llvm-commits
mailing list