diff --git a/include/llvm/MC/MCExpr.h b/include/llvm/MC/MCExpr.h index 9f9f2670f3b..859cab52941 100644 --- a/include/llvm/MC/MCExpr.h +++ b/include/llvm/MC/MCExpr.h @@ -14,6 +14,7 @@ #include "llvm/Support/DataTypes.h" namespace llvm { +class MCAsmInfo; class MCContext; class MCSymbol; class MCValue; @@ -49,7 +50,7 @@ public: /// @name Utility Methods /// @{ - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCAsmInfo *MAI) const; void dump() const; /// @} diff --git a/include/llvm/MC/MCInst.h b/include/llvm/MC/MCInst.h index 7c1cb136d69..a6bd45b493b 100644 --- a/include/llvm/MC/MCInst.h +++ b/include/llvm/MC/MCInst.h @@ -22,6 +22,7 @@ namespace llvm { class raw_ostream; +class MCAsmInfo; class MCExpr; /// MCOperand - Instances of this class represent operands of the MCInst class. @@ -121,7 +122,7 @@ public: return Op; } - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCAsmInfo *MAI) const; void dump() const; }; @@ -147,7 +148,7 @@ public: Operands.push_back(Op); } - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCAsmInfo *MAI) const; void dump() const; }; diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index 631fa12f3f3..5dd7d68585c 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -19,6 +19,7 @@ #include "llvm/Support/DataTypes.h" namespace llvm { + class MCAsmInfo; class MCSection; class MCContext; class raw_ostream; @@ -106,7 +107,7 @@ namespace llvm { /// @} /// print - Print the value to the stream \arg OS. - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCAsmInfo *MAI) const; /// dump - Print the value to stderr. void dump() const; diff --git a/include/llvm/MC/MCValue.h b/include/llvm/MC/MCValue.h index 9d71209f807..62aca6e3a6f 100644 --- a/include/llvm/MC/MCValue.h +++ b/include/llvm/MC/MCValue.h @@ -55,7 +55,7 @@ public: const MCSection *getAssociatedSection() const; /// print - Print the value to the stream \arg OS. - void print(raw_ostream &OS) const; + void print(raw_ostream &OS, const MCAsmInfo *MAI) const; /// dump - Print the value to stderr. void dump() const; diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index cc77c6f8acf..17c591b01cd 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -101,7 +101,8 @@ void MCAsmStreamer::EmitLabel(MCSymbol *Symbol) { assert(Symbol->isUndefined() && "Cannot define a symbol twice!"); assert(CurSection && "Cannot emit before setting section!"); - OS << Symbol << ":\n"; + Symbol->print(OS, &MAI); + OS << ":\n"; Symbol->setSection(*CurSection); } @@ -118,8 +119,9 @@ void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) { assert((Symbol->isUndefined() || Symbol->isAbsolute()) && "Cannot define a symbol twice!"); - OS << Symbol << " = "; - Value->print(OS); + Symbol->print(OS, &MAI); + OS << " = "; + Value->print(OS, &MAI); OS << '\n'; } @@ -140,17 +142,22 @@ void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol, case WeakReference: OS << ".weak_reference"; break; } - OS << ' ' << Symbol << '\n'; + OS << ' '; + Symbol->print(OS, &MAI); + OS << '\n'; } void MCAsmStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) { - OS << ".desc" << ' ' << Symbol << ',' << DescValue << '\n'; + OS << ".desc" << ' '; + Symbol->print(OS, &MAI); + OS << ',' << DescValue << '\n'; } void MCAsmStreamer::EmitCommonSymbol(MCSymbol *Symbol, unsigned Size, unsigned ByteAlignment) { - OS << ".comm"; - OS << ' ' << Symbol << ',' << Size; + OS << ".comm "; + Symbol->print(OS, &MAI); + OS << ',' << Size; if (ByteAlignment != 0) OS << ',' << Log2_32(ByteAlignment); OS << '\n'; @@ -166,7 +173,9 @@ void MCAsmStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol, OS << MOSection->getSegmentName() << "," << MOSection->getSectionName(); if (Symbol != NULL) { - OS << ',' << Symbol << ',' << Size; + OS << ','; + Symbol->print(OS, &MAI); + OS << ',' << Size; if (ByteAlignment != 0) OS << ',' << Log2_32(ByteAlignment); } @@ -192,7 +201,7 @@ void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size) { } OS << ' '; - truncateToSize(Value, Size)->print(OS); + truncateToSize(Value, Size)->print(OS, &MAI); OS << '\n'; } @@ -248,7 +257,7 @@ void MCAsmStreamer::EmitValueToOffset(const MCExpr *Offset, unsigned char Value) { // FIXME: Verify that Offset is associated with the current section. OS << ".org "; - Offset->print(OS); + Offset->print(OS, &MAI); OS << ", " << (unsigned) Value << '\n'; } @@ -281,7 +290,7 @@ void MCAsmStreamer::EmitInstruction(const MCInst &Inst) { // Otherwise fall back to a structural printing for now. Eventually we should // always have access to the target specific printer. - Inst.print(OS); + Inst.print(OS, &MAI); OS << '\n'; } diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index bc4241560e8..9a1b641fb49 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -14,14 +14,14 @@ #include "llvm/Support/raw_ostream.h" using namespace llvm; -void MCExpr::print(raw_ostream &OS) const { +void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI) const { switch (getKind()) { case MCExpr::Constant: OS << cast(*this).getValue(); return; case MCExpr::SymbolRef: - cast(*this).getSymbol().print(OS); + cast(*this).getSymbol().print(OS, MAI); return; case MCExpr::Unary: { @@ -33,14 +33,14 @@ void MCExpr::print(raw_ostream &OS) const { case MCUnaryExpr::Not: OS << '~'; break; case MCUnaryExpr::Plus: OS << '+'; break; } - UE.getSubExpr()->print(OS); + UE.getSubExpr()->print(OS, MAI); return; } case MCExpr::Binary: { const MCBinaryExpr &BE = cast(*this); OS << '('; - BE.getLHS()->print(OS); + BE.getLHS()->print(OS, MAI); OS << ' '; switch (BE.getOpcode()) { default: assert(0 && "Invalid opcode!"); @@ -64,7 +64,7 @@ void MCExpr::print(raw_ostream &OS) const { case MCBinaryExpr::Xor: OS << '^'; break; } OS << ' '; - BE.getRHS()->print(OS); + BE.getRHS()->print(OS, MAI); OS << ')'; return; } @@ -74,7 +74,7 @@ void MCExpr::print(raw_ostream &OS) const { } void MCExpr::dump() const { - print(errs()); + print(errs(), 0); errs() << '\n'; } diff --git a/lib/MC/MCInst.cpp b/lib/MC/MCInst.cpp index ec061463b75..f19056bc9ad 100644 --- a/lib/MC/MCInst.cpp +++ b/lib/MC/MCInst.cpp @@ -13,7 +13,7 @@ using namespace llvm; -void MCOperand::print(raw_ostream &OS) const { +void MCOperand::print(raw_ostream &OS, const MCAsmInfo *MAI) const { OS << "print(OS); + getExpr()->print(OS, MAI); OS << ")"; } else OS << "UNDEFINED"; @@ -34,20 +34,20 @@ void MCOperand::print(raw_ostream &OS) const { } void MCOperand::dump() const { - print(errs()); + print(errs(), 0); errs() << "\n"; } -void MCInst::print(raw_ostream &OS) const { +void MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const { OS << ""; } void MCInst::dump() const { - print(errs()); + print(errs(), 0); errs() << "\n"; } diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp index 3c9894b691b..3b1a41d48d0 100644 --- a/lib/MC/MCSymbol.cpp +++ b/lib/MC/MCSymbol.cpp @@ -41,7 +41,7 @@ static inline bool NeedsQuoting(const StringRef &Str) { return false; } -void MCSymbol::print(raw_ostream &OS) const { +void MCSymbol::print(raw_ostream &OS, const MCAsmInfo *MAI) const { if (NeedsQuoting(getName())) OS << '"' << getName() << '"'; else @@ -49,5 +49,5 @@ void MCSymbol::print(raw_ostream &OS) const { } void MCSymbol::dump() const { - print(errs()); + print(errs(), 0); } diff --git a/lib/MC/MCValue.cpp b/lib/MC/MCValue.cpp index c7923da764e..69bd10c8e69 100644 --- a/lib/MC/MCValue.cpp +++ b/lib/MC/MCValue.cpp @@ -12,17 +12,17 @@ using namespace llvm; -void MCValue::print(raw_ostream &OS) const { +void MCValue::print(raw_ostream &OS, const MCAsmInfo *MAI) const { if (isAbsolute()) { OS << getConstant(); return; } - getSymA()->print(OS); + getSymA()->print(OS, MAI); if (getSymB()) { OS << " - "; - getSymB()->print(OS); + getSymB()->print(OS, MAI); } if (getConstant()) @@ -30,5 +30,5 @@ void MCValue::print(raw_ostream &OS) const { } void MCValue::dump() const { - print(errs()); + print(errs(), 0); } diff --git a/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp index ee797915f78..ccfe73160a2 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp @@ -57,7 +57,7 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MCInst *MI, unsigned OpNo) { if (Op.isImm()) O << Op.getImm(); else if (Op.isExpr()) - Op.getExpr()->print(O); + Op.getExpr()->print(O, MAI); else if (Op.isMBBLabel()) // FIXME: Keep in sync with printBasicBlockLabel. printBasicBlockLabel // should eventually call into this code, not the other way around. @@ -93,7 +93,7 @@ void X86ATTAsmPrinter::printOperand(const MCInst *MI, unsigned OpNo, return; } else if (Op.isExpr()) { O << '$'; - Op.getExpr()->print(O); + Op.getExpr()->print(O, MAI); return; } @@ -111,7 +111,7 @@ void X86ATTAsmPrinter::printLeaMemReference(const MCInst *MI, unsigned Op) { if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg())) O << DispVal; } else if (DispSpec.isExpr()) { - DispSpec.getExpr()->print(O); + DispSpec.getExpr()->print(O, MAI); } else { llvm_unreachable("non-immediate displacement for LEA?"); //assert(DispSpec.isGlobal() || DispSpec.isCPI() ||