@@ -24,15 +24,9 @@ using namespace llvm;
24
24
#define DEBUG_TYPE " subtarget-emitter"
25
25
26
26
#ifndef NDEBUG
27
- static void dumpIdxVec (const IdxVec &V) {
28
- for (unsigned i = 0 , e = V.size (); i < e; ++i) {
29
- dbgs () << V[i] << " , " ;
30
- }
31
- }
32
- static void dumpIdxVec (const SmallVectorImpl<unsigned > &V) {
33
- for (unsigned i = 0 , e = V.size (); i < e; ++i) {
34
- dbgs () << V[i] << " , " ;
35
- }
27
+ static void dumpIdxVec (ArrayRef<unsigned > V) {
28
+ for (unsigned Idx : V)
29
+ dbgs () << Idx << " , " ;
36
30
}
37
31
#endif
38
32
@@ -326,9 +320,9 @@ void CodeGenSchedModels::collectSchedRW() {
326
320
}
327
321
328
322
// / Compute a SchedWrite name from a sequence of writes.
329
- std::string CodeGenSchedModels::genRWName (const IdxVec& Seq, bool IsRead) {
323
+ std::string CodeGenSchedModels::genRWName (ArrayRef< unsigned > Seq, bool IsRead) {
330
324
std::string Name (" (" );
331
- for (IdxIter I = Seq.begin (), E = Seq.end (); I != E; ++I) {
325
+ for (auto I = Seq.begin (), E = Seq.end (); I != E; ++I) {
332
326
if (I != Seq.begin ())
333
327
Name += ' _' ;
334
328
Name += getSchedRW (*I, IsRead).Name ;
@@ -457,13 +451,13 @@ void CodeGenSchedModels::expandRWSeqForProc(
457
451
}
458
452
459
453
// Find the existing SchedWrite that models this sequence of writes.
460
- unsigned CodeGenSchedModels::findRWForSequence (const IdxVec & Seq,
454
+ unsigned CodeGenSchedModels::findRWForSequence (ArrayRef< unsigned > Seq,
461
455
bool IsRead) {
462
456
std::vector<CodeGenSchedRW> &RWVec = IsRead ? SchedReads : SchedWrites;
463
457
464
458
for (std::vector<CodeGenSchedRW>::iterator I = RWVec.begin (), E = RWVec.end ();
465
459
I != E; ++I) {
466
- if (I->Sequence == Seq)
460
+ if (makeArrayRef ( I->Sequence ) == Seq)
467
461
return I - RWVec.begin ();
468
462
}
469
463
// Index zero reserved for invalid RW.
@@ -585,11 +579,11 @@ void CodeGenSchedModels::collectSchedClasses() {
585
579
// / Find an SchedClass that has been inferred from a per-operand list of
586
580
// / SchedWrites and SchedReads.
587
581
unsigned CodeGenSchedModels::findSchedClassIdx (Record *ItinClassDef,
588
- const IdxVec & Writes,
589
- const IdxVec & Reads) const {
582
+ ArrayRef< unsigned > Writes,
583
+ ArrayRef< unsigned > Reads) const {
590
584
for (SchedClassIter I = schedClassBegin (), E = schedClassEnd (); I != E; ++I) {
591
- if (I->ItinClassDef == ItinClassDef
592
- && I->Writes == Writes && I-> Reads == Reads) {
585
+ if (I->ItinClassDef == ItinClassDef && makeArrayRef (I-> Writes ) == Writes &&
586
+ makeArrayRef ( I->Reads ) == Reads) {
593
587
return I - schedClassBegin ();
594
588
}
595
589
}
@@ -603,20 +597,22 @@ unsigned CodeGenSchedModels::getSchedClassIdx(
603
597
return InstrClassMap.lookup (Inst.TheDef );
604
598
}
605
599
606
- std::string CodeGenSchedModels::createSchedClassName (
607
- Record *ItinClassDef, const IdxVec &OperWrites, const IdxVec &OperReads) {
600
+ std::string
601
+ CodeGenSchedModels::createSchedClassName (Record *ItinClassDef,
602
+ ArrayRef<unsigned > OperWrites,
603
+ ArrayRef<unsigned > OperReads) {
608
604
609
605
std::string Name;
610
606
if (ItinClassDef && ItinClassDef->getName () != " NoItinerary" )
611
607
Name = ItinClassDef->getName ();
612
- for (IdxIter WI = OperWrites. begin (), WE = OperWrites. end (); WI != WE; ++WI ) {
608
+ for (unsigned Idx : OperWrites) {
613
609
if (!Name.empty ())
614
610
Name += ' _' ;
615
- Name += SchedWrites[*WI ].Name ;
611
+ Name += SchedWrites[Idx ].Name ;
616
612
}
617
- for (IdxIter RI = OperReads. begin (), RE = OperReads. end (); RI != RE; ++RI ) {
613
+ for (unsigned Idx : OperReads) {
618
614
Name += ' _' ;
619
- Name += SchedReads[*RI ].Name ;
615
+ Name += SchedReads[Idx ].Name ;
620
616
}
621
617
return Name;
622
618
}
@@ -636,10 +632,9 @@ std::string CodeGenSchedModels::createSchedClassName(const RecVec &InstDefs) {
636
632
// / SchedWrites and SchedReads. ProcIndices contains the set of IDs of
637
633
// / processors that may utilize this class.
638
634
unsigned CodeGenSchedModels::addSchedClass (Record *ItinClassDef,
639
- const IdxVec &OperWrites,
640
- const IdxVec &OperReads,
641
- const IdxVec &ProcIndices)
642
- {
635
+ ArrayRef<unsigned > OperWrites,
636
+ ArrayRef<unsigned > OperReads,
637
+ ArrayRef<unsigned > ProcIndices) {
643
638
assert (!ProcIndices.empty () && " expect at least one ProcIdx" );
644
639
645
640
unsigned Idx = findSchedClassIdx (ItinClassDef, OperWrites, OperReads);
@@ -1322,10 +1317,10 @@ static void inferFromTransitions(ArrayRef<PredTransition> LastTransitions,
1322
1317
// Create new SchedClasses for the given ReadWrite list. If any of the
1323
1318
// ReadWrites refers to a SchedVariant, create a new SchedClass for each variant
1324
1319
// of the ReadWrite list, following Aliases if necessary.
1325
- void CodeGenSchedModels::inferFromRW (const IdxVec & OperWrites,
1326
- const IdxVec & OperReads,
1320
+ void CodeGenSchedModels::inferFromRW (ArrayRef< unsigned > OperWrites,
1321
+ ArrayRef< unsigned > OperReads,
1327
1322
unsigned FromClassIdx,
1328
- const IdxVec & ProcIndices) {
1323
+ ArrayRef< unsigned > ProcIndices) {
1329
1324
DEBUG (dbgs () << " INFER RW proc(" ; dumpIdxVec (ProcIndices); dbgs () << " ) " );
1330
1325
1331
1326
// Create a seed transition with an empty PredTerm and the expanded sequences
@@ -1335,9 +1330,9 @@ void CodeGenSchedModels::inferFromRW(const IdxVec &OperWrites,
1335
1330
LastTransitions.back ().ProcIndices .append (ProcIndices.begin (),
1336
1331
ProcIndices.end ());
1337
1332
1338
- for (IdxIter I = OperWrites. begin (), E = OperWrites. end (); I != E; ++I ) {
1333
+ for (unsigned WriteIdx : OperWrites) {
1339
1334
IdxVec WriteSeq;
1340
- expandRWSequence (*I , WriteSeq, /* IsRead=*/ false );
1335
+ expandRWSequence (WriteIdx , WriteSeq, /* IsRead=*/ false );
1341
1336
unsigned Idx = LastTransitions[0 ].WriteSequences .size ();
1342
1337
LastTransitions[0 ].WriteSequences .resize (Idx + 1 );
1343
1338
SmallVectorImpl<unsigned > &Seq = LastTransitions[0 ].WriteSequences [Idx];
@@ -1346,9 +1341,9 @@ void CodeGenSchedModels::inferFromRW(const IdxVec &OperWrites,
1346
1341
DEBUG (dbgs () << " (" ; dumpIdxVec (Seq); dbgs () << " ) " );
1347
1342
}
1348
1343
DEBUG (dbgs () << " Reads: " );
1349
- for (IdxIter I = OperReads. begin (), E = OperReads. end (); I != E; ++I ) {
1344
+ for (unsigned ReadIdx : OperReads) {
1350
1345
IdxVec ReadSeq;
1351
- expandRWSequence (*I , ReadSeq, /* IsRead=*/ true );
1346
+ expandRWSequence (ReadIdx , ReadSeq, /* IsRead=*/ true );
1352
1347
unsigned Idx = LastTransitions[0 ].ReadSequences .size ();
1353
1348
LastTransitions[0 ].ReadSequences .resize (Idx + 1 );
1354
1349
SmallVectorImpl<unsigned > &Seq = LastTransitions[0 ].ReadSequences [Idx];
@@ -1552,20 +1547,16 @@ void CodeGenSchedModels::collectItinProcResources(Record *ItinClassDef) {
1552
1547
}
1553
1548
1554
1549
void CodeGenSchedModels::collectRWResources (unsigned RWIdx, bool IsRead,
1555
- const IdxVec & ProcIndices) {
1550
+ ArrayRef< unsigned > ProcIndices) {
1556
1551
const CodeGenSchedRW &SchedRW = getSchedRW (RWIdx, IsRead);
1557
1552
if (SchedRW.TheDef ) {
1558
1553
if (!IsRead && SchedRW.TheDef ->isSubClassOf (" SchedWriteRes" )) {
1559
- for (IdxIter PI = ProcIndices.begin (), PE = ProcIndices.end ();
1560
- PI != PE; ++PI) {
1561
- addWriteRes (SchedRW.TheDef , *PI);
1562
- }
1554
+ for (unsigned Idx : ProcIndices)
1555
+ addWriteRes (SchedRW.TheDef , Idx);
1563
1556
}
1564
1557
else if (IsRead && SchedRW.TheDef ->isSubClassOf (" SchedReadAdvance" )) {
1565
- for (IdxIter PI = ProcIndices.begin (), PE = ProcIndices.end ();
1566
- PI != PE; ++PI) {
1567
- addReadAdvance (SchedRW.TheDef , *PI);
1568
- }
1558
+ for (unsigned Idx : ProcIndices)
1559
+ addReadAdvance (SchedRW.TheDef , Idx);
1569
1560
}
1570
1561
}
1571
1562
for (RecIter AI = SchedRW.Aliases .begin (), AE = SchedRW.Aliases .end ();
@@ -1590,15 +1581,15 @@ void CodeGenSchedModels::collectRWResources(unsigned RWIdx, bool IsRead,
1590
1581
}
1591
1582
1592
1583
// Collect resources for a set of read/write types and processor indices.
1593
- void CodeGenSchedModels::collectRWResources (const IdxVec & Writes,
1594
- const IdxVec & Reads,
1595
- const IdxVec & ProcIndices) {
1584
+ void CodeGenSchedModels::collectRWResources (ArrayRef< unsigned > Writes,
1585
+ ArrayRef< unsigned > Reads,
1586
+ ArrayRef< unsigned > ProcIndices) {
1596
1587
1597
- for (IdxIter WI = Writes. begin (), WE = Writes. end (); WI != WE; ++WI )
1598
- collectRWResources (*WI , /* IsRead=*/ false , ProcIndices);
1588
+ for (unsigned Idx : Writes)
1589
+ collectRWResources (Idx , /* IsRead=*/ false , ProcIndices);
1599
1590
1600
- for (IdxIter RI = Reads. begin (), RE = Reads. end (); RI != RE; ++RI )
1601
- collectRWResources (*RI , /* IsRead=*/ true , ProcIndices);
1591
+ for (unsigned Idx : Reads)
1592
+ collectRWResources (Idx , /* IsRead=*/ true , ProcIndices);
1602
1593
}
1603
1594
1604
1595
0 commit comments