Add support for ${:comment}, which expands to the current target's comment
authorChris Lattner <sabre@nondot.org>
Tue, 26 Sep 2006 23:59:50 +0000 (23:59 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 26 Sep 2006 23:59:50 +0000 (23:59 +0000)
character, and ${:uid} which expands to a unique ID for the MachineInstr.
More can be added if/when they are needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30619 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter.cpp

index 386a8d53fd60cb9113b6ce7f35057bc795e6e10e..4c34dcd21dd7a0811d2e1b58dbbafd964ff65620 100644 (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
index bfc0519806c3edf5a4425446c76ecd8ba312699b..518aec3348fdef16f1a0243adcbbc482eeaed67a 100644 (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 {