Refactored to make room for more stuff (scheduling info.)
authorJim Laskey <jlaskey@mac.com>
Tue, 25 Oct 2005 15:16:36 +0000 (15:16 +0000)
committerJim Laskey <jlaskey@mac.com>
Tue, 25 Oct 2005 15:16:36 +0000 (15:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23975 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/SubtargetEmitter.cpp
utils/TableGen/SubtargetEmitter.h

index 6d3542ea3e59a4f706790ca3c68151d321c70960..0957fba9d3915a33d2f6f8bb678c59e41f16e707 100644 (file)
@@ -44,96 +44,116 @@ struct LessRecordFieldName {
   }
 };
 
-
-// 
-// SubtargetEmitter::run - Main subtarget enumeration emitter.
 //
-void SubtargetEmitter::run(std::ostream &OS) {
-  EmitSourceFileHeader("Subtarget Enumeration Source Fragment", OS);
-  
+// FeatureEnumeration - Emit an enumeration of all the subtarget features.
+//
+void SubtargetEmitter::FeatureEnumeration(std::ostream &OS) {
   RecordList Features = Records.getAllDerivedDefinitions("SubtargetFeature");
   sort(Features.begin(), Features.end(), LessRecord());
-  
-  RecordList Processors = Records.getAllDerivedDefinitions("Processor");
-  sort(Processors.begin(), Processors.end(), LessRecordFieldName());
 
-  OS << "#include \"llvm/Target/SubtargetFeature.h\"\n\n";
+  int i = 0;
   
-  { // Feature enumeration
-    int i = 0;
-    
-    OS << "enum {\n";
-    
-    for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;){
-      Record *R = *RI++;
-      std::string Instance = R->getName();
-      OS << "  "
-         << Instance
-         << " = "
-         << " 1 << " << i++
-         << ((RI != E) ? ",\n" : "\n");
-    }
-    
-    OS << "};\n";
-  }
+  OS << "enum {\n";
   
-  { // Feature key values
-    OS << "\n"
-       << "// Sorted (by key) array of values for CPU features.\n"
-       << "static llvm::SubtargetFeatureKV FeatureKV[] = {\n";
-    for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;) {
-      Record *R = *RI++;
-      std::string Instance = R->getName();
-      std::string Name = R->getValueAsString("Name");
-      std::string Desc = R->getValueAsString("Desc");
-      OS << "  { "
-         << "\"" << Name << "\", "
-         << "\"" << Desc << "\", "
-         << Instance
-         << ((RI != E) ? " },\n" : " }\n");
-    }
-    OS << "};\n";
+  for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;){
+    Record *R = *RI++;
+    std::string Instance = R->getName();
+    OS << "  "
+       << Instance
+       << " = "
+       << " 1 << " << i++
+       << ((RI != E) ? ",\n" : "\n");
   }
   
