34
34
#include < iterator>
35
35
#include < map>
36
36
#include < queue>
37
- #include < set>
38
37
#include < string>
39
38
#include < tuple>
40
39
#include < utility>
@@ -48,7 +47,7 @@ using namespace llvm;
48
47
// CodeGenSubRegIndex
49
48
// ===----------------------------------------------------------------------===//
50
49
51
- CodeGenSubRegIndex::CodeGenSubRegIndex (Record *R, unsigned Enum,
50
+ CodeGenSubRegIndex::CodeGenSubRegIndex (const Record *R, unsigned Enum,
52
51
const CodeGenHwModes &CGH)
53
52
: TheDef(R), EnumValue(Enum), AllSuperRegsCovered(true ), Artificial(true ) {
54
53
Name = std::string (R->getName ());
@@ -99,7 +98,7 @@ void CodeGenSubRegIndex::updateComponents(CodeGenRegBank &RegBank) {
99
98
PrintFatalError (TheDef->getLoc (),
100
99
" CoveredBySubRegs must have two or more entries" );
101
100
SmallVector<CodeGenSubRegIndex *, 8 > IdxParts;
102
- for (Record *Part : Parts)
101
+ for (const Record *Part : Parts)
103
102
IdxParts.push_back (RegBank.getSubRegIdx (Part));
104
103
setConcatenationOf (IdxParts);
105
104
}
@@ -190,8 +189,7 @@ void CodeGenRegister::buildObjectGraph(CodeGenRegBank &RegBank) {
190
189
191
190
// Add ad hoc alias links. This is a symmetric relationship between two
192
191
// registers, so build a symmetric graph by adding links in both ends.
193
- std::vector<Record *> Aliases = TheDef->getValueAsListOfDefs (" Aliases" );
194
- for (Record *Alias : Aliases) {
192
+ for (const Record *Alias : TheDef->getValueAsListOfDefs (" Aliases" )) {
195
193
CodeGenRegister *Reg = RegBank.getReg (Alias);
196
194
ExplicitAliases.push_back (Reg);
197
195
Reg->ExplicitAliases .push_back (this );
@@ -757,15 +755,16 @@ static void sortAndUniqueRegisters(CodeGenRegister::Vec &M) {
757
755
M.erase (llvm::unique (M, deref<std::equal_to<>>()), M.end ());
758
756
}
759
757
760
- CodeGenRegisterClass::CodeGenRegisterClass (CodeGenRegBank &RegBank, Record *R)
758
+ CodeGenRegisterClass::CodeGenRegisterClass (CodeGenRegBank &RegBank,
759
+ const Record *R)
761
760
: TheDef(R), Name(std::string(R->getName ())),
762
761
TopoSigs(RegBank.getNumTopoSigs()), EnumValue(-1 ), TSFlags(0 ) {
763
762
GeneratePressureSet = R->getValueAsBit (" GeneratePressureSet" );
764
763
std::vector<Record *> TypeList = R->getValueAsListOfDefs (" RegTypes" );
765
764
if (TypeList.empty ())
766
765
PrintFatalError (R->getLoc (), " RegTypes list must not be empty!" );
767
766
for (unsigned i = 0 , e = TypeList.size (); i != e; ++i) {
768
- Record *Type = TypeList[i];
767
+ const Record *Type = TypeList[i];
769
768
if (!Type->isSubClassOf (" ValueType" ))
770
769
PrintFatalError (R->getLoc (),
771
770
" RegTypes list member '" + Type->getName () +
@@ -1168,17 +1167,17 @@ void CodeGenRegisterClass::buildRegUnitSet(
1168
1167
// ===----------------------------------------------------------------------===//
1169
1168
1170
1169
CodeGenRegisterCategory::CodeGenRegisterCategory (CodeGenRegBank &RegBank,
1171
- Record *R)
1170
+ const Record *R)
1172
1171
: TheDef(R), Name(std::string(R->getName ())) {
1173
- for (Record *RegClass : R->getValueAsListOfDefs (" Classes" ))
1172
+ for (const Record *RegClass : R->getValueAsListOfDefs (" Classes" ))
1174
1173
Classes.push_back (RegBank.getRegClass (RegClass));
1175
1174
}
1176
1175
1177
1176
// ===----------------------------------------------------------------------===//
1178
1177
// CodeGenRegBank
1179
1178
// ===----------------------------------------------------------------------===//
1180
1179
1181
- CodeGenRegBank::CodeGenRegBank (RecordKeeper &Records,
1180
+ CodeGenRegBank::CodeGenRegBank (const RecordKeeper &Records,
1182
1181
const CodeGenHwModes &Modes)
1183
1182
: CGH(Modes) {
1184
1183
// Configure register Sets to understand register classes and tuples.
@@ -1189,10 +1188,8 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
1189
1188
1190
1189
// Read in the user-defined (named) sub-register indices.
1191
1190
// More indices will be synthesized later.
1192
- std::vector<Record *> SRIs = Records.getAllDerivedDefinitions (" SubRegIndex" );
1193
- llvm::sort (SRIs, LessRecord ());
1194
- for (unsigned i = 0 , e = SRIs.size (); i != e; ++i)
1195
- getSubRegIdx (SRIs[i]);
1191
+ for (const Record *SRI : Records.getAllDerivedDefinitions (" SubRegIndex" ))
1192
+ getSubRegIdx (SRI);
1196
1193
// Build composite maps from ComposedOf fields.
1197
1194
for (auto &Idx : SubRegIndices)
1198
1195
Idx.updateComponents (*this );
@@ -1223,7 +1220,7 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
1223
1220
getReg (Regs[i]);
1224
1221
1225
1222
// Expand tuples and number the new registers.
1226
- for (Record *R : Records.getAllDerivedDefinitions (" RegisterTuples" )) {
1223
+ for (const Record *R : Records.getAllDerivedDefinitions (" RegisterTuples" )) {
1227
1224
std::vector<const Record *> TupRegs = *Sets.expand (R);
1228
1225
llvm::sort (TupRegs, LessRecordRegister ());
1229
1226
for (const Record *RC : TupRegs)
@@ -1288,7 +1285,8 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
1288
1285
NumNativeRegUnits = RegUnits.size ();
1289
1286
1290
1287
// Read in register class definitions.
1291
- std::vector<Record *> RCs = Records.getAllDerivedDefinitions (" RegisterClass" );
1288
+ ArrayRef<const Record *> RCs =
1289
+ Records.getAllDerivedDefinitions (" RegisterClass" );
1292
1290
if (RCs.empty ())
1293
1291
PrintFatalError (" No 'RegisterClass' subclasses defined!" );
1294
1292
@@ -1311,9 +1309,7 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
1311
1309
CodeGenRegisterClass::computeSubClasses (*this );
1312
1310
1313
1311
// Read in the register category definitions.
1314
- std::vector<Record *> RCats =
1315
- Records.getAllDerivedDefinitions (" RegisterCategory" );
1316
- for (auto *R : RCats)
1312
+ for (const Record *R : Records.getAllDerivedDefinitions (" RegisterCategory" ))
1317
1313
RegCategories.emplace_back (*this , R);
1318
1314
}
1319
1315
@@ -1324,7 +1320,7 @@ CodeGenSubRegIndex *CodeGenRegBank::createSubRegIndex(StringRef Name,
1324
1320
return &SubRegIndices.back ();
1325
1321
}
1326
1322
1327
- CodeGenSubRegIndex *CodeGenRegBank::getSubRegIdx (Record *Def) {
1323
+ CodeGenSubRegIndex *CodeGenRegBank::getSubRegIdx (const Record *Def) {
1328
1324
CodeGenSubRegIndex *&Idx = Def2SubRegIdx[Def];
1329
1325
if (Idx)
1330
1326
return Idx;
@@ -2450,7 +2446,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
2450
2446
// / return null. If the register is in multiple classes, and the classes have a
2451
2447
// / superset-subset relationship and the same set of types, return the
2452
2448
// / superclass. Otherwise return null.
2453
- const CodeGenRegisterClass *CodeGenRegBank::getRegClassForRegister (Record *R) {
2449
+ const CodeGenRegisterClass *
2450
+ CodeGenRegBank::getRegClassForRegister (const Record *R) {
2454
2451
const CodeGenRegister *Reg = getReg (R);
2455
2452
const CodeGenRegisterClass *FoundRC = nullptr ;
2456
2453
for (const auto &RC : getRegClasses ()) {
@@ -2490,7 +2487,7 @@ const CodeGenRegisterClass *CodeGenRegBank::getRegClassForRegister(Record *R) {
2490
2487
}
2491
2488
2492
2489
const CodeGenRegisterClass *
2493
- CodeGenRegBank::getMinimalPhysRegClass (Record *RegRecord,
2490
+ CodeGenRegBank::getMinimalPhysRegClass (const Record *RegRecord,
2494
2491
ValueTypeByHwMode *VT) {
2495
2492
const CodeGenRegister *Reg = getReg (RegRecord);
2496
2493
const CodeGenRegisterClass *BestRC = nullptr ;
0 commit comments