diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-06 17:38:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-06 17:38:14 +0000 |
commit | 5ed17b67d2814be6d7b008b76c91f15a75e5a141 (patch) | |
tree | b592c3ae4d79b6772e475b97b2e39b685b893502 /llvm/utils/TableGen/SubtargetEmitter.cpp | |
parent | 538160b7ffb25a1fd2a88578b2fe35e275222d41 (diff) | |
download | bcm5719-llvm-5ed17b67d2814be6d7b008b76c91f15a75e5a141.tar.gz bcm5719-llvm-5ed17b67d2814be6d7b008b76c91f15a75e5a141.zip |
Fix generation of multi-stage instruction itineraries. Patch by
giuma.cordes@gmail.com
llvm-svn: 49276
Diffstat (limited to 'llvm/utils/TableGen/SubtargetEmitter.cpp')
-rw-r--r-- | llvm/utils/TableGen/SubtargetEmitter.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/utils/TableGen/SubtargetEmitter.cpp b/llvm/utils/TableGen/SubtargetEmitter.cpp index a0dc96787d1..1f833efcaac 100644 --- a/llvm/utils/TableGen/SubtargetEmitter.cpp +++ b/llvm/utils/TableGen/SubtargetEmitter.cpp @@ -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 |