Make the AsmWriter a first-class tblgen object.  Allow targets to specify
name of the generated asmwriter class, and the name of the format string.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15747 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp
index b2e2125..7b3a504 100644
--- a/utils/TableGen/AsmWriterEmitter.cpp
+++ b/utils/TableGen/AsmWriterEmitter.cpp
@@ -14,6 +14,7 @@
 
 #include "AsmWriterEmitter.h"
 #include "CodeGenTarget.h"
+#include "Record.h"
 #include <ostream>
 using namespace llvm;
 
@@ -28,13 +29,19 @@
   EmitSourceFileHeader("Assembly Writer Source Fragment", O);
 
   CodeGenTarget Target;
+
+  Record *AsmWriter = Target.getAsmWriter();
+
+  std::string AsmWriterClassName =
+    AsmWriter->getValueAsString("AsmWriterClassName");
+
   O <<
   "/// printInstruction - This method is automatically generated by tablegen\n"
   "/// from the instruction set description.  This method returns true if the\n"
   "/// machine instruction was sufficiently described to print it, otherwise\n"
   "/// it returns false.\n"
-    "bool " << Target.getName()
-            << "AsmPrinter::printInstruction(const MachineInstr *MI) {\n";
+    "bool " << Target.getName() << AsmWriterClassName
+            << "::printInstruction(const MachineInstr *MI) {\n";
   O << "  switch (MI->getOpcode()) {\n"
        "  default: return false;\n";