[llvm] e6b2528 - MCExpr: Migrate away from operator<<
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 28 14:42:03 PDT 2025
Author: Fangrui Song
Date: 2025-06-28T14:41:58-07:00
New Revision: e6b25288eb0a9374cb92b0a86ce364d0929d2752
URL: https://github.com/llvm/llvm-project/commit/e6b25288eb0a9374cb92b0a86ce364d0929d2752
DIFF: https://github.com/llvm/llvm-project/commit/e6b25288eb0a9374cb92b0a86ce364d0929d2752.diff
LOG: MCExpr: Migrate away from operator<<
Printing an expression is error-prone without a MCAsmInfo argument.
Remove the operator<< overload and replace callers with
MCAsmInfo::printExpr. Some callers are changed to MCExpr::print, with
the goal of eventually making it private.
Added:
Modified:
llvm/lib/MC/MCExpr.cpp
llvm/lib/MC/MCFragment.cpp
llvm/lib/MC/MCInst.cpp
llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp
index aca3ec6bf0a86..76039129e0fcf 100644
--- a/llvm/lib/MC/MCExpr.cpp
+++ b/llvm/lib/MC/MCExpr.cpp
@@ -179,7 +179,9 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI,
return MAI->printSpecifierExpr(OS, SE);
// Used by dump features like -show-inst. Regular MCAsmStreamer output must
// set MAI.
- OS << "specifier(" << SE.getSpecifier() << ',' << *SE.getSubExpr() << ')';
+ OS << "specifier(" << SE.getSpecifier() << ',';
+ SE.getSubExpr()->print(OS, nullptr);
+ OS << ')';
return;
}
}
@@ -189,7 +191,7 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI,
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void MCExpr::dump() const {
- dbgs() << *this;
+ print(dbgs(), nullptr);
dbgs() << '\n';
}
#endif
diff --git a/llvm/lib/MC/MCFragment.cpp b/llvm/lib/MC/MCFragment.cpp
index aa4dec0a8e9d9..32c1c80478626 100644
--- a/llvm/lib/MC/MCFragment.cpp
+++ b/llvm/lib/MC/MCFragment.cpp
@@ -84,9 +84,9 @@ const MCSymbol *MCFragment::getAtom() const {
namespace llvm {
raw_ostream &operator<<(raw_ostream &OS, const MCFixup &AF) {
- OS << "<MCFixup" << " Offset:" << AF.getOffset()
- << " Value:" << *AF.getValue()
- << " Kind:" << AF.getKind() << ">";
+ OS << "<MCFixup" << " Offset:" << AF.getOffset() << " Value:";
+ AF.getValue()->print(OS, nullptr);
+ OS << " Kind:" << AF.getKind() << ">";
return OS;
}
@@ -158,7 +158,8 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
const auto *FF = cast<MCFillFragment>(this);
OS << " Value:" << static_cast<unsigned>(FF->getValue())
<< " ValueSize:" << static_cast<unsigned>(FF->getValueSize())
- << " NumValues:" << FF->getNumValues();
+ << " NumValues:";
+ FF->getNumValues().print(OS, nullptr);
break;
}
case MCFragment::FT_Nops: {
@@ -178,27 +179,32 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
case MCFragment::FT_Org: {
const auto *OF = cast<MCOrgFragment>(this);
OS << "\n ";
- OS << " Offset:" << OF->getOffset()
- << " Value:" << static_cast<unsigned>(OF->getValue());
+ OS << " Offset:";
+ OF->getOffset().print(OS, nullptr);
+ OS << " Value:" << static_cast<unsigned>(OF->getValue());
break;
}
case MCFragment::FT_Dwarf: {
const auto *OF = cast<MCDwarfLineAddrFragment>(this);
OS << "\n ";
- OS << " AddrDelta:" << OF->getAddrDelta()
- << " LineDelta:" << OF->getLineDelta();
+ OS << " AddrDelta:";
+ OF->getAddrDelta().print(OS, nullptr);
+ OS << " LineDelta:" << OF->getLineDelta();
break;
}
case MCFragment::FT_DwarfFrame: {
const auto *CF = cast<MCDwarfCallFrameFragment>(this);
OS << "\n ";
- OS << " AddrDelta:" << CF->getAddrDelta();
+ OS << " AddrDelta:";
+ CF->getAddrDelta().print(OS, nullptr);
break;
}
case MCFragment::FT_LEB: {
const auto *LF = cast<MCLEBFragment>(this);
OS << "\n ";
- OS << " Value:" << LF->getValue() << " Signed:" << LF->isSigned();
+ OS << " Value:";
+ LF->getValue().print(OS, nullptr);
+ OS << " Signed:" << LF->isSigned();
break;
}
case MCFragment::FT_BoundaryAlign: {
@@ -234,7 +240,8 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
case MCFragment::FT_PseudoProbe: {
const auto *OF = cast<MCPseudoProbeAddrFragment>(this);
OS << "\n ";
- OS << " AddrDelta:" << OF->getAddrDelta();
+ OS << " AddrDelta:";
+ OF->getAddrDelta().print(OS, nullptr);
break;
}
}
diff --git a/llvm/lib/MC/MCInst.cpp b/llvm/lib/MC/MCInst.cpp
index ced41601618a2..8ee174c751fb0 100644
--- a/llvm/lib/MC/MCInst.cpp
+++ b/llvm/lib/MC/MCInst.cpp
@@ -35,7 +35,8 @@ void MCOperand::print(raw_ostream &OS, const MCRegisterInfo *RegInfo) const {
else if (isDFPImm())
OS << "DFPImm:" << bit_cast<double>(getDFPImm());
else if (isExpr()) {
- OS << "Expr:" << *getExpr();
+ OS << "Expr:";
+ getExpr()->print(OS, nullptr);
} else if (isInst()) {
OS << "Inst:(";
if (const auto *Inst = getInst())
diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
index 1924567ea8969..cef77f1c512f6 100644
--- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
+++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
@@ -562,10 +562,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
OS << "Reg: %r" << getReg() << "\n";
break;
case MEMORY_IMM:
- OS << "MemImm: " << *getMemOffset() << "\n";
+ OS << "MemImm: ";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << '\n';
break;
case MEMORY_REG_IMM:
- OS << "MemRegImm: " << getMemBaseReg() << "+" << *getMemOffset() << "\n";
+ OS << "MemRegImm: " << getMemBaseReg() << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << '\n';
break;
case MEMORY_REG_REG:
assert(getMemOffset() == nullptr);
diff --git a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
index 27505ddff6e3a..5be4713b349ee 100644
--- a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+++ b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
@@ -565,7 +565,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
switch (Kind) {
case KindTy::Immediate:
- OS << *getImm();
+ MAI.printExpr(OS, *getImm());
break;
case KindTy::Register:
OS << "<register " << RegName(getReg()) << ">";
diff --git a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
index 73b6d568017c8..38d22eda5f171 100644
--- a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
+++ b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
@@ -234,11 +234,12 @@ class MSP430Operand : public MCParsedAsmOperand {
O << "Register " << Reg;
break;
case k_Imm:
- O << "Immediate " << *Imm;
+ O << "Immediate ";
+ MAI.printExpr(O, *Imm);
break;
case k_Mem:
O << "Memory ";
- O << *Mem.Offset << "(" << Reg << ")";
+ MAI.printExpr(O, *Mem.Offset);
break;
case k_IndReg:
O << "RegInd " << Reg;
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index 30b5f6d98d651..01e4d17f6236d 100644
--- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -1664,14 +1664,14 @@ class MipsOperand : public MCParsedAsmOperand {
switch (Kind) {
case k_Immediate:
OS << "Imm<";
- OS << *Imm.Val;
+ MAI.printExpr(OS, *Imm.Val);
OS << ">";
break;
case k_Memory:
OS << "Mem<";
Mem.Base->print(OS, MAI);
OS << ", ";
- OS << *Mem.Off;
+ MAI.printExpr(OS, *Mem.Off);
OS << ">";
break;
case k_RegisterIndex:
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index aab8247c8f0e4..58766b16e86fe 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -791,10 +791,10 @@ void PPCOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
OS << getImm();
break;
case Expression:
- OS << *getExpr();
+ MAI.printExpr(OS, *getExpr());
break;
case TLSRegister:
- OS << *getTLSReg();
+ MAI.printExpr(OS, *getTLSReg());
break;
}
}
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index 13f9d534d8bef..7ab7f94a8fed6 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -1026,8 +1026,9 @@ struct RISCVOperand final : public MCParsedAsmOperand {
switch (Kind) {
case KindTy::Immediate:
- OS << "<imm: " << *Imm.Val << " " << (Imm.IsRV64 ? "rv64" : "rv32")
- << ">";
+ OS << "<imm: ";
+ MAI.printExpr(OS, *Imm.Val);
+ OS << ' ' << (Imm.IsRV64 ? "rv64" : "rv32") << '>';
break;
case KindTy::FPImmediate:
OS << "<fpimm: " << FPImm.Val << ">";
diff --git a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
index 155ec154983a9..597ce8eabfeb2 100644
--- a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
+++ b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
@@ -751,12 +751,14 @@ void SystemZOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
break;
case KindMem: {
const MemOp &Op = getMem();
- OS << "Mem:" << *cast<MCConstantExpr>(Op.Disp);
+ OS << "Mem:";
+ MAI.printExpr(OS, *cast<MCConstantExpr>(Op.Disp));
if (Op.Base) {
OS << "(";
- if (Op.MemKind == BDLMem)
- OS << *cast<MCConstantExpr>(Op.Length.Imm) << ",";
- else if (Op.MemKind == BDRMem)
+ if (Op.MemKind == BDLMem) {
+ MAI.printExpr(OS, *cast<MCConstantExpr>(Op.Length.Imm));
+ OS << ',';
+ } else if (Op.MemKind == BDRMem)
OS << SystemZGNUInstPrinter::getRegisterName(Op.Length.Reg) << ",";
if (Op.Index)
OS << SystemZGNUInstPrinter::getRegisterName(Op.Index) << ",";
More information about the llvm-commits
mailing list