Skip to content

Commit 212dc7e

Browse files
MaskRayrlavaee
authored andcommitted
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.
1 parent 9411138 commit 212dc7e

File tree

10 files changed

+47
-29
lines changed

10 files changed

+47
-29
lines changed

llvm/lib/MC/MCExpr.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI,
179179
return MAI->printSpecifierExpr(OS, SE);
180180
// Used by dump features like -show-inst. Regular MCAsmStreamer output must
181181
// set MAI.
182-
OS << "specifier(" << SE.getSpecifier() << ',' << *SE.getSubExpr() << ')';
182+
OS << "specifier(" << SE.getSpecifier() << ',';
183+
SE.getSubExpr()->print(OS, nullptr);
184+
OS << ')';
183185
return;
184186
}
185187
}
@@ -189,7 +191,7 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI,
189191

190192
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
191193
LLVM_DUMP_METHOD void MCExpr::dump() const {
192-
dbgs() << *this;
194+
print(dbgs(), nullptr);
193195
dbgs() << '\n';
194196
}
195197
#endif

llvm/lib/MC/MCFragment.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ const MCSymbol *MCFragment::getAtom() const {
8484
namespace llvm {
8585

8686
raw_ostream &operator<<(raw_ostream &OS, const MCFixup &AF) {
87-
OS << "<MCFixup" << " Offset:" << AF.getOffset()
88-
<< " Value:" << *AF.getValue()
89-
<< " Kind:" << AF.getKind() << ">";
87+
OS << "<MCFixup" << " Offset:" << AF.getOffset() << " Value:";
88+
AF.getValue()->print(OS, nullptr);
89+
OS << " Kind:" << AF.getKind() << ">";
9090
return OS;
9191
}
9292

@@ -158,7 +158,8 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
158158
const auto *FF = cast<MCFillFragment>(this);
159159
OS << " Value:" << static_cast<unsigned>(FF->getValue())
160160
<< " ValueSize:" << static_cast<unsigned>(FF->getValueSize())
161-
<< " NumValues:" << FF->getNumValues();
161+
<< " NumValues:";
162+
FF->getNumValues().print(OS, nullptr);
162163
break;
163164
}
164165
case MCFragment::FT_Nops: {
@@ -178,27 +179,32 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
178179
case MCFragment::FT_Org: {
179180
const auto *OF = cast<MCOrgFragment>(this);
180181
OS << "\n ";
181-
OS << " Offset:" << OF->getOffset()
182-
<< " Value:" << static_cast<unsigned>(OF->getValue());
182+
OS << " Offset:";
183+
OF->getOffset().print(OS, nullptr);
184+
OS << " Value:" << static_cast<unsigned>(OF->getValue());
183185
break;
184186
}
185187
case MCFragment::FT_Dwarf: {
186188
const auto *OF = cast<MCDwarfLineAddrFragment>(this);
187189
OS << "\n ";
188-
OS << " AddrDelta:" << OF->getAddrDelta()
189-
<< " LineDelta:" << OF->getLineDelta();
190+
OS << " AddrDelta:";
191+
OF->getAddrDelta().print(OS, nullptr);
192+
OS << " LineDelta:" << OF->getLineDelta();
190193
break;
191194
}
192195
case MCFragment::FT_DwarfFrame: {
193196
const auto *CF = cast<MCDwarfCallFrameFragment>(this);
194197
OS << "\n ";
195-
OS << " AddrDelta:" << CF->getAddrDelta();
198+
OS << " AddrDelta:";
199+
CF->getAddrDelta().print(OS, nullptr);
196200
break;
197201
}
198202
case MCFragment::FT_LEB: {
199203
const auto *LF = cast<MCLEBFragment>(this);
200204
OS << "\n ";
201-
OS << " Value:" << LF->getValue() << " Signed:" << LF->isSigned();
205+
OS << " Value:";
206+
LF->getValue().print(OS, nullptr);
207+
OS << " Signed:" << LF->isSigned();
202208
break;
203209
}
204210
case MCFragment::FT_BoundaryAlign: {
@@ -234,7 +240,8 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
234240
case MCFragment::FT_PseudoProbe: {
235241
const auto *OF = cast<MCPseudoProbeAddrFragment>(this);
236242
OS << "\n ";
237-
OS << " AddrDelta:" << OF->getAddrDelta();
243+
OS << " AddrDelta:";
244+
OF->getAddrDelta().print(OS, nullptr);
238245
break;
239246
}
240247
}

llvm/lib/MC/MCInst.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ void MCOperand::print(raw_ostream &OS, const MCRegisterInfo *RegInfo) const {
3535
else if (isDFPImm())
3636
OS << "DFPImm:" << bit_cast<double>(getDFPImm());
3737
else if (isExpr()) {
38-
OS << "Expr:" << *getExpr();
38+
OS << "Expr:";
39+
getExpr()->print(OS, nullptr);
3940
} else if (isInst()) {
4041
OS << "Inst:(";
4142
if (const auto *Inst = getInst())

llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,10 +562,14 @@ struct LanaiOperand : public MCParsedAsmOperand {
562562
OS << "Reg: %r" << getReg() << "\n";
563563
break;
564564
case MEMORY_IMM:
565-
OS << "MemImm: " << *getMemOffset() << "\n";
565+
OS << "MemImm: ";
566+
MAI.printExpr(OS, *getMemOffset());
567+
OS << '\n';
566568
break;
567569
case MEMORY_REG_IMM:
568-
OS << "MemRegImm: " << getMemBaseReg() << "+" << *getMemOffset() << "\n";
570+
OS << "MemRegImm: " << getMemBaseReg() << "+";
571+
MAI.printExpr(OS, *getMemOffset());
572+
OS << '\n';
569573
break;
570574
case MEMORY_REG_REG:
571575
assert(getMemOffset() == nullptr);

llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
565565

566566
switch (Kind) {
567567
case KindTy::Immediate:
568-
OS << *getImm();
568+
MAI.printExpr(OS, *getImm());
569569
break;
570570
case KindTy::Register:
571571
OS << "<register " << RegName(getReg()) << ">";

llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,12 @@ class MSP430Operand : public MCParsedAsmOperand {
234234
O << "Register " << Reg;
235235
break;
236236
case k_Imm:
237-
O << "Immediate " << *Imm;
237+
O << "Immediate ";
238+
MAI.printExpr(O, *Imm);
238239
break;
239240
case k_Mem:
240241
O << "Memory ";
241-
O << *Mem.Offset << "(" << Reg << ")";
242+
MAI.printExpr(O, *Mem.Offset);
242243
break;
243244
case k_IndReg:
244245
O << "RegInd " << Reg;

llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,14 +1664,14 @@ class MipsOperand : public MCParsedAsmOperand {
16641664
switch (Kind) {
16651665
case k_Immediate:
16661666
OS << "Imm<";
1667-
OS << *Imm.Val;
1667+
MAI.printExpr(OS, *Imm.Val);
16681668
OS << ">";
16691669
break;
16701670
case k_Memory:
16711671
OS << "Mem<";
16721672
Mem.Base->print(OS, MAI);
16731673
OS << ", ";
1674-
OS << *Mem.Off;
1674+
MAI.printExpr(OS, *Mem.Off);
16751675
OS << ">";
16761676
break;
16771677
case k_RegisterIndex:

llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -791,10 +791,10 @@ void PPCOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
791791
OS << getImm();
792792
break;
793793
case Expression:
794-
OS << *getExpr();
794+
MAI.printExpr(OS, *getExpr());
795795
break;
796796
case TLSRegister:
797-
OS << *getTLSReg();
797+
MAI.printExpr(OS, *getTLSReg());
798798
break;
799799
}
800800
}

llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,8 +1026,9 @@ struct RISCVOperand final : public MCParsedAsmOperand {
10261026

10271027
switch (Kind) {
10281028
case KindTy::Immediate:
1029-
OS << "<imm: " << *Imm.Val << " " << (Imm.IsRV64 ? "rv64" : "rv32")
1030-
<< ">";
1029+
OS << "<imm: ";
1030+
MAI.printExpr(OS, *Imm.Val);
1031+
OS << ' ' << (Imm.IsRV64 ? "rv64" : "rv32") << '>';
10311032
break;
10321033
case KindTy::FPImmediate:
10331034
OS << "<fpimm: " << FPImm.Val << ">";

llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -751,12 +751,14 @@ void SystemZOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
751751
break;
752752
case KindMem: {
753753
const MemOp &Op = getMem();
754-
OS << "Mem:" << *cast<MCConstantExpr>(Op.Disp);
754+
OS << "Mem:";
755+
MAI.printExpr(OS, *cast<MCConstantExpr>(Op.Disp));
755756
if (Op.Base) {
756757
OS << "(";
757-
if (Op.MemKind == BDLMem)
758-
OS << *cast<MCConstantExpr>(Op.Length.Imm) << ",";
759-
else if (Op.MemKind == BDRMem)
758+
if (Op.MemKind == BDLMem) {
759+
MAI.printExpr(OS, *cast<MCConstantExpr>(Op.Length.Imm));
760+
OS << ',';
761+
} else if (Op.MemKind == BDRMem)
760762
OS << SystemZGNUInstPrinter::getRegisterName(Op.Length.Reg) << ",";
761763
if (Op.Index)
762764
OS << SystemZGNUInstPrinter::getRegisterName(Op.Index) << ",";

0 commit comments

Comments
 (0)