diff options
author | Andrew Trick <atrick@apple.com> | 2011-04-01 02:22:47 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2011-04-01 02:22:47 +0000 |
commit | 234823297e0fc0babddd2ab84054bf68f64a54d1 (patch) | |
tree | f509dab67f99cdbcd695e4c72c9584f2e8f6349c /utils | |
parent | da96cf2029e47baf77df5c1ce6528a04246d6462 (diff) | |
download | external_llvm-234823297e0fc0babddd2ab84054bf68f64a54d1.zip external_llvm-234823297e0fc0babddd2ab84054bf68f64a54d1.tar.gz external_llvm-234823297e0fc0babddd2ab84054bf68f64a54d1.tar.bz2 |
Add annotations to tablegen-generated processor itineraries, or replace them with something meaningful. I want to be able to read and debug the generated tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128703 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/SubtargetEmitter.cpp | 34 | ||||
-rw-r--r-- | utils/TableGen/SubtargetEmitter.h | 3 |
2 files changed, 21 insertions, 16 deletions
diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp index 8745d76..8ca4b1c 100644 --- a/utils/TableGen/SubtargetEmitter.cpp +++ b/utils/TableGen/SubtargetEmitter.cpp @@ -342,7 +342,6 @@ void SubtargetEmitter::EmitStageAndOperandCycleData(raw_ostream &OS, BypassTable += " 0, // No itinerary\n"; unsigned StageCount = 1, OperandCycleCount = 1; - unsigned ItinStageEnum = 1, ItinOperandCycleEnum = 1; std::map<std::string, unsigned> ItinStageMap, ItinOperandMap; for (unsigned i = 0, N = ProcItinList.size(); i < N; i++) { // Next record @@ -386,12 +385,14 @@ void SubtargetEmitter::EmitStageAndOperandCycleData(raw_ostream &OS, if (NStages > 0) { FindStage = ItinStageMap[ItinStageString]; if (FindStage == 0) { - // Emit as { cycles, u1 | u2 | ... | un, timeinc }, // index - StageTable += ItinStageString + ", // " + itostr(ItinStageEnum) + "\n"; + // Emit as { cycles, u1 | u2 | ... | un, timeinc }, // indices + StageTable += ItinStageString + ", // " + itostr(StageCount); + if (NStages > 1) + StageTable += "-" + itostr(StageCount + NStages - 1); + StageTable += "\n"; // Record Itin class number. ItinStageMap[ItinStageString] = FindStage = StageCount; StageCount += NStages; - ItinStageEnum++; } } @@ -402,18 +403,18 @@ void SubtargetEmitter::EmitStageAndOperandCycleData(raw_ostream &OS, FindOperandCycle = ItinOperandMap[ItinOperandString]; if (FindOperandCycle == 0) { // Emit as cycle, // index - OperandCycleTable += ItinOperandCycleString + ", // " + - itostr(ItinOperandCycleEnum) + "\n"; + OperandCycleTable += ItinOperandCycleString + ", // "; + std::string OperandIdxComment = itostr(OperandCycleCount); + if (NOperandCycles > 1) + OperandIdxComment += "-" + + itostr(OperandCycleCount + NOperandCycles - 1); + OperandCycleTable += OperandIdxComment + "\n"; // Record Itin class number. ItinOperandMap[ItinOperandCycleString] = FindOperandCycle = OperandCycleCount; - // Emit as bypass, // index - BypassTable += ItinBypassString + ", // " + - itostr(ItinOperandCycleEnum) + "\n"; - + BypassTable += ItinBypassString + ", // " + OperandIdxComment + "\n"; OperandCycleCount += NOperandCycles; - ItinOperandCycleEnum++; } } @@ -461,8 +462,10 @@ void SubtargetEmitter::EmitStageAndOperandCycleData(raw_ostream &OS, // // EmitProcessorData - Generate data for processor itineraries. // -void SubtargetEmitter::EmitProcessorData(raw_ostream &OS, - std::vector<std::vector<InstrItinerary> > &ProcList) { +void SubtargetEmitter:: +EmitProcessorData(raw_ostream &OS, + std::vector<Record*> &ItinClassList, + std::vector<std::vector<InstrItinerary> > &ProcList) { // Get an iterator for processor itinerary stages std::vector<std::vector<InstrItinerary> >::iterator ProcListIter = ProcList.begin(); @@ -486,6 +489,7 @@ void SubtargetEmitter::EmitProcessorData(raw_ostream &OS, // For each itinerary class std::vector<InstrItinerary> &ItinList = *ProcListIter++; + assert(ItinList.size() == ItinClassList.size() && "bad itinerary"); for (unsigned j = 0, M = ItinList.size(); j < M; ++j) { InstrItinerary &Intinerary = ItinList[j]; @@ -502,7 +506,7 @@ void SubtargetEmitter::EmitProcessorData(raw_ostream &OS, Intinerary.LastOperandCycle << " }"; } - OS << ", // " << j << "\n"; + OS << ", // " << j << " " << ItinClassList[j]->getName() << "\n"; } // End processor itinerary table @@ -579,7 +583,7 @@ void SubtargetEmitter::EmitData(raw_ostream &OS) { EmitStageAndOperandCycleData(OS, NItinClasses, ItinClassesMap, ItinClassList, ProcList); // Emit the processor itinerary data - EmitProcessorData(OS, ProcList); + EmitProcessorData(OS, ItinClassList, ProcList); // Emit the processor lookup data EmitProcessorLookup(OS); } diff --git a/utils/TableGen/SubtargetEmitter.h b/utils/TableGen/SubtargetEmitter.h index 810c001..93055b7 100644 --- a/utils/TableGen/SubtargetEmitter.h +++ b/utils/TableGen/SubtargetEmitter.h @@ -48,7 +48,8 @@ class SubtargetEmitter : public TableGenBackend { std::vector<Record*> &ItinClassList, std::vector<std::vector<InstrItinerary> > &ProcList); void EmitProcessorData(raw_ostream &OS, - std::vector<std::vector<InstrItinerary> > &ProcList); + std::vector<Record*> &ItinClassList, + std::vector<std::vector<InstrItinerary> > &ProcList); void EmitProcessorLookup(raw_ostream &OS); void EmitData(raw_ostream &OS); void ParseFeaturesFunction(raw_ostream &OS); |