[llvm] 18b67a7 - MC: Add MCAsmInfo::printExpr to replace MCExpr::print
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 13 08:58:25 PDT 2025
Author: Fangrui Song
Date: 2025-06-13T08:58:19-07:00
New Revision: 18b67a7a102c0052e5ae0e76ef1297902ffeb22d
URL: https://github.com/llvm/llvm-project/commit/18b67a7a102c0052e5ae0e76ef1297902ffeb22d
DIFF: https://github.com/llvm/llvm-project/commit/18b67a7a102c0052e5ae0e76ef1297902ffeb22d.diff
LOG: MC: Add MCAsmInfo::printExpr to replace MCExpr::print
* Make relocation specifier code closer (MCAsmInfo defines specifiers).
* MCExpr::print has an optional MCAsmInfo argument, which is
error-prone when omitted.
* Enable MCSpecifierExpr
Added:
Modified:
llvm/include/llvm/MC/MCAsmInfo.h
llvm/lib/MC/MCAsmInfo.cpp
llvm/lib/MC/MCAsmStreamer.cpp
llvm/lib/MC/MCStreamer.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCAsmInfo.h b/llvm/include/llvm/MC/MCAsmInfo.h
index e98cd17a9df50..18303e028f623 100644
--- a/llvm/include/llvm/MC/MCAsmInfo.h
+++ b/llvm/include/llvm/MC/MCAsmInfo.h
@@ -32,6 +32,7 @@ class MCSection;
class MCStreamer;
class MCSubtargetInfo;
class MCSymbol;
+class raw_ostream;
namespace WinEH {
@@ -709,6 +710,8 @@ class LLVM_ABI MCAsmInfo {
StringRef getSpecifierName(uint32_t S) const;
std::optional<uint32_t> getSpecifierForName(StringRef Name) const;
+
+ void printExpr(raw_ostream &, const MCExpr &) const;
};
} // end namespace llvm
diff --git a/llvm/lib/MC/MCAsmInfo.cpp b/llvm/lib/MC/MCAsmInfo.cpp
index 86759c32bb752..fbacca4f56796 100644
--- a/llvm/lib/MC/MCAsmInfo.cpp
+++ b/llvm/lib/MC/MCAsmInfo.cpp
@@ -17,6 +17,7 @@
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCStreamer.h"
+#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
using namespace llvm;
@@ -148,3 +149,7 @@ std::optional<uint32_t> MCAsmInfo::getSpecifierForName(StringRef Name) const {
return It->second;
return {};
}
+
+void MCAsmInfo::printExpr(raw_ostream &OS, const MCExpr &Expr) const {
+ Expr.print(OS, this);
+}
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 4380f74318e7b..c43619d712172 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -700,7 +700,7 @@ void MCAsmStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
OS << ".set ";
Symbol->print(OS, MAI);
OS << (UseSet ? ", " : " = ");
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
@@ -713,7 +713,7 @@ void MCAsmStreamer::emitConditionalAssignment(MCSymbol *Symbol,
OS << ".lto_set_conditional ";
Symbol->print(OS, MAI);
OS << ", ";
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
@@ -1065,7 +1065,7 @@ void MCAsmStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
OS << "\t.size\t";
Symbol->print(OS, MAI);
OS << ", ";
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
@@ -1399,7 +1399,7 @@ void MCAsmStreamer::emitValueImpl(const MCExpr *Value, unsigned Size,
if (MCTargetStreamer *TS = getTargetStreamer()) {
TS->emitValue(Value);
} else {
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
}
@@ -1411,7 +1411,7 @@ void MCAsmStreamer::emitULEB128Value(const MCExpr *Value) {
return;
}
OS << "\t.uleb128 ";
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
@@ -1422,7 +1422,7 @@ void MCAsmStreamer::emitSLEB128Value(const MCExpr *Value) {
return;
}
OS << "\t.sleb128 ";
- Value->print(OS, MAI);
+ MAI->printExpr(OS, *Value);
EmitEOL();
}
@@ -1437,7 +1437,7 @@ void MCAsmStreamer::emitFill(const MCExpr &NumBytes, uint64_t FillValue,
if (!MAI->isAIX() || FillValue == 0) {
// FIXME: Emit location directives
OS << ZeroDirective;
- NumBytes.print(OS, MAI);
+ MAI->printExpr(OS, NumBytes);
if (FillValue != 0)
OS << ',' << (int)FillValue;
EmitEOL();
@@ -1460,7 +1460,7 @@ void MCAsmStreamer::emitFill(const MCExpr &NumValues, int64_t Size,
int64_t Expr, SMLoc Loc) {
// FIXME: Emit location directives
OS << "\t.fill\t";
- NumValues.print(OS, MAI);
+ MAI->printExpr(OS, NumValues);
OS << ", " << Size << ", 0x";
OS.write_hex(truncateToSize(Expr, 4));
EmitEOL();
@@ -1558,7 +1558,7 @@ void MCAsmStreamer::emitValueToOffset(const MCExpr *Offset,
SMLoc Loc) {
// FIXME: Verify that Offset is associated with the current section.
OS << ".org ";
- Offset->print(OS, MAI);
+ MAI->printExpr(OS, *Offset);
OS << ", " << (unsigned)Value;
EmitEOL();
}
@@ -2417,7 +2417,7 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst,
MCFixup &F = Fixups[i];
OS << " fixup " << char('A' + i) << " - "
<< "offset: " << F.getOffset() << ", value: ";
- F.getValue()->print(OS, MAI);
+ MAI->printExpr(OS, *F.getValue());
auto Kind = F.getKind();
if (mc::isRelocation(Kind))
OS << ", relocation type: " << Kind;
@@ -2496,11 +2496,11 @@ MCAsmStreamer::emitRelocDirective(const MCExpr &Offset, StringRef Name,
const MCExpr *Expr, SMLoc,
const MCSubtargetInfo &STI) {
OS << "\t.reloc ";
- Offset.print(OS, MAI);
+ MAI->printExpr(OS, Offset);
OS << ", " << Name;
if (Expr) {
OS << ", ";
- Expr->print(OS, MAI);
+ MAI->printExpr(OS, *Expr);
}
EmitEOL();
return std::nullopt;
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index d70639b7bfe20..5f1fd57802c7b 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -72,7 +72,7 @@ void MCTargetStreamer::emitValue(const MCExpr *Value) {
SmallString<128> Str;
raw_svector_ostream OS(Str);
- Value->print(OS, Streamer.getContext().getAsmInfo());
+ Streamer.getContext().getAsmInfo()->printExpr(OS, *Value);
Streamer.emitRawText(OS.str());
}
More information about the llvm-commits
mailing list