Add support for ${:comment}, which expands to the current target's comment

character, and ${:uid} which expands to a unique ID for the MachineInstr.
More can be added if/when they are needed.

llvm-svn: 30619
This commit is contained in:
Chris Lattner 2006-09-26 23:59:50 +00:00
parent 8d21485660
commit a32814b033
2 changed files with 32 additions and 0 deletions

View File

@ -108,6 +108,14 @@ namespace llvm {
/// doFinalization - Shut down the asmprinter. If you override this in your
/// pass, you must make sure to call it explicitly.
bool doFinalization(Module &M);
/// PrintSpecial - Print information related to the specified machine instr
/// that is independent of the operand, and may be independent of the instr
/// itself. This can be useful for portably encoding the comment character
/// or other bits of target-specific knowledge into the asmstrings. The
/// syntax used is ${:comment}. Targets can override this to add support
/// for their own strange codes.
virtual void PrintSpecial(const MachineInstr *MI, const char *Code);
/// PrintAsmOperand - Print the specified operand of MI, an INLINEASM
/// instruction, using the specified assembler variant. Targets should

View File

@ -619,6 +619,30 @@ AsmPrinter::EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) {
abort();
}
/// PrintSpecial - Print information related to the specified machine instr
/// that is independent of the operand, and may be independent of the instr
/// itself. This can be useful for portably encoding the comment character
/// or other bits of target-specific knowledge into the asmstrings. The
/// syntax used is ${:comment}. Targets can override this to add support
/// for their own strange codes.
void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) {
if (!strcmp(Code, "comment")) {
O << TAI->getCommentString();
} else if (!strcmp(Code, "uid")) {
// Assign a unique ID to this machine instruction.
static const MachineInstr *LastMI = 0;
static unsigned Counter = 0U-1;
// If this is a new machine instruction, bump the counter.
if (LastMI != MI) { ++Counter; LastMI = MI; }
O << Counter;
} else {
std::cerr << "Unknown special formatter '" << Code
<< "' for machine instr: " << *MI;
exit(1);
}
}
/// printInlineAsm - This method formats and prints the specified machine
/// instruction that is an inline asm.
void AsmPrinter::printInlineAsm(const MachineInstr *MI) const {