Skip to content

Commit 17a19dc

Browse files
committed
[LLVM][TableGen] Change RecordKeeper::getClass to return const pointer
Change `RecordKeeper::getClass` to return const record pointer.
1 parent 53c9553 commit 17a19dc

File tree

6 files changed

+32
-29
lines changed

6 files changed

+32
-29
lines changed

llvm/include/llvm/TableGen/Record.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,11 +1349,11 @@ class VarDefInit final : public TypedInit,
13491349
public FoldingSetNode,
13501350
public TrailingObjects<VarDefInit, ArgumentInit *> {
13511351
SMLoc Loc;
1352-
Record *Class;
1352+
const Record *Class;
13531353
DefInit *Def = nullptr; // after instantiation
13541354
unsigned NumArgs;
13551355

1356-
explicit VarDefInit(SMLoc Loc, Record *Class, unsigned N);
1356+
explicit VarDefInit(SMLoc Loc, const Record *Class, unsigned N);
13571357

13581358
DefInit *instantiate();
13591359

@@ -1367,7 +1367,7 @@ class VarDefInit final : public TypedInit,
13671367
static bool classof(const Init *I) {
13681368
return I->getKind() == IK_VarDefInit;
13691369
}
1370-
static VarDefInit *get(SMLoc Loc, Record *Class,
1370+
static VarDefInit *get(SMLoc Loc, const Record *Class,
13711371
ArrayRef<ArgumentInit *> Args);
13721372

13731373
void Profile(FoldingSetNodeID &ID) const;
@@ -1990,7 +1990,7 @@ class RecordKeeper {
19901990
const GlobalMap &getGlobals() const { return ExtraGlobals; }
19911991

19921992
/// Get the class with the specified name.
1993-
Record *getClass(StringRef Name) const {
1993+
const Record *getClass(StringRef Name) const {
19941994
auto I = Classes.find(Name);
19951995
return I == Classes.end() ? nullptr : I->second.get();
19961996
}

llvm/lib/TableGen/Record.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,7 +2284,7 @@ const RecTy *DefInit::getFieldType(StringInit *FieldName) const {
22842284

22852285
std::string DefInit::getAsString() const { return std::string(Def->getName()); }
22862286

2287-
static void ProfileVarDefInit(FoldingSetNodeID &ID, Record *Class,
2287+
static void ProfileVarDefInit(FoldingSetNodeID &ID, const Record *Class,
22882288
ArrayRef<ArgumentInit *> Args) {
22892289
ID.AddInteger(Args.size());
22902290
ID.AddPointer(Class);
@@ -2293,11 +2293,11 @@ static void ProfileVarDefInit(FoldingSetNodeID &ID, Record *Class,
22932293
ID.AddPointer(I);
22942294
}
22952295

2296-
VarDefInit::VarDefInit(SMLoc Loc, Record *Class, unsigned N)
2296+
VarDefInit::VarDefInit(SMLoc Loc, const Record *Class, unsigned N)
22972297
: TypedInit(IK_VarDefInit, RecordRecTy::get(Class)), Loc(Loc), Class(Class),
22982298
NumArgs(N) {}
22992299

2300-
VarDefInit *VarDefInit::get(SMLoc Loc, Record *Class,
2300+
VarDefInit *VarDefInit::get(SMLoc Loc, const Record *Class,
23012301
ArrayRef<ArgumentInit *> Args) {
23022302
FoldingSetNodeID ID;
23032303
ProfileVarDefInit(ID, Class, Args);

llvm/lib/TableGen/TGParser.cpp

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace llvm {
3434

3535
struct SubClassReference {
3636
SMRange RefRange;
37-
Record *Rec = nullptr;
37+
const Record *Rec = nullptr;
3838
SmallVector<ArgumentInit *, 4> TemplateArgs;
3939

4040
SubClassReference() = default;
@@ -110,15 +110,15 @@ static void checkConcrete(Record &R) {
110110

111111
/// Return an Init with a qualifier prefix referring
112112
/// to CurRec's name.
113-
static Init *QualifyName(Record &CurRec, Init *Name) {
113+
static Init *QualifyName(const Record &CurRec, Init *Name) {
114114
RecordKeeper &RK = CurRec.getRecords();
115115
Init *NewName = BinOpInit::getStrConcat(
116116
CurRec.getNameInit(),
117117
StringInit::get(RK, CurRec.isMultiClass() ? "::" : ":"));
118118
NewName = BinOpInit::getStrConcat(NewName, Name);
119119

120120
if (BinOpInit *BinOp = dyn_cast<BinOpInit>(NewName))
121-
NewName = BinOp->Fold(&CurRec);
121+
NewName = BinOp->Fold(const_cast<Record *>(&CurRec));
122122
return NewName;
123123
}
124124

@@ -127,7 +127,7 @@ static Init *QualifyName(MultiClass *MC, Init *Name) {
127127
}
128128

129129
/// Return the qualified version of the implicit 'NAME' template argument.
130-
static Init *QualifiedNameOfImplicitName(Record &Rec) {
130+
static Init *QualifiedNameOfImplicitName(const Record &Rec) {
131131
return QualifyName(Rec, StringInit::get(Rec.getRecords(), "NAME"));
132132
}
133133

@@ -296,7 +296,7 @@ bool TGParser::SetValue(Record *CurRec, SMLoc Loc, Init *ValName,
296296
/// AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
297297
/// args as SubClass's template arguments.
298298
bool TGParser::AddSubClass(Record *CurRec, SubClassReference &SubClass) {
299-
Record *SC = SubClass.Rec;
299+
const Record *SC = SubClass.Rec;
300300
MapResolver R(CurRec);
301301

302302
// Loop over all the subclass record's fields. Add regular fields to the new
@@ -586,8 +586,9 @@ bool TGParser::addDefOne(std::unique_ptr<Record> Rec) {
586586
return false;
587587
}
588588

589-
bool TGParser::resolveArguments(Record *Rec, ArrayRef<ArgumentInit *> ArgValues,
590-
SMLoc Loc, ArgValueHandler ArgValueHandler) {
589+
bool TGParser::resolveArguments(const Record *Rec,
590+
ArrayRef<ArgumentInit *> ArgValues, SMLoc Loc,
591+
ArgValueHandler ArgValueHandler) {
591592
ArrayRef<Init *> ArgNames = Rec->getTemplateArgs();
592593
assert(ArgValues.size() <= ArgNames.size() &&
593594
"Too many template arguments allowed");
@@ -629,7 +630,7 @@ bool TGParser::resolveArguments(Record *Rec, ArrayRef<ArgumentInit *> ArgValues,
629630

630631
/// Resolve the arguments of class and set them to MapResolver.
631632
/// Returns true if failed.
632-
bool TGParser::resolveArgumentsOfClass(MapResolver &R, Record *Rec,
633+
bool TGParser::resolveArgumentsOfClass(MapResolver &R, const Record *Rec,
633634
ArrayRef<ArgumentInit *> ArgValues,
634635
SMLoc Loc) {
635636
return resolveArguments(Rec, ArgValues, Loc,
@@ -704,13 +705,13 @@ Init *TGParser::ParseObjectName(MultiClass *CurMultiClass) {
704705
///
705706
/// ClassID ::= ID
706707
///
707-
Record *TGParser::ParseClassID() {
708+
const Record *TGParser::ParseClassID() {
708709
if (Lex.getCode() != tgtok::Id) {
709710
TokError("expected name for ClassID");
710711
return nullptr;
711712
}
712713

713-
Record *Result = Records.getClass(Lex.getCurStrVal());
714+
const Record *Result = Records.getClass(Lex.getCurStrVal());
714715
if (!Result) {
715716
std::string Msg("Couldn't find class '" + Lex.getCurStrVal() + "'");
716717
if (MultiClasses[Lex.getCurStrVal()].get())
@@ -2699,7 +2700,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, const RecTy *ItemType,
26992700
// Value ::= CLASSID '<' ArgValueList '>' (CLASSID has been consumed)
27002701
// This is supposed to synthesize a new anonymous definition, deriving
27012702
// from the class with the template arguments, but no body.
2702-
Record *Class = Records.getClass(Name->getValue());
2703+
const Record *Class = Records.getClass(Name->getValue());
27032704
if (!Class) {
27042705
Error(NameLoc.Start,
27052706
"Expected a class name, got '" + Name->getValue() + "'");
@@ -3185,7 +3186,8 @@ void TGParser::ParseValueList(SmallVectorImpl<Init *> &Result, Record *CurRec,
31853186
// PostionalArgValueList ::= [Value {',' Value}*]
31863187
// NamedArgValueList ::= [NameValue '=' Value {',' NameValue '=' Value}*]
31873188
bool TGParser::ParseTemplateArgValueList(
3188-
SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec, Record *ArgsRec) {
3189+
SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec,
3190+
const Record *ArgsRec) {
31893191
assert(Result.empty() && "Result vector is not empty");
31903192
ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs();
31913193

@@ -3978,7 +3980,7 @@ bool TGParser::ParseClass() {
39783980
return TokError("expected class name after 'class' keyword");
39793981

39803982
const std::string &Name = Lex.getCurStrVal();
3981-
Record *CurRec = Records.getClass(Name);
3983+
Record *CurRec = const_cast<Record *>(Records.getClass(Name));
39823984
if (CurRec) {
39833985
// If the body was previously defined, this is an error.
39843986
if (!CurRec->getValues().empty() ||
@@ -4399,7 +4401,8 @@ bool TGParser::ParseFile() {
43994401
// If necessary, replace an argument with a cast to the required type.
44004402
// The argument count has already been checked.
44014403
bool TGParser::CheckTemplateArgValues(
4402-
SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc, Record *ArgsRec) {
4404+
SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc,
4405+
const Record *ArgsRec) {
44034406
ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs();
44044407

44054408
for (llvm::ArgumentInit *&Value : Values) {
@@ -4409,7 +4412,7 @@ bool TGParser::CheckTemplateArgValues(
44094412
if (Value->isNamed())
44104413
ArgName = Value->getName();
44114414

4412-
RecordVal *Arg = ArgsRec->getValue(ArgName);
4415+
const RecordVal *Arg = ArgsRec->getValue(ArgName);
44134416
const RecTy *ArgType = Arg->getType();
44144417

44154418
if (TypedInit *ArgValue = dyn_cast<TypedInit>(Value->getValue())) {

llvm/lib/TableGen/TGParser.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,9 @@ class TGParser {
248248

249249
using ArgValueHandler = std::function<void(Init *, Init *)>;
250250
bool resolveArguments(
251-
Record *Rec, ArrayRef<ArgumentInit *> ArgValues, SMLoc Loc,
251+
const Record *Rec, ArrayRef<ArgumentInit *> ArgValues, SMLoc Loc,
252252
ArgValueHandler ArgValueHandler = [](Init *, Init *) {});
253-
bool resolveArgumentsOfClass(MapResolver &R, Record *Rec,
253+
bool resolveArgumentsOfClass(MapResolver &R, const Record *Rec,
254254
ArrayRef<ArgumentInit *> ArgValues, SMLoc Loc);
255255
bool resolveArgumentsOfMultiClass(SubstStack &Substs, MultiClass *MC,
256256
ArrayRef<ArgumentInit *> ArgValues,
@@ -295,7 +295,7 @@ class TGParser {
295295
void ParseValueList(SmallVectorImpl<llvm::Init *> &Result, Record *CurRec,
296296
const RecTy *ItemType = nullptr);
297297
bool ParseTemplateArgValueList(SmallVectorImpl<llvm::ArgumentInit *> &Result,
298-
Record *CurRec, Record *ArgsRec);
298+
Record *CurRec, const Record *ArgsRec);
299299
void ParseDagArgList(
300300
SmallVectorImpl<std::pair<llvm::Init*, StringInit*>> &Result,
301301
Record *CurRec);
@@ -314,12 +314,12 @@ class TGParser {
314314
Init *ParseOperationCond(Record *CurRec, const RecTy *ItemType);
315315
const RecTy *ParseOperatorType();
316316
Init *ParseObjectName(MultiClass *CurMultiClass);
317-
Record *ParseClassID();
317+
const Record *ParseClassID();
318318
MultiClass *ParseMultiClassID();
319319
bool ApplyLetStack(Record *CurRec);
320320
bool ApplyLetStack(RecordsEntry &Entry);
321321
bool CheckTemplateArgValues(SmallVectorImpl<llvm::ArgumentInit *> &Values,
322-
SMLoc Loc, Record *ArgsRec);
322+
SMLoc Loc, const Record *ArgsRec);
323323
};
324324

325325
} // end namespace llvm

llvm/utils/TableGen/Common/CodeGenRegisters.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ struct TupleExpander : SetTheory::Expander {
649649
return;
650650

651651
// Precompute some types.
652-
Record *RegisterCl = Def->getRecords().getClass("Register");
652+
const Record *RegisterCl = Def->getRecords().getClass("Register");
653653
const RecTy *RegisterRecTy = RecordRecTy::get(RegisterCl);
654654
std::vector<StringRef> RegNames =
655655
Def->getValueAsListOfStrings("RegAsmNames");

mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ static bool emitSerializationFns(const RecordKeeper &records, raw_ostream &os) {
11841184
utilsString;
11851185
raw_string_ostream dSerFn(dSerFnString), dDesFn(dDesFnString),
11861186
serFn(serFnString), deserFn(deserFnString);
1187-
Record *attrClass = records.getClass("Attr");
1187+
const Record *attrClass = records.getClass("Attr");
11881188

11891189
// Emit the serialization and deserialization functions simultaneously.
11901190
StringRef opVar("op");

0 commit comments

Comments
 (0)