Thread an MCAsmInfo pointer through the various MC printing APIs,

and fix a few things using << on MCSymbols to use ->print(). No
functionality change other than unbreaking my previous patch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80890 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-09-03 05:46:51 +00:00
parent 5c5ce5cef4
commit 684c593d05
10 changed files with 49 additions and 37 deletions

View File

@ -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;
/// @}

View File

@ -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;
};

View File

@ -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;

View File

@ -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;

View File

@ -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';
}

View File

@ -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<MCConstantExpr>(*this).getValue();
return;
case MCExpr::SymbolRef:
cast<MCSymbolRefExpr>(*this).getSymbol().print(OS);
cast<MCSymbolRefExpr>(*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<MCBinaryExpr>(*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';
}

View File

@ -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 << "<MCOperand ";
if (!isValid())
OS << "INVALID";
@ -26,7 +26,7 @@ void MCOperand::print(raw_ostream &OS) const {
<< getMBBLabelBlock() << ")";
else if (isExpr()) {
OS << "Expr:(";
getExpr()->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 << "<MCInst " << getOpcode();
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
OS << " ";
getOperand(i).print(OS);
getOperand(i).print(OS, MAI);
}
OS << ">";
}
void MCInst::dump() const {
print(errs());
print(errs(), 0);
errs() << "\n";
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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() ||