-  { // CPU key values
-    OS << "\n"
-       << "// Sorted (by key) array of values for CPU subtype.\n"
-       << "static const llvm::SubtargetFeatureKV SubTypeKV[] = {\n";
-    for (RecordListIter RI = Processors.begin(), E = Processors.end();
-         RI != E;) {
-      Record *R = *RI++;
-      std::string Name = R->getValueAsString("Name");
-      Record *ProcItin = R->getValueAsDef("ProcItin");
-      ListInit *Features = R->getValueAsListInit("Features");
-      unsigned N = Features->getSize();
-      OS << "  { "
-         << "\"" << Name << "\", "
-         << "\"Select the " << Name << " processor\", ";
-         
-      
-      if (N == 0) {
-        OS << "0";
-      } else {
-        for (unsigned i = 0; i < N; ) {
-          if (DefInit *DI = dynamic_cast<DefInit*>(Features->getElement(i++))) {
-            Record *Feature = DI->getDef();
-            std::string Name = Feature->getName();
-            OS << Name;
-            if (i != N) OS << " | ";
-          } else {
-            throw "Feature: " + Name +
-                  " expected feature in processor feature list!";
-          }
+  OS << "};\n";
+}
+
+//
+// FeatureKeyValues - Emit data of all the subtarget features.  Used by command
+// line.
+//
+void SubtargetEmitter::FeatureKeyValues(std::ostream &OS) {
+  RecordList Features = Records.getAllDerivedDefinitions("SubtargetFeature");
+  sort(Features.begin(), Features.end(), LessRecord());
+
+  OS << "\n"
+     << "// Sorted (by key) array of values for CPU features.\n"
+     << "static llvm::SubtargetFeatureKV FeatureKV[] = {\n";
+  for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;) {
+    Record *R = *RI++;
+    std::string Instance = R->getName();
+    std::string Name = R->getValueAsString("Name");
+    std::string Desc = R->getValueAsString("Desc");
+    OS << "  { "
+       << "\"" << Name << "\", "
+       << "\"" << Desc << "\", "
+       << Instance
+       << ((RI != E) ? " },\n" : " }\n");
+  }
+  OS << "};\n";
+
+  OS<<"\nenum {\n";
+  OS<<"  FeatureKVSize = sizeof(FeatureKV)/sizeof(llvm::SubtargetFeatureKV)\n";
+  OS<<"};\n";
+}
+
+//
+// CPUKeyValues - Emit data of all the subtarget processors.  Used by command
+// line.
+//
+void SubtargetEmitter::CPUKeyValues(std::ostream &OS) {
+  RecordList Processors = Records.getAllDerivedDefinitions("Processor");
+  sort(Processors.begin(), Processors.end(), LessRecordFieldName());
+
+  OS << "\n"
+     << "// Sorted (by key) array of values for CPU subtype.\n"
+     << "static const llvm::SubtargetFeatureKV SubTypeKV[] = {\n";
+  for (RecordListIter RI = Processors.begin(), E = Processors.end();
+       RI != E;) {
+    Record *R = *RI++;
+    std::string Name = R->getValueAsString("Name");
+    Record *ProcItin = R->getValueAsDef("ProcItin");
+    ListInit *Features = R->getValueAsListInit("Features");
+    unsigned N = Features->getSize();
+    OS << "  { "
+       << "\"" << Name << "\", "
+       << "\"Select the " << Name << " processor\", ";
+       
+    
+    if (N == 0) {
+      OS << "0";
+    } else {
+      for (unsigned i = 0; i < N; ) {
+        if (DefInit *DI = dynamic_cast<DefInit*>(Features->getElement(i++))) {
+          Record *Feature = DI->getDef();
+          std::string Name = Feature->getName();
+          OS << Name;
+          if (i != N) OS << " | ";
+        } else {
+          throw "Feature: " + Name +
+                " expected feature in processor feature list!";
         }
       }
-      
-      OS << ((RI != E) ? " },\n" : " }\n");
     }
-    OS << "};\n";
+    
+    OS << ((RI != E) ? " },\n" : " }\n");
   }
-  
+  OS << "};\n";
+
   OS<<"\nenum {\n";
-  OS<<"  FeatureKVSize = sizeof(FeatureKV)/sizeof(llvm::SubtargetFeatureKV),\n";
   OS<<"  SubTypeKVSize = sizeof(SubTypeKV)/sizeof(llvm::SubtargetFeatureKV)\n";
   OS<<"};\n";
 }
+
+// 
+// SubtargetEmitter::run - Main subtarget enumeration emitter.
+//
+void SubtargetEmitter::run(std::ostream &OS) {
+  EmitSourceFileHeader("Subtarget Enumeration Source Fragment", OS);
+
+  OS << "#include \"llvm/Target/SubtargetFeature.h\"\n\n";
+  
+  FeatureEnumeration(OS);
+  FeatureKeyValues(OS);
+  CPUKeyValues(OS);
+}
index f1cc4982923ee847ec8c257b95ff7a4f41eca407..bb81df372de3ec0561fdf676ce47875952730a9c 100644 (file)
@@ -20,6 +20,11 @@ namespace llvm {
 
 class SubtargetEmitter : public TableGenBackend {
   RecordKeeper &Records;
+  
+  void FeatureEnumeration(std::ostream &OS);
+  void FeatureKeyValues(std::ostream &OS);
+  void CPUKeyValues(std::ostream &OS);
+  
 public:
   SubtargetEmitter(RecordKeeper &R) : Records(R) {}