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

Chris Lattner lattner at cs.uiuc.edu
Fri Aug 19 13:23:54 PDT 2005



Changes in directory llvm/utils/TableGen:

RegisterInfoEmitter.cpp updated: 1.29 -> 1.30
---
Log message:

Expose the derived register classes to the public header, allowing them
to be accessed.


---
Diffs of the changes:  (+23 -22)

 RegisterInfoEmitter.cpp |   45 +++++++++++++++++++++++----------------------
 1 files changed, 23 insertions(+), 22 deletions(-)


Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.29 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.30
--- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.29	Fri Aug 19 14:12:51 2005
+++ llvm/utils/TableGen/RegisterInfoEmitter.cpp	Fri Aug 19 15:23:42 2005
@@ -69,7 +69,17 @@
        << " { // Register classes\n";
     for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
       const std::string &Name = RegisterClasses[i].getName();
-      OS << "  extern TargetRegisterClass * const "<< Name <<"RegisterClass;\n";
+
+      // Output the register class definition.
+      OS << "  struct " << Name << "Class : public TargetRegisterClass {\n"
+         << "    " << Name << "Class();\n"
+         << RegisterClasses[i].MethodProtos << "  };\n";
+
+      // Output the extern for the instance.
+      OS << "  extern " << Name << "Class\t" << Name << "RegClass;\n";
+      // Output the extern for the pointer to the instance (should remove).
+      OS << "  static TargetRegisterClass * const "<< Name <<"RegisterClass = &"
+         << Name << "RegClass;\n";
     }
     OS << "} // end of namespace " << TargetName << "\n\n";
   }
@@ -121,13 +131,6 @@
       RegClassesBelongedTo.insert(std::make_pair(Reg, &RC));
     }
     OS << "\n  };\n\n";
-
-    OS << "  struct " << Name << "Class : public TargetRegisterClass {\n"
-       << "    " << Name << "Class() : TargetRegisterClass("
-       << RC.SpillSize/8 << ", " << RC.SpillAlignment/8 << ", " << Name << ", "
-       << Name << " + " << RC.Elements.size() << ") {}\n"
-       << RC.MethodProtos << "  };\n";
-    OS << RC.MethodBodies << "\n";
   }
   OS << "}  // end anonymous namespace\n\n";
   
@@ -137,7 +140,17 @@
        << " {   // Register class instances\n";
     for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i)
       OS << "  " << RegisterClasses[i].getName()  << "Class\t"
-         << RegisterClasses[i].getName() << "RegClassInstance;\n";
+         << RegisterClasses[i].getName() << "RegClass;\n";
+    
+    for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
+      const CodeGenRegisterClass &RC = RegisterClasses[i];
+      OS << RC.MethodBodies << "\n";
+      OS << RC.getName() << "Class::" << RC.getName()
+        << "Class()  : TargetRegisterClass(" << RC.SpillSize/8 << ", "
+        << RC.SpillAlignment/8 << ", " << RC.getName() << ", "
+        << RC.getName() << " + " << RC.Elements.size() << ") {}\n";
+    }
+  
     OS << "}\n";
   }
 
@@ -145,7 +158,7 @@
   OS << "  const TargetRegisterClass* const RegisterClasses[] = {\n";
   for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i)
     OS << "    &" << getQualifiedName(RegisterClasses[i].TheDef)
-       << "RegClassInstance,\n";
+       << "RegClass,\n";
   OS << "  };\n";
 
   // Emit register class aliases...
@@ -238,18 +251,6 @@
   OS << "  };\n";      // End of register descriptors...
   OS << "}\n\n";       // End of anonymous namespace...
 
-  if (!RegisterClasses.empty()) {
-    OS << "namespace " << RegisterClasses[0].Namespace
-       << " { // Register classes\n";
-    for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
-      OS << "  TargetRegisterClass * const " << RegisterClasses[i].getName()
-         << "RegisterClass = &" << getQualifiedName(RegisterClasses[i].TheDef)
-         << "RegClassInstance;\n";
-    }
-    OS << "} // end of namespace " << RegisterClasses[0].Namespace << "\n\n";
-  }
-
-
   std::string ClassName = Target.getName() + "GenRegisterInfo";
 
   // Emit the constructor of the class...






More information about the llvm-commits mailing list