[llvm] bd32151 - MCExpr::evaluateKnownAbsolute: replace the MCAsmLayout parameter with MCAssembler
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 1 16:46:02 PDT 2024
Author: Fangrui Song
Date: 2024-07-01T16:45:57-07:00
New Revision: bd3215149aa16428666e520ddc94a638e1178437
URL: https://github.com/llvm/llvm-project/commit/bd3215149aa16428666e520ddc94a638e1178437
DIFF: https://github.com/llvm/llvm-project/commit/bd3215149aa16428666e520ddc94a638e1178437.diff
LOG: MCExpr::evaluateKnownAbsolute: replace the MCAsmLayout parameter with MCAssembler
and add a comment.
Added:
Modified:
llvm/include/llvm/MC/MCExpr.h
llvm/lib/MC/ELFObjectWriter.cpp
llvm/lib/MC/MCAssembler.cpp
llvm/lib/MC/MCCodeView.cpp
llvm/lib/MC/MCExpr.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h
index 38b89d58aacd5..118b1dd88525a 100644
--- a/llvm/include/llvm/MC/MCExpr.h
+++ b/llvm/include/llvm/MC/MCExpr.h
@@ -16,7 +16,6 @@
namespace llvm {
class MCAsmInfo;
-class MCAsmLayout;
class MCAssembler;
class MCContext;
class MCFixup;
@@ -101,7 +100,10 @@ class MCExpr {
bool evaluateAsAbsolute(int64_t &Res, const MCAssembler &Asm) const;
bool evaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm) const;
- bool evaluateKnownAbsolute(int64_t &Res, const MCAsmLayout &Layout) const;
+ /// Aggressive variant of evaluateAsRelocatable when relocations are
+ /// unavailable (e.g. .fill). Expects callers to handle errors when true is
+ /// returned.
+ bool evaluateKnownAbsolute(int64_t &Res, const MCAssembler &Asm) const;
/// Try to evaluate the expression to a relocatable value, i.e. an
/// expression of the fixed form (a - b + constant).
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index e7e729f09d2ec..be4831db5bab7 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -567,7 +567,7 @@ void ELFWriter::writeSymbol(const MCAssembler &Asm, SymbolTableWriter &Writer,
if (ESize) {
int64_t Res;
- if (!ESize->evaluateKnownAbsolute(Res, *Asm.getLayout()))
+ if (!ESize->evaluateKnownAbsolute(Res, Asm))
report_fatal_error("Size expression must be absolute.");
Size = Res;
}
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 532f68b082379..6da48155ac9ac 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -288,7 +288,7 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
case MCFragment::FT_Fill: {
auto &FF = cast<MCFillFragment>(F);
int64_t NumValues = 0;
- if (!FF.getNumValues().evaluateKnownAbsolute(NumValues, *Layout)) {
+ if (!FF.getNumValues().evaluateKnownAbsolute(NumValues, *this)) {
getContext().reportError(FF.getLoc(),
"expected assembly-time absolute expression");
return 0;
@@ -1150,7 +1150,7 @@ bool MCAssembler::relaxLEB(MCLEBFragment &LF) {
// requires that .uleb128 A-B is foldable where A and B reside in
diff erent
// fragments. This is used by __gcc_except_table.
bool Abs = getSubsectionsViaSymbols()
- ? LF.getValue().evaluateKnownAbsolute(Value, *Layout)
+ ? LF.getValue().evaluateKnownAbsolute(Value, *this)
: LF.getValue().evaluateAsAbsolute(Value, *this);
if (!Abs) {
bool Relaxed, UseZeroPad;
@@ -1248,7 +1248,7 @@ bool MCAssembler::relaxDwarfLineAddr(MCDwarfLineAddrFragment &DF) {
MCContext &Context = getContext();
uint64_t OldSize = DF.getContents().size();
int64_t AddrDelta;
- bool Abs = DF.getAddrDelta().evaluateKnownAbsolute(AddrDelta, *Layout);
+ bool Abs = DF.getAddrDelta().evaluateKnownAbsolute(AddrDelta, *this);
assert(Abs && "We created a line delta with an invalid expression");
(void)Abs;
int64_t LineDelta;
@@ -1301,7 +1301,7 @@ bool MCAssembler::relaxCVDefRange(MCCVDefRangeFragment &F) {
bool MCAssembler::relaxPseudoProbeAddr(MCPseudoProbeAddrFragment &PF) {
uint64_t OldSize = PF.getContents().size();
int64_t AddrDelta;
- bool Abs = PF.getAddrDelta().evaluateKnownAbsolute(AddrDelta, *Layout);
+ bool Abs = PF.getAddrDelta().evaluateKnownAbsolute(AddrDelta, *this);
assert(Abs && "We created a pseudo probe with an invalid expression");
(void)Abs;
SmallVectorImpl<char> &Data = PF.getContents();
diff --git a/llvm/lib/MC/MCCodeView.cpp b/llvm/lib/MC/MCCodeView.cpp
index 89b28b4da575f..a47a07b71be7e 100644
--- a/llvm/lib/MC/MCCodeView.cpp
+++ b/llvm/lib/MC/MCCodeView.cpp
@@ -474,7 +474,8 @@ static unsigned computeLabelDiff(MCAsmLayout &Layout, const MCSymbol *Begin,
const MCExpr *AddrDelta =
MCBinaryExpr::create(MCBinaryExpr::Sub, EndRef, BeginRef, Ctx);
int64_t Result;
- bool Success = AddrDelta->evaluateKnownAbsolute(Result, Layout);
+ bool Success =
+ AddrDelta->evaluateKnownAbsolute(Result, Layout.getAssembler());
assert(Success && "failed to evaluate label
diff erence as absolute");
(void)Success;
assert(Result >= 0 && "negative label
diff erence requested");
diff --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp
index 7e711117a3e31..82795399900c2 100644
--- a/llvm/lib/MC/MCExpr.cpp
+++ b/llvm/lib/MC/MCExpr.cpp
@@ -563,9 +563,8 @@ bool MCExpr::evaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm) const {
return evaluateAsAbsolute(Res, Asm, nullptr, false);
}
-bool MCExpr::evaluateKnownAbsolute(int64_t &Res,
- const MCAsmLayout &Layout) const {
- return evaluateAsAbsolute(Res, &Layout.getAssembler(), nullptr, true);
+bool MCExpr::evaluateKnownAbsolute(int64_t &Res, const MCAssembler &Asm) const {
+ return evaluateAsAbsolute(Res, &Asm, nullptr, true);
}
bool MCExpr::evaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm,
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
index eb059d312de1f..0d65bde11c6d6 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
@@ -303,7 +303,7 @@ std::pair<bool, bool> LoongArchAsmBackend::relaxLEB128(const MCAssembler &Asm,
MCLEBFragment &LF,
int64_t &Value) const {
const MCExpr &Expr = LF.getValue();
- if (LF.isSigned() || !Expr.evaluateKnownAbsolute(Value, *Asm.getLayout()))
+ if (LF.isSigned() || !Expr.evaluateKnownAbsolute(Value, Asm))
return std::make_pair(false, false);
LF.getFixups().push_back(
MCFixup::create(0, &Expr, FK_Data_leb128, Expr.getLoc()));
@@ -313,7 +313,6 @@ std::pair<bool, bool> LoongArchAsmBackend::relaxLEB128(const MCAssembler &Asm,
bool LoongArchAsmBackend::relaxDwarfLineAddr(const MCAssembler &Asm,
MCDwarfLineAddrFragment &DF,
bool &WasRelaxed) const {
- auto &Layout = *Asm.getLayout();
MCContext &C = Asm.getContext();
int64_t LineDelta = DF.getLineDelta();
@@ -325,7 +324,7 @@ bool LoongArchAsmBackend::relaxDwarfLineAddr(const MCAssembler &Asm,
int64_t Value;
if (AddrDelta.evaluateAsAbsolute(Value, Asm))
return false;
- bool IsAbsolute = AddrDelta.evaluateKnownAbsolute(Value, Layout);
+ bool IsAbsolute = AddrDelta.evaluateKnownAbsolute(Value, Asm);
assert(IsAbsolute && "CFA with invalid expression");
(void)IsAbsolute;
@@ -391,7 +390,7 @@ bool LoongArchAsmBackend::relaxDwarfCFA(const MCAssembler &Asm,
int64_t Value;
if (AddrDelta.evaluateAsAbsolute(Value, Asm))
return false;
- bool IsAbsolute = AddrDelta.evaluateKnownAbsolute(Value, Layout);
+ bool IsAbsolute = AddrDelta.evaluateKnownAbsolute(Value, Asm);
assert(IsAbsolute && "CFA with invalid expression");
(void)IsAbsolute;
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
index bbb8914c0e5de..1bd23e64833a9 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
@@ -215,7 +215,7 @@ bool RISCVAsmBackend::relaxDwarfLineAddr(const MCAssembler &Asm,
int64_t Value;
[[maybe_unused]] bool IsAbsolute =
- AddrDelta.evaluateKnownAbsolute(Value, *Asm.getLayout());
+ AddrDelta.evaluateKnownAbsolute(Value, Asm);
assert(IsAbsolute && "CFA with invalid expression");
Data.clear();
@@ -271,7 +271,6 @@ bool RISCVAsmBackend::relaxDwarfLineAddr(const MCAssembler &Asm,
bool RISCVAsmBackend::relaxDwarfCFA(const MCAssembler &Asm,
MCDwarfCallFrameFragment &DF,
bool &WasRelaxed) const {
- auto &Layout = *Asm.getLayout();
const MCExpr &AddrDelta = DF.getAddrDelta();
SmallVectorImpl<char> &Data = DF.getContents();
SmallVectorImpl<MCFixup> &Fixups = DF.getFixups();
@@ -281,7 +280,7 @@ bool RISCVAsmBackend::relaxDwarfCFA(const MCAssembler &Asm,
if (AddrDelta.evaluateAsAbsolute(Value, Asm))
return false;
[[maybe_unused]] bool IsAbsolute =
- AddrDelta.evaluateKnownAbsolute(Value, Layout);
+ AddrDelta.evaluateKnownAbsolute(Value, Asm);
assert(IsAbsolute && "CFA with invalid expression");
Data.clear();
@@ -341,8 +340,7 @@ std::pair<bool, bool> RISCVAsmBackend::relaxLEB128(const MCAssembler &Asm,
LF.getFixups().push_back(
MCFixup::create(0, &Expr, FK_Data_leb128, Expr.getLoc()));
}
- return std::make_pair(Expr.evaluateKnownAbsolute(Value, *Asm.getLayout()),
- false);
+ return std::make_pair(Expr.evaluateKnownAbsolute(Value, Asm), false);
}
// Given a compressed control flow instruction this function returns
More information about the llvm-commits
mailing list