make tblgen produce a function that returns the name for a physreg.
authorChris Lattner <sabre@nondot.org>
Sun, 13 Sep 2009 20:08:00 +0000 (20:08 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 13 Sep 2009 20:08:00 +0000 (20:08 +0000)
Nothing is using this info yet.

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

15 files changed:
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp
lib/Target/Blackfin/AsmPrinter/BlackfinAsmPrinter.cpp
lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp
lib/Target/PIC16/AsmPrinter/PIC16AsmPrinter.h
lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp
lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86ATTInstPrinter.h
lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
utils/TableGen/AsmWriterEmitter.cpp
utils/TableGen/AsmWriterEmitter.h

index 745faa7f3f59f46ca6a647c430ebea9a40b6ca69..876c4c89de35b0e631c58568833edbf35f3b7e85 100644 (file)
@@ -146,6 +146,8 @@ namespace {
 
     void PrintGlobalVariable(const GlobalVariable* GVar);
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     void printMachineInstruction(const MachineInstr *MI);
     bool runOnMachineFunction(MachineFunction &F);
     bool doInitialization(Module &M);
index f0b7fd7f615b5a016b172757d32bc544d4cd8fc3..74d398b2724e2edb3457603da242d66bfc5b4859 100644 (file)
@@ -49,6 +49,8 @@ namespace {
       return "Alpha Assembly Printer";
     }
     void printInstruction(const MachineInstr *MI);
+    const char *getRegisterName(unsigned RegNo) const;
+
     void printOp(const MachineOperand &MO, bool IsCallOp = false);
     void printOperand(const MachineInstr *MI, int opNum);
     void printBaseOffsetPair(const MachineInstr *MI, int i, bool brackets=true);
index d83d914ec583ba96a185c18d738f117d25a016af..96f4e784ba1c3e697efe9aa0eedaa2823f8c5c77 100644 (file)
@@ -51,6 +51,8 @@ namespace {
     void printOperand(const MachineInstr *MI, int opNum);
     void printMemoryOperand(const MachineInstr *MI, int opNum);
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     void emitLinkage(const std::string &n, GlobalValue::LinkageTypes l);
     bool runOnMachineFunction(MachineFunction &F);
     bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
index cc320e5a2bc4f43778cf9b6acc8ce0763456762e..21e9be430b766474cbfd96279ff2d226277c6ca8 100644 (file)
@@ -66,10 +66,10 @@ namespace {
     }
 
     /// printInstruction - This method is automatically generated by tablegen
-    /// from the instruction set description.  This method returns true if the
-    /// machine instruction was sufficiently described to print it, otherwise it
-    /// returns false.
+    /// from the instruction set description.
     void printInstruction(const MachineInstr *MI);
+    const char *getRegisterName(unsigned RegNo) const;
+
 
     void printMachineInstruction(const MachineInstr *MI);
     void printOp(const MachineOperand &MO);
index cd0eb9cbde3359f473863ace68790df543dca6ae..c82f96d1dd7a2b00de4cced873a3a592d85a1081 100644 (file)
@@ -58,6 +58,8 @@ namespace {
                             const char* Modifier = 0);
     void printCCOperand(const MachineInstr *MI, int OpNum);
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     void printMachineInstruction(const MachineInstr * MI);
     bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
                          unsigned AsmVariant,
index f4a9b36da8f7e0a4fa18a354c87be48f1b1e5f5d..b9d543edc8429c36f9c453090551056d025c0a7a 100644 (file)
@@ -82,6 +82,8 @@ namespace {
     void emitFrameDirective(MachineFunction &MF);
 
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     bool runOnMachineFunction(MachineFunction &F);
     bool doInitialization(Module &M);
   };
index 8510eaa622106328c2096e8948c309280f2d2e42..e671feb8632c8a1bee734647b34e4caffd896b21 100644 (file)
@@ -45,6 +45,8 @@ namespace llvm {
     void printOperand(const MachineInstr *MI, int opNum);
     void printCCOperand(const MachineInstr *MI, int opNum);
     void printInstruction(const MachineInstr *MI); // definition autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     bool printMachineInstruction(const MachineInstr *MI);
     void EmitFunctionDecls (Module &M);
     void EmitUndefinedVars (Module &M);
index f21d371a4c3f5baf808d2ff84639e3706a5120ae..658ac317e0007772eabf093fb72fa82ca67b1c34 100644 (file)
@@ -120,6 +120,8 @@ namespace {
     /// machine instruction was sufficiently described to print it, otherwise it
     /// returns false.
     void printInstruction(const MachineInstr *MI);
+    const char *getRegisterName(unsigned RegNo) const;
+
 
     void printMachineInstruction(const MachineInstr *MI);
     void printOp(const MachineOperand &MO);
index 0d5b70dc899abdf3d6b700bb85aa0585b4e8bcbe..15e7fb02b2b773546395e571063fa5751bee60ed 100644 (file)
@@ -68,6 +68,8 @@ namespace {
     void printCCOperand(const MachineInstr *MI, int opNum);
 
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     bool runOnMachineFunction(MachineFunction &F);
     bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
                        unsigned AsmVariant, const char *ExtraCode);
index 8289010254465202527e811f98f886f428539ad9..64843c902c33cb7f4a0a35f21de450583d783937 100644 (file)
@@ -67,6 +67,8 @@ namespace {
     }
 
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     void printMachineInstruction(const MachineInstr * MI);
 
     void emitFunctionHeader(const MachineFunction &MF);
index 76f151d8897d50c4b618faf7c4c2bd73185ff748..4460e4b492e9d0e99c6c5ed49d1e6cf8df342197 100644 (file)
@@ -28,8 +28,11 @@ class X86ATTInstPrinter {
 public:
   X86ATTInstPrinter(raw_ostream &o, const MCAsmInfo *mai,
                     const TargetRegisterInfo *tri) : O(o), MAI(mai), TRI(tri) {}
-  
+
+  // Autogenerated by tblgen.
   void printInstruction(const MCInst *MI);
+  const char *getRegisterName(unsigned RegNo) const;
+
 
   void printOperand(const MCInst *MI, unsigned OpNo,
                     const char *Modifier = 0);
index 30505bfb7ee79fb7d485377ed025bbd6b16a0d70..222d2294c3419a500e024f969d54875daa316063 100644 (file)
@@ -38,6 +38,8 @@ struct VISIBILITY_HIDDEN X86IntelAsmPrinter : public AsmPrinter {
   /// machine instruction was sufficiently described to print it, otherwise it
   /// returns false.
   void printInstruction(const MachineInstr *MI);
+  const char *getRegisterName(unsigned RegNo) const;
+
 
   // This method is used by the tablegen'erated instruction printer.
   void printOperand(const MachineInstr *MI, unsigned OpNo,
index bdb44efa2ee99dcb0f4e3cf052355d768b3399c5..5fe9b2bbf46ee8071144a267519162b38b5fcec5 100644 (file)
@@ -80,6 +80,8 @@ namespace {
     void emitFunctionEnd(MachineFunction &MF);
 
     void printInstruction(const MachineInstr *MI);  // autogenerated.
+    const char *getRegisterName(unsigned RegNo) const;
+
     void printMachineInstruction(const MachineInstr *MI);
     bool runOnMachineFunction(MachineFunction &F);
     bool doInitialization(Module &M);
index a6f614958be53983c1d925618d7ba796cbfbfb7d..0455c9b5e813adcf4162705eb9e4e47bc7402a22 100644 (file)
@@ -538,19 +538,16 @@ FindUniqueOperandCommands(std::vector<std::string> &UniqueOperandCommands,
 }
 
 
-
-void AsmWriterEmitter::run(raw_ostream &O) {
-  EmitSourceFileHeader("Assembly Writer Source Fragment", O);
-
+/// EmitPrintInstruction - Generate the code for the "printInstruction" method
+/// implementation.
+void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) {
   CodeGenTarget Target;
   Record *AsmWriter = Target.getAsmWriter();
   std::string ClassName = 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"
+  "/// from the instruction set description.\n"
     "void " << Target.getName() << ClassName
             << "::printInstruction(const MachineInstr *MI) {\n";
 
@@ -794,3 +791,44 @@ void AsmWriterEmitter::run(raw_ostream &O) {
   O << "  return;\n";
   O << "}\n";
 }
+
+
+void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) {
+  CodeGenTarget Target;
+  Record *AsmWriter = Target.getAsmWriter();
+  std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
+  const std::vector<CodeGenRegister> &Registers = Target.getRegisters();
+  
+  O <<
+  "\n\n/// getRegisterName - This method is automatically generated by tblgen\n"
+  "/// from the register set description.  This returns the assembler name\n"
+  "/// for the specified register.\n"
+  "const char *" << Target.getName() << ClassName
+  << "::getRegisterName(unsigned RegNo) const {\n"
+  << "  assert(RegNo && RegNo < " << (Registers.size()+1)
+  << " && \"Invalid register number!\");\n"
+  << "\n"
+  << "  static const char *const RegAsmNames[] = {\n";
+  for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
+    const CodeGenRegister &Reg = Registers[i];
+
+    std::string AsmName = Reg.TheDef->getValueAsString("AsmName");
+    if (AsmName.empty())
+      AsmName = Reg.getName();
+    O << "    \"" << AsmName << "\",\n";
+  }
+  O << "    0\n"
+    << "  };\n"
+    << "\n"
+    << "  return RegAsmNames[RegNo-1];\n"
+    << "}\n";
+}
+
+
+void AsmWriterEmitter::run(raw_ostream &O) {
+  EmitSourceFileHeader("Assembly Writer Source Fragment", O);
+  
+  EmitPrintInstruction(O);
+  EmitGetRegisterName(O);
+}
+
index 75e69964ef89eeb10533f28cf6b745968d5e869b..7862caa25a8a03471faafa1ae348ff6543bccb67 100644 (file)
@@ -35,6 +35,9 @@ namespace llvm {
     void run(raw_ostream &o);
 
 private:
+    void EmitPrintInstruction(raw_ostream &o);
+    void EmitGetRegisterName(raw_ostream &o);
+    
     AsmWriterInst *getAsmWriterInstByID(unsigned ID) const {
       assert(ID < NumberedInstructions.size());
       std::map<const CodeGenInstruction*, AsmWriterInst*>::const_iterator I =