Skip to content

Commit 2b452b4

Browse files
authored
[TableGen] Change SubtargetFeatureInfo to use const Record pointers (#108013)
Change SubtargetFeatureInfo 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 ffa2f53 commit 2b452b4

File tree

4 files changed

+31
-28
lines changed

4 files changed

+31
-28
lines changed

llvm/utils/TableGen/AsmMatcherEmitter.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ class AsmMatcherInfo {
762762
RegisterClassesTy RegisterClasses;
763763

764764
/// Map of Predicate records to their subtarget information.
765-
std::map<Record *, SubtargetFeatureInfo, LessRecordByID> SubtargetFeatures;
765+
SubtargetFeatureInfoMap SubtargetFeatures;
766766

767767
/// Map of AsmOperandClass records to their class information.
768768
std::map<const Record *, ClassInfo *> AsmOperandClasses;
@@ -1513,8 +1513,8 @@ void AsmMatcherInfo::buildOperandMatchInfo() {
15131513

15141514
void AsmMatcherInfo::buildInfo() {
15151515
// Build information about all of the AssemblerPredicates.
1516-
const std::vector<std::pair<Record *, SubtargetFeatureInfo>>
1517-
&SubtargetFeaturePairs = SubtargetFeatureInfo::getAll(Records);
1516+
SubtargetFeaturesInfoVec SubtargetFeaturePairs =
1517+
SubtargetFeatureInfo::getAll(Records);
15181518
SubtargetFeatures.insert(SubtargetFeaturePairs.begin(),
15191519
SubtargetFeaturePairs.end());
15201520
#ifndef NDEBUG
@@ -3226,9 +3226,9 @@ static void emitMatchClassKindNames(std::forward_list<ClassInfo> &Infos,
32263226
}
32273227

32283228
static std::string
3229-
getNameForFeatureBitset(const std::vector<Record *> &FeatureBitset) {
3229+
getNameForFeatureBitset(ArrayRef<const Record *> FeatureBitset) {
32303230
std::string Name = "AMFBS";
3231-
for (const auto &Feature : FeatureBitset)
3231+
for (const Record *Feature : FeatureBitset)
32323232
Name += ("_" + Feature->getName()).str();
32333233
return Name;
32343234
}
@@ -3451,7 +3451,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
34513451
StringTable.EmitString(OS);
34523452
OS << ";\n\n";
34533453

3454-
std::vector<std::vector<Record *>> FeatureBitsets;
3454+
std::vector<std::vector<const Record *>> FeatureBitsets;
34553455
for (const auto &MI : Info.Matchables) {
34563456
if (MI->RequiredFeatures.empty())
34573457
continue;
@@ -3460,8 +3460,8 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
34603460
FeatureBitsets.back().push_back(MI->RequiredFeatures[I]->TheDef);
34613461
}
34623462

3463-
llvm::sort(FeatureBitsets, [&](const std::vector<Record *> &A,
3464-
const std::vector<Record *> &B) {
3463+
llvm::sort(FeatureBitsets, [&](const std::vector<const Record *> &A,
3464+
const std::vector<const Record *> &B) {
34653465
if (A.size() < B.size())
34663466
return true;
34673467
if (A.size() > B.size())

llvm/utils/TableGen/Common/SubtargetFeatureInfo.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ LLVM_DUMP_METHOD void SubtargetFeatureInfo::dump() const {
2020
}
2121
#endif
2222

23-
std::vector<std::pair<Record *, SubtargetFeatureInfo>>
24-
SubtargetFeatureInfo::getAll(RecordKeeper &Records) {
25-
std::vector<std::pair<Record *, SubtargetFeatureInfo>> SubtargetFeatures;
26-
std::vector<Record *> AllPredicates =
27-
Records.getAllDerivedDefinitions("Predicate");
28-
for (Record *Pred : AllPredicates) {
23+
SubtargetFeaturesInfoVec
24+
SubtargetFeatureInfo::getAll(const RecordKeeper &Records) {
25+
SubtargetFeaturesInfoVec SubtargetFeatures;
26+
for (const Record *Pred : Records.getAllDerivedDefinitions("Predicate")) {
2927
// Ignore predicates that are not intended for the assembler.
3028
//
3129
// The "AssemblerMatcherPredicate" string should be promoted to an argument

llvm/utils/TableGen/Common/SubtargetFeatureInfo.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@
1919
namespace llvm {
2020
struct SubtargetFeatureInfo;
2121
using SubtargetFeatureInfoMap =
22-
std::map<Record *, SubtargetFeatureInfo, LessRecordByID>;
22+
std::map<const Record *, SubtargetFeatureInfo, LessRecordByID>;
23+
using SubtargetFeaturesInfoVec =
24+
std::vector<std::pair<const Record *, SubtargetFeatureInfo>>;
2325

2426
/// Helper class for storing information on a subtarget feature which
2527
/// participates in instruction matching.
2628
struct SubtargetFeatureInfo {
2729
/// The predicate record for this feature.
28-
Record *TheDef;
30+
const Record *TheDef;
2931

3032
/// An unique index assigned to represent this feature.
3133
uint64_t Index;
3234

33-
SubtargetFeatureInfo(Record *D, uint64_t Idx) : TheDef(D), Index(Idx) {}
35+
SubtargetFeatureInfo(const Record *D, uint64_t Idx) : TheDef(D), Index(Idx) {}
3436

3537
/// The name of the enumerated constant identifying this feature.
3638
std::string getEnumName() const {
@@ -48,8 +50,8 @@ struct SubtargetFeatureInfo {
4850
}
4951

5052
void dump() const;
51-
static std::vector<std::pair<Record *, SubtargetFeatureInfo>>
52-
getAll(RecordKeeper &Records);
53+
54+
static SubtargetFeaturesInfoVec getAll(const RecordKeeper &Records);
5355

5456
/// Emit the subtarget feature flag definitions.
5557
///

llvm/utils/TableGen/InstrInfoEmitter.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -721,17 +721,17 @@ void InstrInfoEmitter::emitMCIIHelperMethods(raw_ostream &OS,
721721
}
722722

723723
static std::string
724-
getNameForFeatureBitset(const std::vector<Record *> &FeatureBitset) {
724+
getNameForFeatureBitset(ArrayRef<const Record *> FeatureBitset) {
725725
std::string Name = "CEFBS";
726-
for (const auto &Feature : FeatureBitset)
726+
for (const Record *Feature : FeatureBitset)
727727
Name += ("_" + Feature->getName()).str();
728728
return Name;
729729
}
730730

731731
void InstrInfoEmitter::emitFeatureVerifier(raw_ostream &OS,
732732
const CodeGenTarget &Target) {
733733
const auto &All = SubtargetFeatureInfo::getAll(Records);
734-
std::map<Record *, SubtargetFeatureInfo, LessRecordByID> SubtargetFeatures;
734+
SubtargetFeatureInfoMap SubtargetFeatures;
735735
SubtargetFeatures.insert(All.begin(), All.end());
736736

737737
OS << "#if (defined(ENABLE_INSTR_PREDICATE_VERIFIER) && !defined(NDEBUG)) "
@@ -752,18 +752,19 @@ void InstrInfoEmitter::emitFeatureVerifier(raw_ostream &OS,
752752
SubtargetFeatureInfo::emitComputeAssemblerAvailableFeatures(
753753
Target.getName(), "", "computeAvailableFeatures", SubtargetFeatures, OS);
754754

755-
std::vector<std::vector<Record *>> FeatureBitsets;
755+
std::vector<std::vector<const Record *>> FeatureBitsets;
756756
for (const CodeGenInstruction *Inst : Target.getInstructionsByEnumValue()) {
757757
FeatureBitsets.emplace_back();
758-
for (Record *Predicate : Inst->TheDef->getValueAsListOfDefs("Predicates")) {
758+
for (const Record *Predicate :
759+
Inst->TheDef->getValueAsListOfDefs("Predicates")) {
759760
const auto &I = SubtargetFeatures.find(Predicate);
760761
if (I != SubtargetFeatures.end())
761762
FeatureBitsets.back().push_back(I->second.TheDef);
762763
}
763764
}
764765

765-
llvm::sort(FeatureBitsets, [&](const std::vector<Record *> &A,
766-
const std::vector<Record *> &B) {
766+
llvm::sort(FeatureBitsets, [&](const std::vector<const Record *> &A,
767+
const std::vector<const Record *> &B) {
767768
if (A.size() < B.size())
768769
return true;
769770
if (A.size() > B.size())
@@ -806,7 +807,8 @@ void InstrInfoEmitter::emitFeatureVerifier(raw_ostream &OS,
806807
for (const CodeGenInstruction *Inst : Target.getInstructionsByEnumValue()) {
807808
OS << " CEFBS";
808809
unsigned NumPredicates = 0;
809-
for (Record *Predicate : Inst->TheDef->getValueAsListOfDefs("Predicates")) {
810+
for (const Record *Predicate :
811+
Inst->TheDef->getValueAsListOfDefs("Predicates")) {
810812
const auto &I = SubtargetFeatures.find(Predicate);
811813
if (I != SubtargetFeatures.end()) {
812814
OS << '_' << I->second.TheDef->getName();
@@ -890,7 +892,8 @@ void InstrInfoEmitter::emitFeatureVerifier(raw_ostream &OS,
890892
void InstrInfoEmitter::emitTIIHelperMethods(raw_ostream &OS,
891893
StringRef TargetName,
892894
bool ExpandDefinition) {
893-
RecVec TIIPredicates = Records.getAllDerivedDefinitions("TIIPredicate");
895+
ArrayRef<const Record *> TIIPredicates =
896+
Records.getAllDerivedDefinitions("TIIPredicate");
894897
if (TIIPredicates.empty())
895898
return;
896899

0 commit comments

Comments
 (0)