[llvm] e878b7e - MCParsedAsmOperand::print: Add MCAsmInfo parameter
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 28 12:05:38 PDT 2025
Author: Fangrui Song
Date: 2025-06-28T12:05:33-07:00
New Revision: e878b7e3492b010ba5ade6cab42dfad02b903ae1
URL: https://github.com/llvm/llvm-project/commit/e878b7e3492b010ba5ade6cab42dfad02b903ae1
DIFF: https://github.com/llvm/llvm-project/commit/e878b7e3492b010ba5ade6cab42dfad02b903ae1.diff
LOG: MCParsedAsmOperand::print: Add MCAsmInfo parameter
so that subclasses can provide the appropriate MCAsmInfo to print
MCExpr objects.
At present, llvm/utils/TableGen/AsmMatcherEmitter.cpp constucts a
generic MCAsmInfo.
Added:
Modified:
llvm/include/llvm/MC/MCParser/MCParsedAsmOperand.h
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/lib/MC/MCParser/MCAsmParser.cpp
llvm/lib/MC/MCParser/MasmParser.cpp
llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
llvm/lib/Target/M68k/AsmParser/M68kAsmParser.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/Sparc/AsmParser/SparcAsmParser.cpp
llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
llvm/lib/Target/X86/AsmParser/X86Operand.h
llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
llvm/utils/TableGen/AsmMatcherEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCParser/MCParsedAsmOperand.h b/llvm/include/llvm/MC/MCParser/MCParsedAsmOperand.h
index 7faa008eced82..27ed2a6276496 100644
--- a/llvm/include/llvm/MC/MCParser/MCParsedAsmOperand.h
+++ b/llvm/include/llvm/MC/MCParser/MCParsedAsmOperand.h
@@ -16,6 +16,7 @@
namespace llvm {
+class MCAsmInfo;
class MCRegister;
class raw_ostream;
@@ -89,7 +90,7 @@ class LLVM_ABI MCParsedAsmOperand {
virtual SMLoc getOffsetOfLoc() const { return SMLoc(); }
/// print - Print a debug representation of the operand to the given stream.
- virtual void print(raw_ostream &OS) const = 0;
+ virtual void print(raw_ostream &, const MCAsmInfo &) const = 0;
/// dump - Print to the debug stream.
virtual void dump() const;
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 3aff203ccfa55..91914d0cb3746 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -2260,7 +2260,7 @@ bool AsmParser::parseAndMatchAndEmitTargetInstruction(ParseStatementInfo &Info,
for (unsigned i = 0; i != Info.ParsedOperands.size(); ++i) {
if (i != 0)
OS << ", ";
- Info.ParsedOperands[i]->print(OS);
+ Info.ParsedOperands[i]->print(OS, MAI);
}
OS << "]";
diff --git a/llvm/lib/MC/MCParser/MCAsmParser.cpp b/llvm/lib/MC/MCParser/MCAsmParser.cpp
index f6ce231730ae1..68b9cab2492f5 100644
--- a/llvm/lib/MC/MCParser/MCAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/MCAsmParser.cpp
@@ -10,6 +10,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Config/llvm-config.h"
+#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCParser/AsmLexer.h"
#include "llvm/MC/MCParser/MCParsedAsmOperand.h"
#include "llvm/MC/MCParser/MCTargetAsmParser.h"
@@ -166,6 +167,6 @@ void MCParsedAsmOperand::dump() const {
// Cannot completely remove virtual function even in release mode.
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
dbgs() << " ";
- print(dbgs());
+ print(dbgs(), MCAsmInfo());
#endif
}
diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index c596006ba9a0c..f4684e64e8628 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -2317,7 +2317,7 @@ bool MasmParser::parseStatement(ParseStatementInfo &Info,
for (unsigned i = 0; i != Info.ParsedOperands.size(); ++i) {
if (i != 0)
OS << ", ";
- Info.ParsedOperands[i]->print(OS);
+ Info.ParsedOperands[i]->print(OS, MAI);
}
OS << "]";
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 70b27f87720f9..e989892b9e056 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -2294,7 +2294,7 @@ class AArch64Operand : public MCParsedAsmOperand {
Inst.addOperand(MCOperand::createImm((MCE->getValue() - 90) / 180));
}
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
static std::unique_ptr<AArch64Operand>
CreateToken(StringRef Str, SMLoc S, MCContext &Ctx, bool IsSuffix = false) {
@@ -2584,7 +2584,7 @@ class AArch64Operand : public MCParsedAsmOperand {
} // end anonymous namespace.
-void AArch64Operand::print(raw_ostream &OS) const {
+void AArch64Operand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
switch (Kind) {
case k_FPImm:
OS << "<fpimm " << getFPImm().bitcastToAPInt().getZExtValue();
@@ -2601,12 +2601,12 @@ void AArch64Operand::print(raw_ostream &OS) const {
break;
}
case k_Immediate:
- MCAsmInfo().printExpr(OS, *getImm());
+ MAI.printExpr(OS, *getImm());
break;
case k_ShiftedImm: {
unsigned Shift = getShiftedImmShift();
OS << "<shiftedimm ";
- MCAsmInfo().printExpr(OS, *getShiftedImmVal());
+ MAI.printExpr(OS, *getShiftedImmVal());
OS << ", lsl #" << AArch64_AM::getShiftValue(Shift) << ">";
break;
}
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index d0557ae53bf76..14fec71996a0e 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -1152,7 +1152,7 @@ class AMDGPUOperand : public MCParsedAsmOperand {
// clang-format on
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case Register:
OS << "<register " << AMDGPUInstPrinter::getRegisterName(getReg())
@@ -1170,7 +1170,7 @@ class AMDGPUOperand : public MCParsedAsmOperand {
break;
case Expression:
OS << "<expr ";
- MCAsmInfo().printExpr(OS, *Expr);
+ MAI.printExpr(OS, *Expr);
OS << '>';
break;
}
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index 8c54dbca2ad0d..f9df8d133e14a 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -3629,7 +3629,7 @@ class ARMOperand : public MCParsedAsmOperand {
Inst.addOperand(MCOperand::createImm(Imm == 48 ? 1 : 0));
}
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
static std::unique_ptr<ARMOperand> CreateITMask(unsigned Mask, SMLoc S,
ARMAsmParser &Parser) {
@@ -3979,7 +3979,7 @@ class ARMOperand : public MCParsedAsmOperand {
} // end anonymous namespace.
-void ARMOperand::print(raw_ostream &OS) const {
+void ARMOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
auto RegName = [](MCRegister Reg) {
if (Reg)
return ARMInstPrinter::getRegisterName(Reg);
@@ -4024,7 +4024,7 @@ void ARMOperand::print(raw_ostream &OS) const {
OS << "<banked reg: " << getBankedReg() << ">";
break;
case k_Immediate:
- MCAsmInfo().printExpr(OS, *getImm());
+ MAI.printExpr(OS, *getImm());
break;
case k_MemBarrierOpt:
OS << "<ARM_MB::" << MemBOptToString(getMemBarrierOpt(), false) << ">";
@@ -4041,7 +4041,7 @@ void ARMOperand::print(raw_ostream &OS) const {
OS << " base:" << RegName(Memory.BaseRegNum);
if (Memory.OffsetImm) {
OS << " offset-imm:";
- MCAsmInfo().printExpr(OS, *Memory.OffsetImm);
+ MAI.printExpr(OS, *Memory.OffsetImm);
}
if (Memory.OffsetRegNum)
OS << " offset-reg:" << (Memory.isNegative ? "-" : "")
@@ -4097,7 +4097,7 @@ void ARMOperand::print(raw_ostream &OS) const {
break;
case k_ConstantPoolImmediate:
OS << "<constant_pool_imm #";
- MCAsmInfo().printExpr(OS, *getConstantPoolImm());
+ MAI.printExpr(OS, *getConstantPoolImm());
break;
case k_BitfieldDescriptor:
OS << "<bitfield " << "lsb: " << Bitfield.LSB
diff --git a/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp b/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
index b58b5e3039095..4e00b192b875e 100644
--- a/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
+++ b/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
@@ -247,7 +247,7 @@ class AVROperand : public MCParsedAsmOperand {
SMLoc getStartLoc() const override { return Start; }
SMLoc getEndLoc() const override { return End; }
- void print(raw_ostream &O) const override {
+ void print(raw_ostream &O, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Token:
O << "Token: \"" << getToken() << "\"";
@@ -257,14 +257,14 @@ class AVROperand : public MCParsedAsmOperand {
break;
case k_Immediate:
O << "Immediate: \"";
- MCAsmInfo().printExpr(O, *getImm());
+ MAI.printExpr(O, *getImm());
O << "\"";
break;
case k_Memri: {
// only manually print the size for non-negative values,
// as the sign is inserted automatically.
O << "Memri: \"" << getReg() << '+';
- MCAsmInfo().printExpr(O, *getImm());
+ MAI.printExpr(O, *getImm());
O << "\"";
break;
}
diff --git a/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp b/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
index 8263fa529bd37..88c92da8e95b4 100644
--- a/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
+++ b/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
@@ -165,10 +165,10 @@ struct BPFOperand : public MCParsedAsmOperand {
return Tok;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case Immediate:
- MCAsmInfo().printExpr(OS, *getImm());
+ MAI.printExpr(OS, *getImm());
break;
case Register:
OS << "<register x";
diff --git a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
index 2ac1212e4bfd6..c74011b164758 100644
--- a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
+++ b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/CSKYInstPrinter.h"
+#include "MCTargetDesc/CSKYMCAsmInfo.h"
#include "MCTargetDesc/CSKYMCExpr.h"
#include "MCTargetDesc/CSKYMCTargetDesc.h"
#include "MCTargetDesc/CSKYTargetStreamer.h"
@@ -430,7 +431,7 @@ struct CSKYOperand : public MCParsedAsmOperand {
return Tok;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
auto RegName = [](MCRegister Reg) {
if (Reg)
return CSKYInstPrinter::getRegisterName(Reg);
diff --git a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
index c423dca90a4ab..b94b1484205ae 100644
--- a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
+++ b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
@@ -423,7 +423,7 @@ struct HexagonOperand : public MCParsedAsmOperand {
return StringRef(Tok.Data, Tok.Length);
}
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
static std::unique_ptr<HexagonOperand> CreateToken(MCContext &Context,
StringRef Str, SMLoc S) {
@@ -456,7 +456,7 @@ struct HexagonOperand : public MCParsedAsmOperand {
} // end anonymous namespace
-void HexagonOperand::print(raw_ostream &OS) const {
+void HexagonOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
switch (Kind) {
case Immediate:
HexagonMCAsmInfo(Triple()).printExpr(OS, *getImm());
diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
index a62edffe11397..1924567ea8969 100644
--- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
+++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
@@ -550,7 +550,7 @@ struct LanaiOperand : public MCParsedAsmOperand {
assert(false && "Operand type not supported.");
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case IMMEDIATE:
OS << "Imm: " << getImm() << "\n";
diff --git a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
index f5223a599737e..27505ddff6e3a 100644
--- a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+++ b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
@@ -555,7 +555,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
return Tok;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
auto RegName = [](MCRegister Reg) {
if (Reg)
return LoongArchInstPrinter::getRegisterName(Reg);
diff --git a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
index e264d4e521cc4..16f97d971840b 100644
--- a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
+++ b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
@@ -8,6 +8,7 @@
#include "M68kInstrInfo.h"
#include "M68kRegisterInfo.h"
+#include "MCTargetDesc/M68kMCAsmInfo.h"
#include "TargetInfo/M68kTargetInfo.h"
#include "llvm/MC/MCContext.h"
@@ -144,7 +145,7 @@ class M68kOperand : public MCParsedAsmOperand {
SMLoc getStartLoc() const override { return Start; }
SMLoc getEndLoc() const override { return End; }
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
bool isMem() const override { return false; }
bool isMemOp() const { return Kind == KindTy::MemOp; }
@@ -1051,7 +1052,7 @@ bool M68kAsmParser::matchAndEmitInstruction(SMLoc Loc, unsigned &Opcode,
}
}
-void M68kOperand::print(raw_ostream &OS) const {
+void M68kOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
switch (Kind) {
case KindTy::Invalid:
OS << "invalid";
diff --git a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
index 5a4121f7cafd7..73b6d568017c8 100644
--- a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
+++ b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
@@ -6,9 +6,10 @@
//
//===----------------------------------------------------------------------===//
+#include "MCTargetDesc/MSP430MCAsmInfo.h"
+#include "MCTargetDesc/MSP430MCTargetDesc.h"
#include "MSP430.h"
#include "MSP430RegisterInfo.h"
-#include "MCTargetDesc/MSP430MCTargetDesc.h"
#include "TargetInfo/MSP430TargetInfo.h"
#include "llvm/ADT/APInt.h"
@@ -224,7 +225,7 @@ class MSP430Operand : public MCParsedAsmOperand {
SMLoc getStartLoc() const override { return Start; }
SMLoc getEndLoc() const override { return End; }
- void print(raw_ostream &O) const override {
+ void print(raw_ostream &O, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Tok:
O << "Token " << Tok;
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index cf4b55466a359..30b5f6d98d651 100644
--- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -1660,7 +1660,7 @@ class MipsOperand : public MCParsedAsmOperand {
/// getEndLoc - Get the location of the last token of this operand.
SMLoc getEndLoc() const override { return EndLoc; }
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Immediate:
OS << "Imm<";
@@ -1669,7 +1669,7 @@ class MipsOperand : public MCParsedAsmOperand {
break;
case k_Memory:
OS << "Mem<";
- Mem.Base->print(OS);
+ Mem.Base->print(OS, MAI);
OS << ", ";
OS << *Mem.Off;
OS << ">";
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index 6a4fc64a3f80c..aab8247c8f0e4 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -666,7 +666,7 @@ struct PPCOperand : public MCParsedAsmOperand {
return StringRef(Tok.Data, Tok.Length);
}
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
static std::unique_ptr<PPCOperand> CreateToken(StringRef Str, SMLoc S,
bool IsPPC64) {
@@ -781,7 +781,7 @@ struct PPCOperand : public MCParsedAsmOperand {
} // end anonymous namespace.
-void PPCOperand::print(raw_ostream &OS) const {
+void PPCOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
switch (Kind) {
case Token:
OS << "'" << getToken() << "'";
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index e5d8ab07891ac..13f9d534d8bef 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -1016,7 +1016,7 @@ struct RISCVOperand final : public MCParsedAsmOperand {
return Fence.Val;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
auto RegName = [](MCRegister Reg) {
if (Reg)
return RISCVInstPrinter::getRegisterName(Reg);
diff --git a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
index 0ef78f3e94d7a..7c1db3cfcd6b4 100644
--- a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
+++ b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
@@ -373,7 +373,7 @@ class SparcOperand : public MCParsedAsmOperand {
return EndLoc;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Token: OS << "Token: " << getToken() << "\n"; break;
case k_Register: OS << "Reg: #" << getReg() << "\n"; break;
@@ -382,7 +382,7 @@ class SparcOperand : public MCParsedAsmOperand {
<< getMemOffsetReg() << "\n"; break;
case k_MemoryImm: assert(getMemOff() != nullptr);
OS << "Mem: " << getMemBase() << "+";
- MCAsmInfo().printExpr(OS, *getMemOff());
+ MAI.printExpr(OS, *getMemOff());
OS << "\n";
break;
case k_ASITag:
diff --git a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
index e22e1d2cfac51..155ec154983a9 100644
--- a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
+++ b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
@@ -294,7 +294,7 @@ class SystemZOperand : public MCParsedAsmOperand {
// Override MCParsedAsmOperand.
SMLoc getStartLoc() const override { return StartLoc; }
SMLoc getEndLoc() const override { return EndLoc; }
- void print(raw_ostream &OS) const override;
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override;
/// getLocRange - Get the range between the first and last token of this
/// operand.
@@ -729,13 +729,7 @@ static struct InsnMatchEntry InsnMatchTable[] = {
{ MCK_U48Imm, MCK_VR128, MCK_BDAddr64Disp12, MCK_U8Imm } }
};
-static void printMCExpr(const MCExpr *E, raw_ostream &OS) {
- if (!E)
- return;
- MCAsmInfo().printExpr(OS, *E);
-}
-
-void SystemZOperand::print(raw_ostream &OS) const {
+void SystemZOperand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
switch (Kind) {
case KindToken:
OS << "Token:" << getToken();
@@ -745,14 +739,14 @@ void SystemZOperand::print(raw_ostream &OS) const {
break;
case KindImm:
OS << "Imm:";
- printMCExpr(getImm(), OS);
+ MAI.printExpr(OS, *getImm());
break;
case KindImmTLS:
OS << "ImmTLS:";
- printMCExpr(getImmTLS().Imm, OS);
+ MAI.printExpr(OS, *getImmTLS().Imm);
if (getImmTLS().Sym) {
OS << ", ";
- printMCExpr(getImmTLS().Sym, OS);
+ MAI.printExpr(OS, *getImmTLS().Sym);
}
break;
case KindMem: {
diff --git a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
index 7b206e6b100a8..20f561a8dac34 100644
--- a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
+++ b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
@@ -409,7 +409,7 @@ class VEOperand : public MCParsedAsmOperand {
/// getEndLoc - Get the location of the last token of this operand.
SMLoc getEndLoc() const override { return EndLoc; }
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Token:
OS << "Token: " << getToken() << "\n";
@@ -422,29 +422,43 @@ class VEOperand : public MCParsedAsmOperand {
break;
case k_MemoryRegRegImm:
assert(getMemOffset() != nullptr);
- OS << "Mem: #" << getMemBase() << "+#" << getMemIndexReg() << "+"
- << *getMemOffset() << "\n";
+ OS << "Mem: #" << getMemBase() << "+#" << getMemIndexReg() << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_MemoryRegImmImm:
assert(getMemIndex() != nullptr && getMemOffset() != nullptr);
- OS << "Mem: #" << getMemBase() << "+" << *getMemIndex() << "+"
- << *getMemOffset() << "\n";
+ OS << "Mem: #" << getMemBase() << "+";
+ MAI.printExpr(OS, *getMemIndex());
+ OS << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_MemoryZeroRegImm:
assert(getMemOffset() != nullptr);
- OS << "Mem: 0+#" << getMemIndexReg() << "+" << *getMemOffset() << "\n";
+ OS << "Mem: 0+#" << getMemIndexReg() << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_MemoryZeroImmImm:
assert(getMemIndex() != nullptr && getMemOffset() != nullptr);
- OS << "Mem: 0+" << *getMemIndex() << "+" << *getMemOffset() << "\n";
+ OS << "Mem: 0+";
+ MAI.printExpr(OS, *getMemIndex());
+ OS << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_MemoryRegImm:
assert(getMemOffset() != nullptr);
- OS << "Mem: #" << getMemBase() << "+" << *getMemOffset() << "\n";
+ OS << "Mem: #" << getMemBase() << "+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_MemoryZeroImm:
assert(getMemOffset() != nullptr);
- OS << "Mem: 0+" << *getMemOffset() << "\n";
+ OS << "Mem: 0+";
+ MAI.printExpr(OS, *getMemOffset());
+ OS << "\n";
break;
case k_CCOp:
OS << "CCOp: " << getCCVal() << "\n";
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index 5bcda8a411270..9cebffe993da5 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -180,7 +180,7 @@ struct WebAssemblyOperand : public MCParsedAsmOperand {
}
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case Token:
OS << "Tok:" << Tok.Tok;
diff --git a/llvm/lib/Target/X86/AsmParser/X86Operand.h b/llvm/lib/Target/X86/AsmParser/X86Operand.h
index c143ebd6eae50..89ac53e0ecac9 100644
--- a/llvm/lib/Target/X86/AsmParser/X86Operand.h
+++ b/llvm/lib/Target/X86/AsmParser/X86Operand.h
@@ -107,8 +107,7 @@ struct X86Operand final : public MCParsedAsmOperand {
/// getOffsetOfLoc - Get the location of the offset operator.
SMLoc getOffsetOfLoc() const override { return OffsetOfLoc; }
- void print(raw_ostream &OS) const override {
-
+ void print(raw_ostream &OS, const MCAsmInfo &) const override {
auto PrintImmValue = [&](const MCExpr *Val, const char *VName) {
if (Val->getKind() == MCExpr::Constant) {
if (auto Imm = cast<MCConstantExpr>(Val)->getValue())
diff --git a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
index 28ce2a7334299..4001b2cfa2a6d 100644
--- a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
+++ b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
@@ -302,10 +302,10 @@ struct XtensaOperand : public MCParsedAsmOperand {
return Tok;
}
- void print(raw_ostream &OS) const override {
+ void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case Immediate:
- MCAsmInfo().printExpr(OS, *getImm());
+ MAI.printExpr(OS, *getImm());
break;
case Register:
OS << "<register x";
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index f916998fc3c10..cecaa3b785895 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -3724,7 +3724,8 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
"<< ActualIdx);\n";
OS << " if (ActualIdx < Operands.size())\n";
OS << " DEBUG_WITH_TYPE(\"asm-matcher\", dbgs() << \" (\";\n";
- OS << " Operands[ActualIdx]->print(dbgs()); dbgs() << "
+ OS << " Operands[ActualIdx]->print(dbgs(), "
+ "MCAsmInfo()); dbgs() << "
"\"): \");\n";
OS << " else\n";
OS << " DEBUG_WITH_TYPE(\"asm-matcher\", dbgs() << \": \");\n";
More information about the llvm-commits
mailing list