Skip to content

Commit 32719c4

Browse files
authored
[LLVM][TableGen] Change a few emitters to use const Record pointers (#110112)
Change DirectiveEmitter, Option Emitter, and X86 Emitters to use const Record pointers. This is a part of effort to have better const correctness in TableGen backends: https://discourse.llvm.org/t/psa-planned-changes-to-tablegen-getallderiveddefinitions-api-potential-downstream-breakages/81089
1 parent 22c8b1d commit 32719c4

File tree

7 files changed

+23
-23
lines changed

7 files changed

+23
-23
lines changed

llvm/include/llvm/TableGen/DirectiveEmitter.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,24 +135,24 @@ class Directive : public BaseRecord {
135135
public:
136136
Directive(const Record *Def) : BaseRecord(Def) {}
137137

138-
std::vector<Record *> getAllowedClauses() const {
139-
return Def->getValueAsListOfDefs("allowedClauses");
138+
std::vector<const Record *> getAllowedClauses() const {
139+
return Def->getValueAsListOfConstDefs("allowedClauses");
140140
}
141141

142-
std::vector<Record *> getAllowedOnceClauses() const {
143-
return Def->getValueAsListOfDefs("allowedOnceClauses");
142+
std::vector<const Record *> getAllowedOnceClauses() const {
143+
return Def->getValueAsListOfConstDefs("allowedOnceClauses");
144144
}
145145

146-
std::vector<Record *> getAllowedExclusiveClauses() const {
147-
return Def->getValueAsListOfDefs("allowedExclusiveClauses");
146+
std::vector<const Record *> getAllowedExclusiveClauses() const {
147+
return Def->getValueAsListOfConstDefs("allowedExclusiveClauses");
148148
}
149149

150-
std::vector<Record *> getRequiredClauses() const {
151-
return Def->getValueAsListOfDefs("requiredClauses");
150+
std::vector<const Record *> getRequiredClauses() const {
151+
return Def->getValueAsListOfConstDefs("requiredClauses");
152152
}
153153

154-
std::vector<Record *> getLeafConstructs() const {
155-
return Def->getValueAsListOfDefs("leafConstructs");
154+
std::vector<const Record *> getLeafConstructs() const {
155+
return Def->getValueAsListOfConstDefs("leafConstructs");
156156
}
157157

158158
Record *getAssociation() const { return Def->getValueAsDef("association"); }
@@ -203,8 +203,8 @@ class Clause : public BaseRecord {
203203
return Def->getValueAsString("enumClauseValue");
204204
}
205205

206-
std::vector<Record *> getClauseVals() const {
207-
return Def->getValueAsListOfDefs("allowedClauseValues");
206+
std::vector<const Record *> getClauseVals() const {
207+
return Def->getValueAsListOfConstDefs("allowedClauseValues");
208208
}
209209

210210
bool isValueOptional() const { return Def->getValueAsBit("isValueOptional"); }

llvm/utils/TableGen/CallingConvEmitter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ void CallingConvEmitter::EmitAction(const Record *Action, unsigned Indent,
131131
O << IndentStr << "if (";
132132

133133
if (Action->isSubClassOf("CCIfType")) {
134-
ListInit *VTs = Action->getValueAsListInit("VTs");
134+
const ListInit *VTs = Action->getValueAsListInit("VTs");
135135
for (unsigned i = 0, e = VTs->size(); i != e; ++i) {
136-
Record *VT = VTs->getElementAsRecord(i);
136+
const Record *VT = VTs->getElementAsRecord(i);
137137
if (i != 0)
138138
O << " ||\n " << IndentStr;
139139
O << "LocVT == " << getEnumName(getValueType(VT));

llvm/utils/TableGen/DirectiveEmitter.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,9 @@ static void GenerateGetKindClauseVal(const DirectiveLanguage &DirLang,
343343
if (ClauseVals.size() <= 0)
344344
continue;
345345

346-
auto DefaultIt = find_if(
347-
ClauseVals, [](Record *CV) { return CV->getValueAsBit("isDefault"); });
346+
auto DefaultIt = find_if(ClauseVals, [](const Record *CV) {
347+
return CV->getValueAsBit("isDefault");
348+
});
348349

349350
if (DefaultIt == ClauseVals.end()) {
350351
PrintError("At least one val in Clause " + C.getFormattedName() +
@@ -505,7 +506,7 @@ static void EmitLeafTable(const DirectiveLanguage &DirLang, raw_ostream &OS,
505506
std::vector<LeafList> LeafTable(Directives.size());
506507
for (auto [Idx, Rec] : enumerate(Directives)) {
507508
Directive Dir(Rec);
508-
std::vector<Record *> Leaves = Dir.getLeafConstructs();
509+
std::vector<const Record *> Leaves = Dir.getLeafConstructs();
509510

510511
auto &List = LeafTable[Idx];
511512
List.resize(MaxLeafCount + 2);
@@ -680,7 +681,7 @@ static void GenerateGetDirectiveAssociation(const DirectiveLanguage &DirLang,
680681
return AS;
681682
}
682683
// Compute the association from leaf constructs.
683-
std::vector<Record *> leaves = D.getLeafConstructs();
684+
std::vector<const Record *> leaves = D.getLeafConstructs();
684685
if (leaves.empty()) {
685686
errs() << D.getName() << '\n';
686687
PrintFatalError(errorPrefixFor(D) +

llvm/utils/TableGen/OptionParserEmitter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,13 +471,13 @@ static void EmitOptionParser(const RecordKeeper &Records, raw_ostream &OS) {
471471

472472
std::vector<std::pair<std::vector<std::string>, StringRef>>
473473
HelpTextsForVariants;
474-
for (Record *VisibilityHelp :
474+
for (const Record *VisibilityHelp :
475475
R.getValueAsListOfDefs("HelpTextsForVariants")) {
476476
ArrayRef<Init *> Visibilities =
477477
VisibilityHelp->getValueAsListInit("Visibilities")->getValues();
478478

479479
std::vector<std::string> VisibilityNames;
480-
for (Init *Visibility : Visibilities)
480+
for (const Init *Visibility : Visibilities)
481481
VisibilityNames.push_back(Visibility->getAsUnquotedString());
482482

483483
HelpTextsForVariants.push_back(std::make_pair(

llvm/utils/TableGen/OptionRSTEmitter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ using namespace llvm;
1818
/// and emits a RST man page.
1919
static void EmitOptionRST(const RecordKeeper &Records, raw_ostream &OS) {
2020
llvm::StringMap<std::vector<const Record *>> OptionsByGroup;
21-
std::vector<Record *> OptionsWithoutGroup;
2221

2322
// Get the options.
2423
std::vector<const Record *> Opts = Records.getAllDerivedDefinitions("Option");

llvm/utils/TableGen/X86FoldTablesEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ void X86FoldTablesEmitter::addEntryWithFlags(FoldTable &Table,
475475
StringRef RegInstName = RegRec->getName();
476476
unsigned DropLen =
477477
RegInstName.ends_with("rkz") ? 2 : (RegInstName.ends_with("rk") ? 1 : 0);
478-
Record *BaseDef =
478+
const Record *BaseDef =
479479
DropLen ? Records.getDef(RegInstName.drop_back(DropLen)) : nullptr;
480480
bool IsMoveReg =
481481
BaseDef ? Target.getInstruction(BaseDef).isMoveReg : RegInst->isMoveReg;

llvm/utils/TableGen/X86InstrMappingEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ void X86InstrMappingEmitter::emitCompressEVEXTable(
215215
StringRef Name = Rec->getName();
216216
const CodeGenInstruction *NewInst = nullptr;
217217
if (ManualMap.find(Name) != ManualMap.end()) {
218-
Record *NewRec = Records.getDef(ManualMap.at(Rec->getName()));
218+
const Record *NewRec = Records.getDef(ManualMap.at(Rec->getName()));
219219
assert(NewRec && "Instruction not found!");
220220
NewInst = &Target.getInstruction(NewRec);
221221
} else if (Name.ends_with("_EVEX")) {

0 commit comments

Comments
 (0)