TableGen fix for the new machine model.
authorAndrew Trick <atrick@apple.com>
Mon, 18 Mar 2013 20:42:25 +0000 (20:42 +0000)
committerAndrew Trick <atrick@apple.com>
Mon, 18 Mar 2013 20:42:25 +0000 (20:42 +0000)
Properly handle cases where a group of instructions have different
SchedRW lists with the same itinerary class.
This was supposed to work, but I left in an early break.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177317 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/CodeGenSchedule.cpp

index e3a6fe1bf13397ab955e2591152e2efa9cbb4769..227019d97a26d8777820fc3df41b847b85891ca0 100644 (file)
@@ -779,14 +779,16 @@ void CodeGenSchedModels::collectProcItins() {
     for (unsigned i = 0, N = ItinRecords.size(); i < N; i++) {
       Record *ItinData = ItinRecords[i];
       Record *ItinDef = ItinData->getValueAsDef("TheClass");
-      SchedClassIter SCI = schedClassBegin(), SCE = schedClassEnd();
-      for( ; SCI != SCE; ++SCI) {
+      bool FoundClass = false;
+      for (SchedClassIter SCI = schedClassBegin(), SCE = schedClassEnd();
+           SCI != SCE; ++SCI) {
+        // Multiple SchedClasses may share an itinerary. Update all of them.
         if (SCI->ItinClassDef == ItinDef) {
           ProcModel.ItinDefList[SCI->Index] = ItinData;
-          break;
+          FoundClass = true;
         }
       }
-      if (SCI == SCE) {
+      if (!FoundClass) {
         DEBUG(dbgs() << ProcModel.ItinsDef->getName()
               << " missing class for itinerary " << ItinDef->getName() << '\n');
       }