aboutsummaryrefslogtreecommitdiffstats
path: root/utils/TableGen/SubtargetEmitter.cpp
diff options
context:
space:
mode:
authorJim Laskey <jlaskey@mac.com>2005-10-25 15:16:36 +0000
committerJim Laskey <jlaskey@mac.com>2005-10-25 15:16:36 +0000
commitb3b1d5f097a4fbcf134259b743ccbd93d187c6cd (patch)
treef1d9dda6cc235ea9077d7afd2025309c166c90b7 /utils/TableGen/SubtargetEmitter.cpp
parent34bd5d5d876212611d8b66a18f4c8604b342c6eb (diff)
downloadexternal_llvm-b3b1d5f097a4fbcf134259b743ccbd93d187c6cd.zip
external_llvm-b3b1d5f097a4fbcf134259b743ccbd93d187c6cd.tar.gz
external_llvm-b3b1d5f097a4fbcf134259b743ccbd93d187c6cd.tar.bz2
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
Diffstat (limited to 'utils/TableGen/SubtargetEmitter.cpp')
-rw-r--r--utils/TableGen/SubtargetEmitter.cpp174
1 files changed, 97 insertions, 77 deletions
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 @@ 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);
+}