@@ -230,14 +230,14 @@ class DagRecTy : public RecTy {
230
230
// / are not the superclass of some other listed class.
231
231
class RecordRecTy final : public RecTy,
232
232
public FoldingSetNode,
233
- public TrailingObjects<RecordRecTy, const Record *> {
233
+ private TrailingObjects<RecordRecTy, const Record *> {
234
+ friend TrailingObjects;
234
235
friend class Record ;
235
236
friend detail::RecordKeeperImpl;
236
237
237
238
unsigned NumClasses;
238
239
239
- explicit RecordRecTy (RecordKeeper &RK, unsigned Num)
240
- : RecTy(RecordRecTyKind, RK), NumClasses(Num) {}
240
+ explicit RecordRecTy (RecordKeeper &RK, ArrayRef<const Record *> Classes);
241
241
242
242
public:
243
243
RecordRecTy (const RecordRecTy &) = delete ;
@@ -587,11 +587,11 @@ class BitInit final : public TypedInit {
587
587
// / It contains a vector of bits, whose size is determined by the type.
588
588
class BitsInit final : public TypedInit,
589
589
public FoldingSetNode,
590
- public TrailingObjects<BitsInit, const Init *> {
590
+ private TrailingObjects<BitsInit, const Init *> {
591
+ friend TrailingObjects;
591
592
unsigned NumBits;
592
593
593
- BitsInit (RecordKeeper &RK, unsigned N)
594
- : TypedInit(IK_BitsInit, BitsRecTy::get(RK, N)), NumBits(N) {}
594
+ BitsInit (RecordKeeper &RK, ArrayRef<const Init *> Bits);
595
595
596
596
public:
597
597
BitsInit (const BitsInit &) = delete ;
@@ -757,15 +757,15 @@ class StringInit final : public TypedInit {
757
757
// /
758
758
class ListInit final : public TypedInit,
759
759
public FoldingSetNode,
760
- public TrailingObjects<ListInit, const Init *> {
760
+ private TrailingObjects<ListInit, const Init *> {
761
+ friend TrailingObjects;
761
762
unsigned NumValues;
762
763
763
764
public:
764
765
using const_iterator = const Init *const *;
765
766
766
767
private:
767
- explicit ListInit (unsigned N, const RecTy *EltTy)
768
- : TypedInit(IK_ListInit, ListRecTy::get(EltTy)), NumValues(N) {}
768
+ explicit ListInit (ArrayRef<const Init *> Elements, const RecTy *EltTy);
769
769
770
770
public:
771
771
ListInit (const ListInit &) = delete ;
@@ -1019,12 +1019,13 @@ class TernOpInit final : public OpInit, public FoldingSetNode {
1019
1019
// / Otherwise reports an error.
1020
1020
class CondOpInit final : public TypedInit,
1021
1021
public FoldingSetNode,
1022
- public TrailingObjects<CondOpInit, const Init *> {
1022
+ private TrailingObjects<CondOpInit, const Init *> {
1023
+ friend TrailingObjects;
1023
1024
unsigned NumConds;
1024
1025
const RecTy *ValType;
1025
1026
1026
- CondOpInit (unsigned NC, const RecTy *Type)
1027
- : TypedInit(IK_CondOpInit, Type), NumConds(NC), ValType( Type) {}
1027
+ CondOpInit (ArrayRef< const Init *> Conds, ArrayRef< const Init *> Values,
1028
+ const RecTy * Type);
1028
1029
1029
1030
size_t numTrailingObjects (OverloadToken<Init *>) const {
1030
1031
return 2 *NumConds;
@@ -1038,24 +1039,19 @@ class CondOpInit final : public TypedInit,
1038
1039
return I->getKind () == IK_CondOpInit;
1039
1040
}
1040
1041
1041
- static const CondOpInit *get (ArrayRef<const Init *> C,
1042
- ArrayRef<const Init *> V, const RecTy *Type);
1042
+ static const CondOpInit *get (ArrayRef<const Init *> Conds,
1043
+ ArrayRef<const Init *> Values,
1044
+ const RecTy *Type);
1043
1045
1044
1046
void Profile (FoldingSetNodeID &ID) const ;
1045
1047
1046
1048
const RecTy *getValType () const { return ValType; }
1047
1049
1048
1050
unsigned getNumConds () const { return NumConds; }
1049
1051
1050
- const Init *getCond (unsigned Num) const {
1051
- assert (Num < NumConds && " Condition number out of range!" );
1052
- return getTrailingObjects<const Init *>()[Num];
1053
- }
1052
+ const Init *getCond (unsigned Num) const { return getConds ()[Num]; }
1054
1053
1055
- const Init *getVal (unsigned Num) const {
1056
- assert (Num < NumConds && " Val number out of range!" );
1057
- return getTrailingObjects<const Init *>()[Num + NumConds];
1058
- }
1054
+ const Init *getVal (unsigned Num) const { return getVals ()[Num]; }
1059
1055
1060
1056
ArrayRef<const Init *> getConds () const {
1061
1057
return ArrayRef (getTrailingObjects<const Init *>(), NumConds);
@@ -1337,13 +1333,15 @@ class DefInit final : public TypedInit {
1337
1333
class VarDefInit final
1338
1334
: public TypedInit,
1339
1335
public FoldingSetNode,
1340
- public TrailingObjects<VarDefInit, const ArgumentInit *> {
1336
+ private TrailingObjects<VarDefInit, const ArgumentInit *> {
1337
+ friend TrailingObjects;
1341
1338
SMLoc Loc;
1342
1339
const Record *Class;
1343
1340
const DefInit *Def = nullptr ; // after instantiation
1344
1341
unsigned NumArgs;
1345
1342
1346
- explicit VarDefInit (SMLoc Loc, const Record *Class, unsigned N);
1343
+ explicit VarDefInit (SMLoc Loc, const Record *Class,
1344
+ ArrayRef<const ArgumentInit *> Args);
1347
1345
1348
1346
const DefInit *instantiate ();
1349
1347
@@ -1367,23 +1365,18 @@ class VarDefInit final
1367
1365
1368
1366
std::string getAsString () const override ;
1369
1367
1370
- const ArgumentInit *getArg (unsigned i) const {
1371
- assert (i < NumArgs && " Argument index out of range!" );
1372
- return getTrailingObjects<const ArgumentInit *>()[i];
1373
- }
1368
+ const ArgumentInit *getArg (unsigned i) const { return args ()[i]; }
1374
1369
1375
1370
using const_iterator = const ArgumentInit *const *;
1376
1371
1377
- const_iterator args_begin () const {
1378
- return getTrailingObjects<const ArgumentInit *>();
1379
- }
1380
- const_iterator args_end () const { return args_begin () + NumArgs; }
1372
+ const_iterator args_begin () const { return args ().begin (); }
1373
+ const_iterator args_end () const { return args ().end (); }
1381
1374
1382
1375
size_t args_size () const { return NumArgs; }
1383
1376
bool args_empty () const { return NumArgs == 0 ; }
1384
1377
1385
1378
ArrayRef<const ArgumentInit *> args () const {
1386
- return ArrayRef (args_begin (), NumArgs);
1379
+ return ArrayRef (getTrailingObjects< const ArgumentInit *> (), NumArgs);
1387
1380
}
1388
1381
1389
1382
const Init *getBit (unsigned Bit) const override {
@@ -1438,18 +1431,15 @@ class FieldInit final : public TypedInit {
1438
1431
class DagInit final
1439
1432
: public TypedInit,
1440
1433
public FoldingSetNode,
1441
- public TrailingObjects<DagInit, const Init *, const StringInit *> {
1434
+ private TrailingObjects<DagInit, const Init *, const StringInit *> {
1442
1435
friend TrailingObjects;
1443
1436
1444
1437
const Init *Val;
1445
1438
const StringInit *ValName;
1446
1439
unsigned NumArgs;
1447
- unsigned NumArgNames;
1448
1440
1449
- DagInit (const Init *V, const StringInit *VN, unsigned NumArgs,
1450
- unsigned NumArgNames)
1451
- : TypedInit(IK_DagInit, DagRecTy::get(V->getRecordKeeper ())), Val(V),
1452
- ValName(VN), NumArgs(NumArgs), NumArgNames(NumArgNames) {}
1441
+ DagInit (const Init *V, const StringInit *VN, ArrayRef<const Init *> Args,
1442
+ ArrayRef<const StringInit *> ArgNames);
1453
1443
1454
1444
size_t numTrailingObjects (OverloadToken<const Init *>) const {
1455
1445
return NumArgs;
@@ -1483,18 +1473,14 @@ class DagInit final
1483
1473
1484
1474
unsigned getNumArgs () const { return NumArgs; }
1485
1475
1486
- const Init *getArg (unsigned Num) const {
1487
- assert (Num < NumArgs && " Arg number out of range!" );
1488
- return getTrailingObjects<const Init *>()[Num];
1489
- }
1476
+ const Init *getArg (unsigned Num) const { return getArgs ()[Num]; }
1490
1477
1491
1478
// / This method looks up the specified argument name and returns its argument
1492
1479
// / number or std::nullopt if that argument name does not exist.
1493
1480
std::optional<unsigned > getArgNo (StringRef Name) const ;
1494
1481
1495
1482
const StringInit *getArgName (unsigned Num) const {
1496
- assert (Num < NumArgNames && " Arg number out of range!" );
1497
- return getTrailingObjects<const StringInit *>()[Num];
1483
+ return getArgNames ()[Num];
1498
1484
}
1499
1485
1500
1486
StringRef getArgNameStr (unsigned Num) const {
@@ -1507,7 +1493,7 @@ class DagInit final
1507
1493
}
1508
1494
1509
1495
ArrayRef<const StringInit *> getArgNames () const {
1510
- return ArrayRef (getTrailingObjects<const StringInit *>(), NumArgNames );
1496
+ return ArrayRef (getTrailingObjects<const StringInit *>(), NumArgs );
1511
1497
}
1512
1498
1513
1499
const Init *resolveReferences (Resolver &R) const override ;
@@ -1528,9 +1514,6 @@ class DagInit final
1528
1514
inline const_name_iterator name_begin () const { return getArgNames ().begin ();}
1529
1515
inline const_name_iterator name_end () const { return getArgNames ().end (); }
1530
1516
1531
- inline size_t name_size () const { return NumArgNames; }
1532
- inline bool name_empty () const { return NumArgNames == 0 ; }
1533
-
1534
1517
const Init *getBit (unsigned Bit) const override {
1535
1518
llvm_unreachable (" Illegal bit reference off dag" );
1536
1519
}
0 commit comments