Add Initialization and Finalization methods for the Printer pass,

to print various things on a module-by-module basis (currently, only the
former is used).

Don't print < > around names. The assembler can't take it.

Print pseudoinstructions only as comments. The poor little assembler can't
take that, either.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6789 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Brian Gaeke 2003-06-19 19:32:32 +00:00
parent ed4775a3c1
commit 9e474c4ec8
2 changed files with 52 additions and 6 deletions

View File

@ -27,6 +27,10 @@ namespace {
void printConstantPool(MachineConstantPool *MCP, const TargetData &TD);
bool runOnMachineFunction(MachineFunction &F);
bool doInitialization(Module &M);
bool doFinalization(Module &M);
};
}
@ -123,13 +127,13 @@ static void printOp(std::ostream &O, const MachineOperand &MO,
O << (int)MO.getImmedValue();
return;
case MachineOperand::MO_PCRelativeDisp:
O << "<" << MO.getVRegValue()->getName() << ">";
O << MO.getVRegValue()->getName();
return;
case MachineOperand::MO_GlobalAddress:
O << "<" << MO.getGlobal()->getName() << ">";
O << MO.getGlobal()->getName();
return;
case MachineOperand::MO_ExternalSymbol:
O << "<" << MO.getSymbolName() << ">";
O << MO.getSymbolName();
return;
default:
O << "<unknown op ty>"; return;
@ -208,6 +212,10 @@ void X86InstrInfo::print(const MachineInstr *MI, std::ostream &O,
switch (Desc.TSFlags & X86II::FormMask) {
case X86II::Pseudo:
// Print pseudo-instructions as comments; either they should have been
// turned into real instructions by now, or they don't need to be
// seen by the assembler (e.g., IMPLICIT_USEs.)
O << "# ";
if (Opcode == X86::PHI) {
printOp(O, MI->getOperand(0), RI);
O << " = phi ";
@ -457,3 +465,18 @@ void X86InstrInfo::print(const MachineInstr *MI, std::ostream &O,
O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, TM); break;
}
}
bool Printer::doInitialization(Module &M)
{
// Tell gas we are outputting Intel syntax (not AT&T syntax) assembly,
// with no % decorations on register names.
O << "\t.intel_syntax noprefix\n";
return false; // success
}
bool Printer::doFinalization(Module &M)
{
// FIXME: We may have to print out constants here.
return false; // success
}

View File

@ -27,6 +27,10 @@ namespace {
void printConstantPool(MachineConstantPool *MCP, const TargetData &TD);
bool runOnMachineFunction(MachineFunction &F);
bool doInitialization(Module &M);
bool doFinalization(Module &M);
};
}
@ -123,13 +127,13 @@ static void printOp(std::ostream &O, const MachineOperand &MO,
O << (int)MO.getImmedValue();
return;
case MachineOperand::MO_PCRelativeDisp:
O << "<" << MO.getVRegValue()->getName() << ">";
O << MO.getVRegValue()->getName();
return;
case MachineOperand::MO_GlobalAddress:
O << "<" << MO.getGlobal()->getName() << ">";
O << MO.getGlobal()->getName();
return;
case MachineOperand::MO_ExternalSymbol:
O << "<" << MO.getSymbolName() << ">";
O << MO.getSymbolName();
return;
default:
O << "<unknown op ty>"; return;
@ -208,6 +212,10 @@ void X86InstrInfo::print(const MachineInstr *MI, std::ostream &O,
switch (Desc.TSFlags & X86II::FormMask) {
case X86II::Pseudo:
// Print pseudo-instructions as comments; either they should have been
// turned into real instructions by now, or they don't need to be
// seen by the assembler (e.g., IMPLICIT_USEs.)
O << "# ";
if (Opcode == X86::PHI) {
printOp(O, MI->getOperand(0), RI);
O << " = phi ";
@ -457,3 +465,18 @@ void X86InstrInfo::print(const MachineInstr *MI, std::ostream &O,
O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, TM); break;
}
}
bool Printer::doInitialization(Module &M)
{
// Tell gas we are outputting Intel syntax (not AT&T syntax) assembly,
// with no % decorations on register names.
O << "\t.intel_syntax noprefix\n";
return false; // success
}
bool Printer::doFinalization(Module &M)
{
// FIXME: We may have to print out constants here.
return false; // success
}