summaryrefslogtreecommitdiff
path: root/utils/TableGen/SubtargetEmitter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-04-06 17:38:14 +0000
committerChris Lattner <sabre@nondot.org>2008-04-06 17:38:14 +0000
commitd963ab1f58adb6daa028533ff3285841d7e45f80 (patch)
tree41f29cfb3ec84f87147d9d54b5c1d18597eca0e5 /utils/TableGen/SubtargetEmitter.cpp
parentaf4fc28b5633d8cd2225e1b61d864f05a0967366 (diff)
downloadllvm-d963ab1f58adb6daa028533ff3285841d7e45f80.tar.gz
llvm-d963ab1f58adb6daa028533ff3285841d7e45f80.tar.bz2
llvm-d963ab1f58adb6daa028533ff3285841d7e45f80.tar.xz
Fix generation of multi-stage instruction itineraries. Patch by
giuma.cordes@gmail.com git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49276 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/SubtargetEmitter.cpp')
-rw-r--r--utils/TableGen/SubtargetEmitter.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp
index a0dc96787d..1f833efcaa 100644
--- a/utils/TableGen/SubtargetEmitter.cpp
+++ b/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