[llvm-commits] [llvm] r159959 - /llvm/trunk/utils/TableGen/SubtargetEmitter.cpp

Andrew Trick atrick at apple.com
Mon Jul 9 13:43:03 PDT 2012


Author: atrick
Date: Mon Jul  9 15:43:03 2012
New Revision: 159959

URL: http://llvm.org/viewvc/llvm-project?rev=159959&view=rev
Log:
Machine model: allow itineraries to be shared by different processor models.

Modified:
    llvm/trunk/utils/TableGen/SubtargetEmitter.cpp

Modified: llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SubtargetEmitter.cpp?rev=159959&r1=159958&r2=159959&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/SubtargetEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/SubtargetEmitter.cpp Mon Jul  9 15:43:03 2012
@@ -336,10 +336,16 @@
                              std::vector<std::vector<InstrItinerary> >
                                &ProcItinLists) {
 
+  // Multiple processor models may share an itinerary record. Emit it once.
+  SmallPtrSet<Record*, 8> ItinsDefSet;
+
   // Emit functional units for all the itineraries.
   for (CodeGenSchedModels::ProcIter PI = SchedModels.procModelBegin(),
          PE = SchedModels.procModelEnd(); PI != PE; ++PI) {
 
+    if (!ItinsDefSet.insert(PI->ItinsDef))
+      continue;
+
     std::vector<Record*> FUs = PI->ItinsDef->getValueAsListOfDefs("FU");
     if (FUs.empty())
       continue;
@@ -508,12 +514,18 @@
 EmitItineraries(raw_ostream &OS,
                 std::vector<std::vector<InstrItinerary> > &ProcItinLists) {
 
+  // Multiple processor models may share an itinerary record. Emit it once.
+  SmallPtrSet<Record*, 8> ItinsDefSet;
+
   // For each processor's machine model
   std::vector<std::vector<InstrItinerary> >::iterator
       ProcItinListsIter = ProcItinLists.begin();
   for (CodeGenSchedModels::ProcIter PI = SchedModels.procModelBegin(),
          PE = SchedModels.procModelEnd(); PI != PE; ++PI) {
+
     Record *ItinsDef = PI->ItinsDef;
+    if (!ItinsDefSet.insert(ItinsDef))
+      continue;
 
     // Get processor itinerary name
     const std::string &Name = ItinsDef->getName();





More information about the llvm-commits mailing list