Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 109f9e6

Browse files
committed
[TblGen] ArrayRefize CodeGenSchedule. No functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251187 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 55cb91e commit 109f9e6

File tree

2 files changed

+61
-69
lines changed

2 files changed

+61
-69
lines changed

utils/TableGen/CodeGenSchedule.cpp

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,9 @@ using namespace llvm;
2424
#define DEBUG_TYPE "subtarget-emitter"
2525

2626
#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 << ", ";
3630
}
3731
#endif
3832

@@ -326,9 +320,9 @@ void CodeGenSchedModels::collectSchedRW() {
326320
}
327321

328322
/// 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) {
330324
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) {
332326
if (I != Seq.begin())
333327
Name += '_';
334328
Name += getSchedRW(*I, IsRead).Name;
@@ -457,13 +451,13 @@ void CodeGenSchedModels::expandRWSeqForProc(
457451
}
458452

459453
// Find the existing SchedWrite that models this sequence of writes.
460-
unsigned CodeGenSchedModels::findRWForSequence(const IdxVec &Seq,
454+
unsigned CodeGenSchedModels::findRWForSequence(ArrayRef<unsigned> Seq,
461455
bool IsRead) {
462456
std::vector<CodeGenSchedRW> &RWVec = IsRead ? SchedReads : SchedWrites;
463457

464458
for (std::vector<CodeGenSchedRW>::iterator I = RWVec.begin(), E = RWVec.end();
465459
I != E; ++I) {
466-
if (I->Sequence == Seq)
460+
if (makeArrayRef(I->Sequence) == Seq)
467461
return I - RWVec.begin();
468462
}
469463
// Index zero reserved for invalid RW.
@@ -585,11 +579,11 @@ void CodeGenSchedModels::collectSchedClasses() {
585579
/// Find an SchedClass that has been inferred from a per-operand list of
586580
/// SchedWrites and SchedReads.
587581
unsigned CodeGenSchedModels::findSchedClassIdx(Record *ItinClassDef,
588-
const IdxVec &Writes,
589-
const IdxVec &Reads) const {
582+
ArrayRef<unsigned> Writes,
583+
ArrayRef<unsigned> Reads) const {
590584
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) {
593587
return I - schedClassBegin();
594588
}
595589
}
@@ -603,20 +597,22 @@ unsigned CodeGenSchedModels::getSchedClassIdx(
603597
return InstrClassMap.lookup(Inst.TheDef);
604598
}
605599

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) {
608604

609605
std::string Name;
610606
if (ItinClassDef && ItinClassDef->getName() != "NoItinerary")
611607
Name = ItinClassDef->getName();
612-
for (IdxIter WI = OperWrites.begin(), WE = OperWrites.end(); WI != WE; ++WI) {
608+
for (unsigned Idx : OperWrites) {
613609
if (!Name.empty())
614610
Name += '_';
615-
Name += SchedWrites[*WI].Name;
611+
Name += SchedWrites[Idx].Name;
616612
}
617-
for (IdxIter RI = OperReads.begin(), RE = OperReads.end(); RI != RE; ++RI) {
613+
for (unsigned Idx : OperReads) {
618614
Name += '_';
619-
Name += SchedReads[*RI].Name;
615+
Name += SchedReads[Idx].Name;
620616
}
621617
return Name;
622618
}
@@ -636,10 +632,9 @@ std::string CodeGenSchedModels::createSchedClassName(const RecVec &InstDefs) {
636632
/// SchedWrites and SchedReads. ProcIndices contains the set of IDs of
637633
/// processors that may utilize this class.
638634
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) {
643638
assert(!ProcIndices.empty() && "expect at least one ProcIdx");
644639

645640
unsigned Idx = findSchedClassIdx(ItinClassDef, OperWrites, OperReads);
@@ -1322,10 +1317,10 @@ static void inferFromTransitions(ArrayRef<PredTransition> LastTransitions,
13221317
// Create new SchedClasses for the given ReadWrite list. If any of the
13231318
// ReadWrites refers to a SchedVariant, create a new SchedClass for each variant
13241319
// 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,
13271322
unsigned FromClassIdx,
1328-
const IdxVec &ProcIndices) {
1323+
ArrayRef<unsigned> ProcIndices) {
13291324
DEBUG(dbgs() << "INFER RW proc("; dumpIdxVec(ProcIndices); dbgs() << ") ");
13301325

13311326
// Create a seed transition with an empty PredTerm and the expanded sequences
@@ -1335,9 +1330,9 @@ void CodeGenSchedModels::inferFromRW(const IdxVec &OperWrites,
13351330
LastTransitions.back().ProcIndices.append(ProcIndices.begin(),
13361331
ProcIndices.end());
13371332

1338-
for (IdxIter I = OperWrites.begin(), E = OperWrites.end(); I != E; ++I) {
1333+
for (unsigned WriteIdx : OperWrites) {
13391334
IdxVec WriteSeq;
1340-
expandRWSequence(*I, WriteSeq, /*IsRead=*/false);
1335+
expandRWSequence(WriteIdx, WriteSeq, /*IsRead=*/false);
13411336
unsigned Idx = LastTransitions[0].WriteSequences.size();
13421337
LastTransitions[0].WriteSequences.resize(Idx + 1);
13431338
SmallVectorImpl<unsigned> &Seq = LastTransitions[0].WriteSequences[Idx];
@@ -1346,9 +1341,9 @@ void CodeGenSchedModels::inferFromRW(const IdxVec &OperWrites,
13461341
DEBUG(dbgs() << "("; dumpIdxVec(Seq); dbgs() << ") ");
13471342
}
13481343
DEBUG(dbgs() << " Reads: ");
1349-
for (IdxIter I = OperReads.begin(), E = OperReads.end(); I != E; ++I) {
1344+
for (unsigned ReadIdx : OperReads) {
13501345
IdxVec ReadSeq;
1351-
expandRWSequence(*I, ReadSeq, /*IsRead=*/true);
1346+
expandRWSequence(ReadIdx, ReadSeq, /*IsRead=*/true);
13521347
unsigned Idx = LastTransitions[0].ReadSequences.size();
13531348
LastTransitions[0].ReadSequences.resize(Idx + 1);
13541349
SmallVectorImpl<unsigned> &Seq = LastTransitions[0].ReadSequences[Idx];
@@ -1552,20 +1547,16 @@ void CodeGenSchedModels::collectItinProcResources(Record *ItinClassDef) {
15521547
}
15531548

15541549
void CodeGenSchedModels::collectRWResources(unsigned RWIdx, bool IsRead,
1555-
const IdxVec &ProcIndices) {
1550+
ArrayRef<unsigned> ProcIndices) {
15561551
const CodeGenSchedRW &SchedRW = getSchedRW(RWIdx, IsRead);
15571552
if (SchedRW.TheDef) {
15581553
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);
15631556
}
15641557
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);
15691560
}
15701561
}
15711562
for (RecIter AI = SchedRW.Aliases.begin(), AE = SchedRW.Aliases.end();
@@ -1590,15 +1581,15 @@ void CodeGenSchedModels::collectRWResources(unsigned RWIdx, bool IsRead,
15901581
}
15911582

15921583
// 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) {
15961587

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);
15991590

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);
16021593
}
16031594

16041595

utils/TableGen/CodeGenSchedule.h

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ struct CodeGenSchedRW {
7272
IsSequence = Def->isSubClassOf("WriteSequence");
7373
}
7474

75-
CodeGenSchedRW(unsigned Idx, bool Read, const IdxVec &Seq,
75+
CodeGenSchedRW(unsigned Idx, bool Read, ArrayRef<unsigned> Seq,
7676
const std::string &Name)
77-
: Index(Idx), Name(Name), TheDef(nullptr), IsRead(Read), IsAlias(false),
78-
HasVariants(false), IsVariadic(false), IsSequence(true), Sequence(Seq) {
77+
: Index(Idx), Name(Name), TheDef(nullptr), IsRead(Read), IsAlias(false),
78+
HasVariants(false), IsVariadic(false), IsSequence(true), Sequence(Seq) {
7979
assert(Sequence.size() > 1 && "implied sequence needs >1 RWs");
8080
}
8181

@@ -144,8 +144,9 @@ struct CodeGenSchedClass {
144144

145145
CodeGenSchedClass(): Index(0), ItinClassDef(nullptr) {}
146146

147-
bool isKeyEqual(Record *IC, const IdxVec &W, const IdxVec &R) {
148-
return ItinClassDef == IC && Writes == W && Reads == R;
147+
bool isKeyEqual(Record *IC, ArrayRef<unsigned> W, ArrayRef<unsigned> R) {
148+
return ItinClassDef == IC && makeArrayRef(Writes) == W &&
149+
makeArrayRef(Reads) == R;
149150
}
150151

151152
// Is this class generated from a variants if existing classes? Instructions
@@ -363,14 +364,14 @@ class CodeGenSchedModels {
363364
void expandRWSeqForProc(unsigned RWIdx, IdxVec &RWSeq, bool IsRead,
364365
const CodeGenProcModel &ProcModel) const;
365366

366-
unsigned addSchedClass(Record *ItinDef, const IdxVec &OperWrites,
367-
const IdxVec &OperReads, const IdxVec &ProcIndices);
367+
unsigned addSchedClass(Record *ItinDef, ArrayRef<unsigned> OperWrites,
368+
ArrayRef<unsigned> OperReads,
369+
ArrayRef<unsigned> ProcIndices);
368370

369371
unsigned findOrInsertRW(ArrayRef<unsigned> Seq, bool IsRead);
370372

371-
unsigned findSchedClassIdx(Record *ItinClassDef,
372-
const IdxVec &Writes,
373-
const IdxVec &Reads) const;
373+
unsigned findSchedClassIdx(Record *ItinClassDef, ArrayRef<unsigned> Writes,
374+
ArrayRef<unsigned> Reads) const;
374375

375376
Record *findProcResUnits(Record *ProcResKind,
376377
const CodeGenProcModel &PM) const;
@@ -383,14 +384,14 @@ class CodeGenSchedModels {
383384

384385
void collectSchedRW();
385386

386-
std::string genRWName(const IdxVec& Seq, bool IsRead);
387-
unsigned findRWForSequence(const IdxVec &Seq, bool IsRead);
387+
std::string genRWName(ArrayRef<unsigned> Seq, bool IsRead);
388+
unsigned findRWForSequence(ArrayRef<unsigned> Seq, bool IsRead);
388389

389390
void collectSchedClasses();
390391

391392
std::string createSchedClassName(Record *ItinClassDef,
392-
const IdxVec &OperWrites,
393-
const IdxVec &OperReads);
393+
ArrayRef<unsigned> OperWrites,
394+
ArrayRef<unsigned> OperReads);
394395
std::string createSchedClassName(const RecVec &InstDefs);
395396
void createInstRWClass(Record *InstRWDef);
396397

@@ -400,8 +401,8 @@ class CodeGenSchedModels {
400401

401402
void inferSchedClasses();
402403

403-
void inferFromRW(const IdxVec &OperWrites, const IdxVec &OperReads,
404-
unsigned FromClassIdx, const IdxVec &ProcIndices);
404+
void inferFromRW(ArrayRef<unsigned> OperWrites, ArrayRef<unsigned> OperReads,
405+
unsigned FromClassIdx, ArrayRef<unsigned> ProcIndices);
405406
void inferFromItinClass(Record *ItinClassDef, unsigned FromClassIdx);
406407
void inferFromInstRWs(unsigned SCIdx);
407408

@@ -413,10 +414,10 @@ class CodeGenSchedModels {
413414
void collectItinProcResources(Record *ItinClassDef);
414415

415416
void collectRWResources(unsigned RWIdx, bool IsRead,
416-
const IdxVec &ProcIndices);
417+
ArrayRef<unsigned> ProcIndices);
417418

418-
void collectRWResources(const IdxVec &Writes, const IdxVec &Reads,
419-
const IdxVec &ProcIndices);
419+
void collectRWResources(ArrayRef<unsigned> Writes, ArrayRef<unsigned> Reads,
420+
ArrayRef<unsigned> ProcIndices);
420421

421422
void addProcResource(Record *ProcResourceKind, CodeGenProcModel &PM);
422423

0 commit comments

Comments
 (0)