[llvm] 22c7317 - [MC] Remove the MCAsmLayout parameter from relocation related functions
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 1 00:16:52 PDT 2024
Author: Fangrui Song
Date: 2024-07-01T00:16:48-07:00
New Revision: 22c7317f1e954b34a46640db5d509bae1c633348
URL: https://github.com/llvm/llvm-project/commit/22c7317f1e954b34a46640db5d509bae1c633348
DIFF: https://github.com/llvm/llvm-project/commit/22c7317f1e954b34a46640db5d509bae1c633348.diff
LOG: [MC] Remove the MCAsmLayout parameter from relocation related functions
Added:
Modified:
llvm/include/llvm/MC/MCAsmBackend.h
llvm/lib/MC/MCAsmBackend.cpp
llvm/lib/MC/MCAssembler.cpp
llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.cpp
llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.h
llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.h
llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.h
llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCAsmBackend.h b/llvm/include/llvm/MC/MCAsmBackend.h
index 1f36b7e98274f..56625e413e81b 100644
--- a/llvm/include/llvm/MC/MCAsmBackend.h
+++ b/llvm/include/llvm/MC/MCAsmBackend.h
@@ -110,7 +110,6 @@ class MCAsmBackend {
/// Hook which indicates if the target requires a fixup to be generated when
/// handling an align directive in an executable section
virtual bool shouldInsertFixupForCodeAlign(MCAssembler &Asm,
- const MCAsmLayout &Layout,
MCAlignFragment &AF) {
return false;
}
@@ -124,7 +123,7 @@ class MCAsmBackend {
llvm_unreachable("Need to implement hook if target has custom fixups");
}
- virtual bool handleAddSubRelocations(const MCAsmLayout &Layout,
+ virtual bool handleAddSubRelocations(const MCAssembler &Asm,
const MCFragment &F,
const MCFixup &Fixup,
const MCValue &Target,
@@ -160,10 +159,10 @@ class MCAsmBackend {
/// Target specific predicate for whether a given fixup requires the
/// associated instruction to be relaxed.
- virtual bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
+ virtual bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup, bool Resolved,
uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const;
/// Simple predicate for targets where !Resolved implies requiring relaxation
diff --git a/llvm/lib/MC/MCAsmBackend.cpp b/llvm/lib/MC/MCAsmBackend.cpp
index 616576e945be4..9fea05c0f5154 100644
--- a/llvm/lib/MC/MCAsmBackend.cpp
+++ b/llvm/lib/MC/MCAsmBackend.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/MC/MCAsmBackend.h"
+#include "llvm/MC/MCAssembler.h"
#include "llvm/MC/MCDXContainerWriter.h"
#include "llvm/MC/MCELFObjectWriter.h"
#include "llvm/MC/MCFixupKindInfo.h"
@@ -115,13 +116,14 @@ const MCFixupKindInfo &MCAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
return Builtins[Kind];
}
-bool MCAsmBackend::fixupNeedsRelaxationAdvanced(
- const MCFixup &Fixup, bool Resolved, uint64_t Value,
- const MCRelaxableFragment *DF, const MCAsmLayout &Layout,
- const bool WasForced) const {
+bool MCAsmBackend::fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup,
+ bool Resolved, uint64_t Value,
+ const MCRelaxableFragment *DF,
+ const bool WasForced) const {
if (!Resolved)
return true;
- return fixupNeedsRelaxation(Fixup, Value, DF, Layout);
+ return fixupNeedsRelaxation(Fixup, Value, DF, *Asm.getLayout());
}
bool MCAsmBackend::isDarwinCanonicalPersonality(const MCSymbol *Sym) const {
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index a49481a938d1f..da840b0957c88 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -270,7 +270,7 @@ bool MCAssembler::evaluateFixup(const MCFixup &Fixup, const MCFragment *DF,
// recordRelocation handle non-VK_None cases like A at plt-B+C.
if (!IsResolved && Target.getSymA() && Target.getSymB() &&
Target.getSymA()->getKind() == MCSymbolRefExpr::VK_None &&
- getBackend().handleAddSubRelocations(*Layout, *DF, Fixup, Target, Value))
+ getBackend().handleAddSubRelocations(*this, *DF, Fixup, Target, Value))
return true;
return IsResolved;
@@ -1040,7 +1040,7 @@ void MCAssembler::layout(MCAsmLayout &Layout) {
// Insert fixup type for code alignment if the target define
// shouldInsertFixupForCodeAlign target hook.
if (Sec.useCodeAlign() && AF.hasEmitNops())
- getBackend().shouldInsertFixupForCodeAlign(*this, Layout, AF);
+ getBackend().shouldInsertFixupForCodeAlign(*this, AF);
continue;
}
case MCFragment::FT_Data: {
@@ -1126,8 +1126,8 @@ bool MCAssembler::fixupNeedsRelaxation(const MCFixup &Fixup,
Target.getSymA()->getKind() == MCSymbolRefExpr::VK_X86_ABS8 &&
Fixup.getKind() == FK_Data_1)
return false;
- return getBackend().fixupNeedsRelaxationAdvanced(Fixup, Resolved, Value, DF,
- *Layout, WasForced);
+ return getBackend().fixupNeedsRelaxationAdvanced(*this, Fixup, Resolved,
+ Value, DF, WasForced);
}
bool MCAssembler::fragmentNeedsRelaxation(const MCRelaxableFragment *F) const {
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.cpp b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.cpp
index bceb41a267450..1acd34c1ffe47 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.cpp
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.cpp
@@ -171,10 +171,10 @@ static uint64_t adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
}
}
-bool CSKYAsmBackend::fixupNeedsRelaxationAdvanced(const MCFixup &Fixup,
+bool CSKYAsmBackend::fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup,
bool Resolved, uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const {
// Return true if the symbol is actually unresolved.
// Resolved could be always false when shouldForceRelocation return true.
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.h b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.h
index 5fa0c8c01185d..74e62a0e58dd4 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.h
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYAsmBackend.h
@@ -43,10 +43,10 @@ class CSKYAsmBackend : public MCAsmBackend {
bool mayNeedRelaxation(const MCInst &Inst,
const MCSubtargetInfo &STI) const override;
- bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
+ bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup, bool Resolved,
uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const override;
bool writeNopData(raw_ostream &OS, uint64_t Count,
diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
index 0536f89277317..26b0cfaf6868c 100644
--- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
+++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
@@ -568,10 +568,10 @@ class HexagonAsmBackend : public MCAsmBackend {
/// fixupNeedsRelaxation - Target specific predicate for whether a given
/// fixup requires the associated instruction to be relaxed.
- bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
+ bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup, bool Resolved,
uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const override {
MCInst const &MCB = DF->getInst();
assert(HexagonMCInstrInfo::isBundle(MCB));
@@ -598,7 +598,7 @@ class HexagonAsmBackend : public MCAsmBackend {
if (HexagonMCInstrInfo::bundleSize(MCB) < HEXAGON_PACKET_SIZE) {
++relaxedCnt;
*RelaxTarget = &MCI;
- setExtender(Layout.getAssembler().getContext());
+ setExtender(Asm.getContext());
return true;
} else {
return false;
@@ -636,7 +636,7 @@ class HexagonAsmBackend : public MCAsmBackend {
if (HexagonMCInstrInfo::bundleSize(MCB) < HEXAGON_PACKET_SIZE) {
++relaxedCnt;
*RelaxTarget = &MCI;
- setExtender(Layout.getAssembler().getContext());
+ setExtender(Asm.getContext());
return true;
}
}
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
index 32a72d0ef0fdc..a3bb229ef0527 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
@@ -206,8 +206,8 @@ bool LoongArchAsmBackend::shouldInsertExtraNopBytesForCodeAlign(
// addend represent alignment and the other bits of addend represent the
// maximum number of bytes to emit. The maximum number of bytes is zero
// means ignore the emit limit.
-bool LoongArchAsmBackend::shouldInsertFixupForCodeAlign(
- MCAssembler &Asm, const MCAsmLayout &Layout, MCAlignFragment &AF) {
+bool LoongArchAsmBackend::shouldInsertFixupForCodeAlign(MCAssembler &Asm,
+ MCAlignFragment &AF) {
// Insert the fixup only when linker relaxation enabled.
if (!AF.getSubtargetInfo()->hasFeature(LoongArch::FeatureRelax))
return false;
@@ -451,7 +451,7 @@ bool LoongArchAsmBackend::writeNopData(raw_ostream &OS, uint64_t Count,
return true;
}
-bool LoongArchAsmBackend::handleAddSubRelocations(const MCAsmLayout &Layout,
+bool LoongArchAsmBackend::handleAddSubRelocations(const MCAssembler &Asm,
const MCFragment &F,
const MCFixup &Fixup,
const MCValue &Target,
@@ -503,9 +503,9 @@ bool LoongArchAsmBackend::handleAddSubRelocations(const MCAsmLayout &Layout,
MCValue B = MCValue::get(Target.getSymB());
auto FA = MCFixup::create(Fixup.getOffset(), nullptr, std::get<0>(FK));
auto FB = MCFixup::create(Fixup.getOffset(), nullptr, std::get<1>(FK));
- auto &Asm = Layout.getAssembler();
- Asm.getWriter().recordRelocation(Asm, &F, FA, A, FixedValueA);
- Asm.getWriter().recordRelocation(Asm, &F, FB, B, FixedValueB);
+ auto &Assembler = const_cast<MCAssembler &>(Asm);
+ Asm.getWriter().recordRelocation(Assembler, &F, FA, A, FixedValueA);
+ Asm.getWriter().recordRelocation(Assembler, &F, FB, B, FixedValueB);
FixedValue = FixedValueA - FixedValueB;
return true;
}
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.h b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.h
index 9d81781fca190..87c7a68aee4a5 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.h
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.h
@@ -39,7 +39,7 @@ class LoongArchAsmBackend : public MCAsmBackend {
STI(STI), OSABI(OSABI), Is64Bit(Is64Bit), TargetOptions(Options) {}
~LoongArchAsmBackend() override {}
- bool handleAddSubRelocations(const MCAsmLayout &Layout, const MCFragment &F,
+ bool handleAddSubRelocations(const MCAssembler &Asm, const MCFragment &F,
const MCFixup &Fixup, const MCValue &Target,
uint64_t &FixedValue) const override;
@@ -54,7 +54,6 @@ class LoongArchAsmBackend : public MCAsmBackend {
// Insert target specific fixup type for alignment directive in code section.
bool shouldInsertFixupForCodeAlign(MCAssembler &Asm,
- const MCAsmLayout &Layout,
MCAlignFragment &AF) override;
bool shouldForceRelocation(const MCAssembler &Asm, const MCFixup &Fixup,
diff --git a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
index bd9f6279445af..e0d209c96259c 100644
--- a/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
+++ b/llvm/lib/Target/MSP430/MCTargetDesc/MSP430AsmBackend.cpp
@@ -53,10 +53,10 @@ class MSP430AsmBackend : public MCAsmBackend {
return false;
}
- bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
+ bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup, bool Resolved,
uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const override {
return false;
}
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
index 3b5d7c7793928..4a02e10d91316 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
@@ -139,12 +139,9 @@ bool RISCVAsmBackend::shouldForceRelocation(const MCAssembler &Asm,
return STI->hasFeature(RISCV::FeatureRelax) || ForceRelocs;
}
-bool RISCVAsmBackend::fixupNeedsRelaxationAdvanced(const MCFixup &Fixup,
- bool Resolved,
- uint64_t Value,
- const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
- const bool WasForced) const {
+bool RISCVAsmBackend::fixupNeedsRelaxationAdvanced(
+ const MCAssembler &Asm, const MCFixup &Fixup, bool Resolved, uint64_t Value,
+ const MCRelaxableFragment *DF, const bool WasForced) const {
if (!RelaxBranches)
return false;
@@ -584,7 +581,7 @@ bool RISCVAsmBackend::evaluateTargetFixup(
return true;
}
-bool RISCVAsmBackend::handleAddSubRelocations(const MCAsmLayout &Layout,
+bool RISCVAsmBackend::handleAddSubRelocations(const MCAssembler &Asm,
const MCFragment &F,
const MCFixup &Fixup,
const MCValue &Target,
@@ -623,9 +620,9 @@ bool RISCVAsmBackend::handleAddSubRelocations(const MCAsmLayout &Layout,
auto FB = MCFixup::create(
Fixup.getOffset(), nullptr,
static_cast<MCFixupKind>(FirstLiteralRelocationKind + TB));
- auto &Asm = Layout.getAssembler();
- Asm.getWriter().recordRelocation(Asm, &F, FA, A, FixedValueA);
- Asm.getWriter().recordRelocation(Asm, &F, FB, B, FixedValueB);
+ auto &Assembler = const_cast<MCAssembler &>(Asm);
+ Asm.getWriter().recordRelocation(Assembler, &F, FA, A, FixedValueA);
+ Asm.getWriter().recordRelocation(Assembler, &F, FB, B, FixedValueB);
FixedValue = FixedValueA - FixedValueB;
return true;
}
@@ -689,7 +686,6 @@ bool RISCVAsmBackend::shouldInsertExtraNopBytesForCodeAlign(
// The function insert fixup_riscv_align fixup which eventually will
// transfer to R_RISCV_ALIGN relocation type.
bool RISCVAsmBackend::shouldInsertFixupForCodeAlign(MCAssembler &Asm,
- const MCAsmLayout &Layout,
MCAlignFragment &AF) {
// Insert the fixup only when linker relaxation enabled.
const MCSubtargetInfo *STI = AF.getSubtargetInfo();
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.h
index 902b44bba70fe..6ce7402d87ca1 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.h
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.h
@@ -45,7 +45,6 @@ class RISCVAsmBackend : public MCAsmBackend {
// Insert target specific fixup type for alignment directive in code section.
bool shouldInsertFixupForCodeAlign(MCAssembler &Asm,
- const MCAsmLayout &Layout,
MCAlignFragment &AF) override;
bool evaluateTargetFixup(const MCAssembler &Asm, const MCAsmLayout &Layout,
@@ -53,7 +52,7 @@ class RISCVAsmBackend : public MCAsmBackend {
const MCValue &Target, const MCSubtargetInfo *STI,
uint64_t &Value, bool &WasForced) override;
- bool handleAddSubRelocations(const MCAsmLayout &Layout, const MCFragment &F,
+ bool handleAddSubRelocations(const MCAssembler &Asm, const MCFragment &F,
const MCFixup &Fixup, const MCValue &Target,
uint64_t &FixedValue) const override;
@@ -75,10 +74,10 @@ class RISCVAsmBackend : public MCAsmBackend {
llvm_unreachable("Handled by fixupNeedsRelaxationAdvanced");
}
- bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
+ bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm,
+ const MCFixup &Fixup, bool Resolved,
uint64_t Value,
const MCRelaxableFragment *DF,
- const MCAsmLayout &Layout,
const bool WasForced) const override;
unsigned getNumFixupKinds() const override {
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index fce484acf0eed..49e1ad2b138f0 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -917,7 +917,7 @@ void X86AsmBackend::finishLayout(MCAssembler const &Asm,
}
#ifndef NDEBUG
- const uint64_t OrigOffset = Layout.getFragmentOffset(&F);
+ const uint64_t OrigOffset = Asm.getFragmentOffset(F);
#endif
const uint64_t OrigSize = Asm.computeFragmentSize(F);
@@ -950,7 +950,7 @@ void X86AsmBackend::finishLayout(MCAssembler const &Asm,
cast<MCBoundaryAlignFragment>(F).setSize(RemainingSize);
#ifndef NDEBUG
- const uint64_t FinalOffset = Layout.getFragmentOffset(&F);
+ const uint64_t FinalOffset = Asm.getFragmentOffset(F);
const uint64_t FinalSize = Asm.computeFragmentSize(F);
assert(OrigOffset + OrigSize == FinalOffset + FinalSize &&
"can't move start of next fragment!");
@@ -973,7 +973,7 @@ void X86AsmBackend::finishLayout(MCAssembler const &Asm,
// The layout is done. Mark every fragment as valid.
for (unsigned int i = 0, n = Layout.getSectionOrder().size(); i != n; ++i) {
MCSection &Section = *Layout.getSectionOrder()[i];
- Layout.getFragmentOffset(&*Section.curFragList()->Tail);
+ Asm.getFragmentOffset(*Section.curFragList()->Tail);
Asm.computeFragmentSize(*Section.curFragList()->Tail);
}
}
More information about the llvm-commits
mailing list