Fix generation of multi-stage instruction itineraries. Patch by

giuma.cordes@gmail.com

llvm-svn: 49276
This commit is contained in:
Chris Lattner 2008-04-06 17:38:14 +00:00
parent 538160b7ff
commit 5ed17b67d2
1 changed files with 5 additions and 2 deletions

View File

@ -272,6 +272,7 @@ void SubtargetEmitter::EmitStageData(std::ostream &OS,
OS << "static const llvm::InstrStage Stages[] = {\n"
" { 0, 0 }, // No itinerary\n";
unsigned StageCount = 1;
unsigned ItinEnum = 1;
std::map<std::string, unsigned> ItinMap;
for (unsigned i = 0, N = ProcItinList.size(); i < N; i++) {
@ -308,8 +309,10 @@ void SubtargetEmitter::EmitStageData(std::ostream &OS,
if (Find == 0) {
// Emit as { cycles, u1 | u2 | ... | un }, // index
OS << ItinString << ", // " << ItinEnum << "\n";
// Record Itin class number
ItinMap[ItinString] = Find = ItinEnum++;
// Record Itin class number.
ItinMap[ItinString] = Find = StageCount;
StageCount += NStages;
ItinEnum++;
}
// Set up itinerary as location and location + stage count