From 02fec34de127d23987352b90bf095ad3fac75fb9 Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Mon, 18 Mar 2013 20:42:25 +0000 Subject: [PATCH] TableGen fix for the new machine model. 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 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/utils/TableGen/CodeGenSchedule.cpp b/utils/TableGen/CodeGenSchedule.cpp index e3a6fe1bf13..227019d97a2 100644 --- a/utils/TableGen/CodeGenSchedule.cpp +++ b/utils/TableGen/CodeGenSchedule.cpp @@ -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'); }