[llvm-commits] CVS: llvm/utils/TableGen/RegisterInfoEmitter.cpp

Jim Laskey jlaskey at apple.com
Fri Mar 24 13:16:15 PST 2006



Changes in directory llvm/utils/TableGen:

RegisterInfoEmitter.cpp updated: 1.39 -> 1.40
---
Log message:

Add dwarf register numbering to register data.


---
Diffs of the changes:  (+18 -1)

 RegisterInfoEmitter.cpp |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletion(-)


Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.39 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.40
--- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.39	Tue Dec 27 04:56:22 2005
+++ llvm/utils/TableGen/RegisterInfoEmitter.cpp	Fri Mar 24 15:15:58 2006
@@ -60,7 +60,8 @@
      << "  " << ClassName
      << "(int CallFrameSetupOpcode = -1, int CallFrameDestroyOpcode = -1);\n"
      << "  const unsigned* getCalleeSaveRegs() const;\n"
-     << "const TargetRegisterClass* const *getCalleeSaveRegClasses() const;\n"
+     << "  const TargetRegisterClass* const *getCalleeSaveRegClasses() const;\n"
+     << "  int getDwarfRegNum(unsigned RegNum) const;\n"
      << "};\n\n";
 
   const std::vector<CodeGenRegisterClass> &RegisterClasses =
@@ -277,6 +278,22 @@
     OS << "&" << getQualifiedName(RC->TheDef) << "RegClass, ";
   }
   OS << " 0\n  };\n  return CalleeSaveRegClasses;\n}\n\n";
+ 
+  // Emit information about the dwarf register numbers.
+  OS << "int " << ClassName << "::getDwarfRegNum(unsigned RegNum) const {\n";
+  OS << "  static const int DwarfRegNums[] = { -1, // NoRegister";
+  for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
+    if (!(i % 16)) OS << "\n    ";
+    const CodeGenRegister &Reg = Registers[i];
+    int DwarfRegNum = Reg.TheDef->getValueAsInt("DwarfNumber");
+    OS << DwarfRegNum;
+    if ((i + 1) != e)  OS << ", ";
+  }
+  OS << "\n  };\n";
+  OS << "  assert(RegNum < (sizeof(DwarfRegNums)/sizeof(int)) &&\n";
+  OS << "         \"RegNum exceeds number of registers\");\n";
+  OS << "  return DwarfRegNums[RegNum];\n";
+  OS << "}\n\n";
 
   OS << "} // End llvm namespace \n";
 }






More information about the llvm-commits mailing list