[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