Skip to content

Commit 8fc3ac4

Browse files
authored
[LLVM][TableGen] Change AsmWriterEmitter to const RecordKeeper (#108918)
Change AsmWriterEmitter to const RecordKeeper. 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 cb5f81d commit 8fc3ac4

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

llvm/utils/TableGen/AsmWriterEmitter.cpp

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ using namespace llvm;
5555
namespace {
5656

5757
class AsmWriterEmitter {
58-
RecordKeeper &Records;
58+
const RecordKeeper &Records;
5959
CodeGenTarget Target;
6060
ArrayRef<const CodeGenInstruction *> NumberedInstructions;
6161
std::vector<AsmWriterInst> Instructions;
6262

6363
public:
64-
AsmWriterEmitter(RecordKeeper &R);
64+
AsmWriterEmitter(const RecordKeeper &R);
6565

6666
void run(raw_ostream &o);
6767

@@ -326,7 +326,7 @@ void AsmWriterEmitter::EmitGetMnemonic(
326326
raw_ostream &O,
327327
std::vector<std::vector<std::string>> &TableDrivenOperandPrinters,
328328
unsigned &BitsLeft, unsigned &AsmStrBits) {
329-
Record *AsmWriter = Target.getAsmWriter();
329+
const Record *AsmWriter = Target.getAsmWriter();
330330
StringRef ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
331331
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
332332

@@ -486,7 +486,7 @@ void AsmWriterEmitter::EmitPrintInstruction(
486486
std::vector<std::vector<std::string>> &TableDrivenOperandPrinters,
487487
unsigned &BitsLeft, unsigned &AsmStrBits) {
488488
const unsigned OpcodeInfoBits = 64;
489-
Record *AsmWriter = Target.getAsmWriter();
489+
const Record *AsmWriter = Target.getAsmWriter();
490490
StringRef ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
491491
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
492492

@@ -596,8 +596,8 @@ emitRegisterNameString(raw_ostream &O, StringRef AltName,
596596
AsmName = std::string(Reg.getName());
597597
} else {
598598
// Make sure the register has an alternate name for this index.
599-
std::vector<Record *> AltNameList =
600-
Reg.TheDef->getValueAsListOfDefs("RegAltNameIndices");
599+
std::vector<const Record *> AltNameList =
600+
Reg.TheDef->getValueAsListOfConstDefs("RegAltNameIndices");
601601
unsigned Idx = 0, e;
602602
for (e = AltNameList.size();
603603
Idx < e && (AltNameList[Idx]->getName() != AltName); ++Idx)
@@ -633,7 +633,7 @@ emitRegisterNameString(raw_ostream &O, StringRef AltName,
633633
}
634634

635635
void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) {
636-
Record *AsmWriter = Target.getAsmWriter();
636+
const Record *AsmWriter = Target.getAsmWriter();
637637
StringRef ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
638638
const auto &Registers = Target.getRegBank().getRegisters();
639639
ArrayRef<const Record *> AltNameIndices = Target.getRegAltNameIndices();
@@ -829,7 +829,7 @@ struct AliasPriorityComparator {
829829
} // end anonymous namespace
830830

831831
void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
832-
Record *AsmWriter = Target.getAsmWriter();
832+
const Record *AsmWriter = Target.getAsmWriter();
833833

834834
O << "\n#ifdef PRINT_ALIAS_INSTR\n";
835835
O << "#undef PRINT_ALIAS_INSTR\n\n";
@@ -843,14 +843,11 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
843843
unsigned Variant = AsmWriter->getValueAsInt("Variant");
844844
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
845845

846-
std::vector<Record *> AllInstAliases =
847-
Records.getAllDerivedDefinitions("InstAlias");
848-
849846
// Create a map from the qualified name to a list of potential matches.
850847
typedef std::set<std::pair<CodeGenInstAlias, int>, AliasPriorityComparator>
851848
AliasWithPriority;
852849
std::map<std::string, AliasWithPriority> AliasMap;
853-
for (Record *R : AllInstAliases) {
850+
for (const Record *R : Records.getAllDerivedDefinitions("InstAlias")) {
854851
int Priority = R->getValueAsInt("EmitPriority");
855852
if (Priority < 1)
856853
continue; // Aliases with priority 0 are never emitted.
@@ -1011,17 +1008,17 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
10111008
MIOpNum += RO.getMINumOperands();
10121009
}
10131010

1014-
std::vector<Record *> ReqFeatures;
1011+
std::vector<const Record *> ReqFeatures;
10151012
if (PassSubtarget) {
10161013
// We only consider ReqFeatures predicates if PassSubtarget
1017-
std::vector<Record *> RF =
1018-
CGA.TheDef->getValueAsListOfDefs("Predicates");
1019-
copy_if(RF, std::back_inserter(ReqFeatures), [](Record *R) {
1014+
std::vector<const Record *> RF =
1015+
CGA.TheDef->getValueAsListOfConstDefs("Predicates");
1016+
copy_if(RF, std::back_inserter(ReqFeatures), [](const Record *R) {
10201017
return R->getValueAsBit("AssemblerMatcherPredicate");
10211018
});
10221019
}
10231020

1024-
for (Record *const R : ReqFeatures) {
1021+
for (const Record *R : ReqFeatures) {
10251022
const DagInit *D = R->getValueAsDag("AssemblerCondDag");
10261023
auto *Op = dyn_cast<DefInit>(D->getOperator());
10271024
if (!Op)
@@ -1315,17 +1312,17 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
13151312
O << "#endif // PRINT_ALIAS_INSTR\n";
13161313
}
13171314

1318-
AsmWriterEmitter::AsmWriterEmitter(RecordKeeper &R) : Records(R), Target(R) {
1319-
Record *AsmWriter = Target.getAsmWriter();
1315+
AsmWriterEmitter::AsmWriterEmitter(const RecordKeeper &R)
1316+
: Records(R), Target(R) {
1317+
const Record *AsmWriter = Target.getAsmWriter();
13201318
unsigned Variant = AsmWriter->getValueAsInt("Variant");
13211319

13221320
// Get the instruction numbering.
13231321
NumberedInstructions = Target.getInstructionsByEnumValue();
13241322

1325-
for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) {
1326-
const CodeGenInstruction *I = NumberedInstructions[i];
1323+
for (const auto &[Idx, I] : enumerate(NumberedInstructions)) {
13271324
if (!I->AsmString.empty() && I->TheDef->getName() != "PHI")
1328-
Instructions.emplace_back(*I, i, Variant);
1325+
Instructions.emplace_back(*I, Idx, Variant);
13291326
}
13301327
}
13311328

0 commit comments

Comments
 (0)