Skip to content

Commit 31c7c55

Browse files
committed
[LLVM][TableGen] Change SeachableTableEmitter to use const RecordKeeper
1 parent 1c1bb77 commit 31c7c55

File tree

4 files changed

+111
-102
lines changed

4 files changed

+111
-102
lines changed

llvm/include/llvm/TableGen/Record.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,9 @@ class DagRecTy : public RecTy {
226226
///
227227
/// The list of superclasses is non-redundant, i.e. only contains classes that
228228
/// are not the superclass of some other listed class.
229-
class RecordRecTy final : public RecTy, public FoldingSetNode,
230-
public TrailingObjects<RecordRecTy, Record *> {
229+
class RecordRecTy final : public RecTy,
230+
public FoldingSetNode,
231+
public TrailingObjects<RecordRecTy, const Record *> {
231232
friend class Record;
232233
friend detail::RecordKeeperImpl;
233234

@@ -248,23 +249,23 @@ class RecordRecTy final : public RecTy, public FoldingSetNode,
248249
}
249250

250251
/// Get the record type with the given non-redundant list of superclasses.
251-
static RecordRecTy *get(RecordKeeper &RK, ArrayRef<Record *> Classes);
252-
static RecordRecTy *get(Record *Class);
252+
static RecordRecTy *get(RecordKeeper &RK, ArrayRef<const Record *> Classes);
253+
static RecordRecTy *get(const Record *Class);
253254

254255
void Profile(FoldingSetNodeID &ID) const;
255256

256-
ArrayRef<Record *> getClasses() const {
257-
return ArrayRef(getTrailingObjects<Record *>(), NumClasses);
257+
ArrayRef<const Record *> getClasses() const {
258+
return ArrayRef(getTrailingObjects<const Record *>(), NumClasses);
258259
}
259260

260-
using const_record_iterator = Record * const *;
261+
using const_record_iterator = const Record *const *;
261262

262263
const_record_iterator classes_begin() const { return getClasses().begin(); }
263264
const_record_iterator classes_end() const { return getClasses().end(); }
264265

265266
std::string getAsString() const override;
266267

267-
bool isSubClassOf(Record *Class) const;
268+
bool isSubClassOf(const Record *Class) const;
268269
bool typeIsConvertibleTo(const RecTy *RHS) const override;
269270

270271
bool typeIsA(const RecTy *RHS) const override;
@@ -1556,7 +1557,7 @@ class RecordVal {
15561557
bool IsUsed = false;
15571558

15581559
/// Reference locations to this record value.
1559-
SmallVector<SMRange> ReferenceLocs;
1560+
mutable SmallVector<SMRange> ReferenceLocs;
15601561

15611562
public:
15621563
RecordVal(Init *N, RecTy *T, FieldKind K);
@@ -1605,7 +1606,7 @@ class RecordVal {
16051606
bool setValue(Init *V, SMLoc NewLoc);
16061607

16071608
/// Add a reference to this record value.
1608-
void addReferenceLoc(SMRange Loc) { ReferenceLocs.push_back(Loc); }
1609+
void addReferenceLoc(SMRange Loc) const { ReferenceLocs.push_back(Loc); }
16091610

16101611
/// Return the references of this record value.
16111612
ArrayRef<SMRange> getReferenceLocs() const { return ReferenceLocs; }
@@ -1763,7 +1764,7 @@ class Record {
17631764
bool hasDirectSuperClass(const Record *SuperClass) const;
17641765

17651766
/// Append the direct superclasses of this record to Classes.
1766-
void getDirectSuperClasses(SmallVectorImpl<Record *> &Classes) const;
1767+
void getDirectSuperClasses(SmallVectorImpl<const Record *> &Classes) const;
17671768

17681769
bool isTemplateArg(Init *Name) const {
17691770
return llvm::is_contained(TemplateArgs, Name);

llvm/lib/TableGen/Record.cpp

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -226,22 +226,22 @@ std::string DagRecTy::getAsString() const {
226226
}
227227

228228
static void ProfileRecordRecTy(FoldingSetNodeID &ID,
229-
ArrayRef<Record *> Classes) {
229+
ArrayRef<const Record *> Classes) {
230230
ID.AddInteger(Classes.size());
231-
for (Record *R : Classes)
231+
for (const Record *R : Classes)
232232
ID.AddPointer(R);
233233
}
234234

235235
RecordRecTy *RecordRecTy::get(RecordKeeper &RK,
236-
ArrayRef<Record *> UnsortedClasses) {
236+
ArrayRef<const Record *> UnsortedClasses) {
237237
detail::RecordKeeperImpl &RKImpl = RK.getImpl();
238238
if (UnsortedClasses.empty())
239239
return &RKImpl.AnyRecord;
240240

241241
FoldingSet<RecordRecTy> &ThePool = RKImpl.RecordTypePool;
242242

243-
SmallVector<Record *, 4> Classes(UnsortedClasses);
244-
llvm::sort(Classes, [](Record *LHS, Record *RHS) {
243+
SmallVector<const Record *, 4> Classes(UnsortedClasses);
244+
llvm::sort(Classes, [](const Record *LHS, const Record *RHS) {
245245
return LHS->getNameInitAsString() < RHS->getNameInitAsString();
246246
});
247247

@@ -263,16 +263,16 @@ RecordRecTy *RecordRecTy::get(RecordKeeper &RK,
263263
#endif
264264

265265
void *Mem = RKImpl.Allocator.Allocate(
266-
totalSizeToAlloc<Record *>(Classes.size()), alignof(RecordRecTy));
266+
totalSizeToAlloc<const Record *>(Classes.size()), alignof(RecordRecTy));
267267
RecordRecTy *Ty = new (Mem) RecordRecTy(RK, Classes.size());
268268
std::uninitialized_copy(Classes.begin(), Classes.end(),
269-
Ty->getTrailingObjects<Record *>());
269+
Ty->getTrailingObjects<const Record *>());
270270
ThePool.InsertNode(Ty, IP);
271271
return Ty;
272272
}
273-
RecordRecTy *RecordRecTy::get(Record *Class) {
273+
RecordRecTy *RecordRecTy::get(const Record *Class) {
274274
assert(Class && "unexpected null class");
275-
return get(Class->getRecords(), Class);
275+
return get(Class->getRecords(), {Class});
276276
}
277277

278278
void RecordRecTy::Profile(FoldingSetNodeID &ID) const {
@@ -285,7 +285,7 @@ std::string RecordRecTy::getAsString() const {
285285

286286
std::string Str = "{";
287287
bool First = true;
288-
for (Record *R : getClasses()) {
288+
for (const Record *R : getClasses()) {
289289
if (!First)
290290
Str += ", ";
291291
First = false;
@@ -295,11 +295,10 @@ std::string RecordRecTy::getAsString() const {
295295
return Str;
296296
}
297297

298-
bool RecordRecTy::isSubClassOf(Record *Class) const {
299-
return llvm::any_of(getClasses(), [Class](Record *MySuperClass) {
300-
return MySuperClass == Class ||
301-
MySuperClass->isSubClassOf(Class);
302-
});
298+
bool RecordRecTy::isSubClassOf(const Record *Class) const {
299+
return llvm::any_of(getClasses(), [Class](const Record *MySuperClass) {
300+
return MySuperClass == Class || MySuperClass->isSubClassOf(Class);
301+
});
303302
}
304303

305304
bool RecordRecTy::typeIsConvertibleTo(const RecTy *RHS) const {
@@ -310,21 +309,21 @@ bool RecordRecTy::typeIsConvertibleTo(const RecTy *RHS) const {
310309
if (!RTy)
311310
return false;
312311

313-
return llvm::all_of(RTy->getClasses(), [this](Record *TargetClass) {
314-
return isSubClassOf(TargetClass);
315-
});
312+
return llvm::all_of(RTy->getClasses(), [this](const Record *TargetClass) {
313+
return isSubClassOf(TargetClass);
314+
});
316315
}
317316

318317
bool RecordRecTy::typeIsA(const RecTy *RHS) const {
319318
return typeIsConvertibleTo(RHS);
320319
}
321320

322321
static RecordRecTy *resolveRecordTypes(RecordRecTy *T1, RecordRecTy *T2) {
323-
SmallVector<Record *, 4> CommonSuperClasses;
324-
SmallVector<Record *, 4> Stack(T1->getClasses());
322+
SmallVector<const Record *, 4> CommonSuperClasses;
323+
SmallVector<const Record *, 4> Stack(T1->getClasses());
325324

326325
while (!Stack.empty()) {
327-
Record *R = Stack.pop_back_val();
326+
const Record *R = Stack.pop_back_val();
328327

329328
if (T2->isSubClassOf(R)) {
330329
CommonSuperClasses.push_back(R);
@@ -2162,8 +2161,8 @@ std::string ExistsOpInit::getAsString() const {
21622161

21632162
RecTy *TypedInit::getFieldType(StringInit *FieldName) const {
21642163
if (RecordRecTy *RecordType = dyn_cast<RecordRecTy>(getType())) {
2165-
for (Record *Rec : RecordType->getClasses()) {
2166-
if (RecordVal *Field = Rec->getValue(FieldName))
2164+
for (const Record *Rec : RecordType->getClasses()) {
2165+
if (const RecordVal *Field = Rec->getValue(FieldName))
21672166
return Field->getType();
21682167
}
21692168
}
@@ -2831,7 +2830,7 @@ void Record::checkName() {
28312830
}
28322831

28332832
RecordRecTy *Record::getType() const {
2834-
SmallVector<Record *, 4> DirectSCs;
2833+
SmallVector<const Record *, 4> DirectSCs;
28352834
getDirectSuperClasses(DirectSCs);
28362835
return RecordRecTy::get(TrackedRecords, DirectSCs);
28372836
}
@@ -2882,7 +2881,8 @@ bool Record::hasDirectSuperClass(const Record *Superclass) const {
28822881
return false;
28832882
}
28842883

2885-
void Record::getDirectSuperClasses(SmallVectorImpl<Record *> &Classes) const {
2884+
void Record::getDirectSuperClasses(
2885+
SmallVectorImpl<const Record *> &Classes) const {
28862886
ArrayRef<std::pair<Record *, SMRange>> SCs = getSuperClasses();
28872887

28882888
while (!SCs.empty()) {

llvm/lib/TableGen/TGParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3004,7 +3004,7 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
30043004
DI->getDef()->getValue(FieldName)->addReferenceLoc(FieldNameLoc);
30053005
} else if (auto *TI = dyn_cast<TypedInit>(Result)) {
30063006
if (auto *RecTy = dyn_cast<RecordRecTy>(TI->getType())) {
3007-
for (Record *R : RecTy->getClasses())
3007+
for (const Record *R : RecTy->getClasses())
30083008
if (auto *RV = R->getValue(FieldName))
30093009
RV->addReferenceLoc(FieldNameLoc);
30103010
}

0 commit comments

Comments
 (0)