[llvm-commits] [llvm] r159959 - /llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
Andrew Trick
atrick at apple.com
Mon Jul 9 13:43:03 PDT 2012
Author: atrick
Date: Mon Jul 9 15:43:03 2012
New Revision: 159959
URL: http://llvm.org/viewvc/llvm-project?rev=159959&view=rev
Log:
Machine model: allow itineraries to be shared by different processor models.
Modified:
llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
Modified: llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SubtargetEmitter.cpp?rev=159959&r1=159958&r2=159959&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/SubtargetEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/SubtargetEmitter.cpp Mon Jul 9 15:43:03 2012
@@ -336,10 +336,16 @@
std::vector<std::vector<InstrItinerary> >
&ProcItinLists) {
+ // Multiple processor models may share an itinerary record. Emit it once.
+ SmallPtrSet<Record*, 8> ItinsDefSet;
+
// Emit functional units for all the itineraries.
for (CodeGenSchedModels::ProcIter PI = SchedModels.procModelBegin(),
PE = SchedModels.procModelEnd(); PI != PE; ++PI) {
+ if (!ItinsDefSet.insert(PI->ItinsDef))
+ continue;
+
std::vector<Record*> FUs = PI->ItinsDef->getValueAsListOfDefs("FU");
if (FUs.empty())
continue;
@@ -508,12 +514,18 @@
EmitItineraries(raw_ostream &OS,
std::vector<std::vector<InstrItinerary> > &ProcItinLists) {
+ // Multiple processor models may share an itinerary record. Emit it once.
+ SmallPtrSet<Record*, 8> ItinsDefSet;
+
// For each processor's machine model
std::vector<std::vector<InstrItinerary> >::iterator
ProcItinListsIter = ProcItinLists.begin();
for (CodeGenSchedModels::ProcIter PI = SchedModels.procModelBegin(),
PE = SchedModels.procModelEnd(); PI != PE; ++PI) {
+
Record *ItinsDef = PI->ItinsDef;
+ if (!ItinsDefSet.insert(ItinsDef))
+ continue;
// Get processor itinerary name
const std::string &Name = ItinsDef->getName();
More information about the llvm-commits
mailing list