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); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits