Refactored to make room for more stuff (scheduling info.)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23975 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp
index 6d3542e..0957fba 100644
--- a/utils/TableGen/SubtargetEmitter.cpp
+++ b/utils/TableGen/SubtargetEmitter.cpp
@@ -44,96 +44,116 @@
   }
 };
 
+//
+// 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());
+
+  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";
+}
+
+//
+// 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<<"\nenum {\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);
-  
-  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";
   
-  { // 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";
-  }
-  
-  { // 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";
-  }
-  
-  { // 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 << ((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";
+  FeatureEnumeration(OS);
+  FeatureKeyValues(OS);
+  CPUKeyValues(OS);
 }