[llvm-commits] CVS: llvm/utils/TableGen/InstrInfoEmitter.cpp SubtargetEmitter.cpp SubtargetEmitter.h
Jim Laskey
jlaskey at apple.com
Tue Nov 1 12:07:12 PST 2005
Changes in directory llvm/utils/TableGen:
InstrInfoEmitter.cpp updated: 1.31 -> 1.32
SubtargetEmitter.cpp updated: 1.12 -> 1.13
SubtargetEmitter.h updated: 1.6 -> 1.7
---
Log message:
Allow itineraries to be passed through the Target Machine.
---
Diffs of the changes: (+38 -16)
InstrInfoEmitter.cpp | 2 +-
SubtargetEmitter.cpp | 45 +++++++++++++++++++++++++++++++++------------
SubtargetEmitter.h | 7 ++++---
3 files changed, 38 insertions(+), 16 deletions(-)
Index: llvm/utils/TableGen/InstrInfoEmitter.cpp
diff -u llvm/utils/TableGen/InstrInfoEmitter.cpp:1.31 llvm/utils/TableGen/InstrInfoEmitter.cpp:1.32
--- llvm/utils/TableGen/InstrInfoEmitter.cpp:1.31 Tue Nov 1 12:04:06 2005
+++ llvm/utils/TableGen/InstrInfoEmitter.cpp Tue Nov 1 14:07:00 2005
@@ -247,7 +247,7 @@
for (unsigned i = 0, N = DefList.size(); i < N; i++) {
Record *Def = DefList[i];
- ItinClassMap[Def->getName()] = i + 1;
+ ItinClassMap[Def->getName()] = i;
}
}
Index: llvm/utils/TableGen/SubtargetEmitter.cpp
diff -u llvm/utils/TableGen/SubtargetEmitter.cpp:1.12 llvm/utils/TableGen/SubtargetEmitter.cpp:1.13
--- llvm/utils/TableGen/SubtargetEmitter.cpp:1.12 Mon Oct 31 11:16:01 2005
+++ llvm/utils/TableGen/SubtargetEmitter.cpp Tue Nov 1 14:07:00 2005
@@ -178,8 +178,8 @@
// CollectAllItinClasses - Gathers and enumerates all the itinerary classes.
// Returns itinerary class count.
//
-unsigned SubtargetEmitter::CollectAllItinClasses(std::map<std::string, unsigned>
- &ItinClassesMap) {
+unsigned SubtargetEmitter::CollectAllItinClasses(std::ostream &OS,
+ std::map<std::string, unsigned> &ItinClassesMap) {
// Gather and sort all itinerary classes
std::vector<Record*> ItinClassList =
Records.getAllDerivedDefinitions("InstrItinClass");
@@ -196,6 +196,11 @@
ItinClassesMap[Name] = i;
}
+ // Emit size of table
+ OS<<"\nenum {\n";
+ OS<<" ItinClassesSize = " << N << "\n";
+ OS<<"};\n";
+
// Return itinerary class count
return N;
}
@@ -313,6 +318,11 @@
// End stages table
OS << "};\n";
+
+ // Emit size of table
+ OS<<"\nenum {\n";
+ OS<<" StagesSize = sizeof(Stages)/sizeof(llvm::InstrStage)\n";
+ OS<<"};\n";
}
//
@@ -421,13 +431,18 @@
std::vector<std::vector<InstrItinerary> > ProcList;
// Enumerate all the itinerary classes
- unsigned NItinClasses = CollectAllItinClasses(ItinClassesMap);
- // Emit the stage data
- EmitStageData(OS, NItinClasses, ItinClassesMap, ProcList);
- // Emit the processor itinerary data
- EmitProcessorData(OS, ProcList);
- // Emit the processor lookup data
- EmitProcessorLookup(OS);
+ unsigned NItinClasses = CollectAllItinClasses(OS, ItinClassesMap);
+ // Make sure the rest is worth the effort
+ HasItineraries = NItinClasses != 0;
+
+ if (HasItineraries) {
+ // Emit the stage data
+ EmitStageData(OS, NItinClasses, ItinClassesMap, ProcList);
+ // Emit the processor itinerary data
+ EmitProcessorData(OS, ProcList);
+ // Emit the processor lookup data
+ EmitProcessorLookup(OS);
+ }
}
//
@@ -460,9 +475,15 @@
OS << " " << Attribute << " = (Bits & " << Instance << ") != 0;\n";
}
- OS << "\n"
- << " InstrItinerary *Itin = (InstrItinerary *)"
- "Features.getInfo(SubTypeInfoKV, SubTypeInfoKVSize);\n";
+
+ if (HasItineraries) {
+ OS << "\n"
+ << " InstrItinerary *Itinerary = (InstrItinerary *)"
+ "Features.getInfo(SubTypeInfoKV, SubTypeInfoKVSize);\n"
+ " InstrItins = InstrItineraryData(Stages, StagesSize, "
+ "Itinerary, ItinClassesSize);\n";
+ }
+
OS << "}\n";
}
Index: llvm/utils/TableGen/SubtargetEmitter.h
diff -u llvm/utils/TableGen/SubtargetEmitter.h:1.6 llvm/utils/TableGen/SubtargetEmitter.h:1.7
--- llvm/utils/TableGen/SubtargetEmitter.h:1.6 Mon Oct 31 11:16:01 2005
+++ llvm/utils/TableGen/SubtargetEmitter.h Tue Nov 1 14:07:00 2005
@@ -27,12 +27,13 @@
RecordKeeper &Records;
std::string Target;
+ bool HasItineraries;
void Enumeration(std::ostream &OS, const char *ClassName, bool isBits);
void FeatureKeyValues(std::ostream &OS);
void CPUKeyValues(std::ostream &OS);
- unsigned CollectAllItinClasses(std::map<std::string, unsigned>
- &ItinClassesMap);
+ unsigned CollectAllItinClasses(std::ostream &OS,
+ std::map<std::string, unsigned> &ItinClassesMap);
void FormItineraryString(Record *ItinData, std::string &ItinString,
unsigned &NStages);
void EmitStageData(std::ostream &OS, unsigned NItinClasses,
@@ -45,7 +46,7 @@
void ParseFeaturesFunction(std::ostream &OS);
public:
- SubtargetEmitter(RecordKeeper &R) : Records(R) {}
+ SubtargetEmitter(RecordKeeper &R) : Records(R), HasItineraries(false) {}
// run - Output the subtarget enumerations, returning true on failure.
void run(std::ostream &o);
More information about the llvm-commits
mailing list