Skip to content

Commit 4fc9465

Browse files
committed
[TableGen] Change SetTheory set/vec to use consr Record *
Change SetTheory::RecSet/RecVec to use const Record pointers.
1 parent 6df1291 commit 4fc9465

File tree

11 files changed

+88
-86
lines changed

11 files changed

+88
-86
lines changed

clang/utils/TableGen/NeonEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1636,7 +1636,7 @@ std::pair<Type, std::string> Intrinsic::DagEmitter::emitDagShuffle(DagInit *DI){
16361636
int64_t VectorSize = cast<IntInit>(Expr->getArg(0))->getValue();
16371637
VectorSize /= ElementSize;
16381638

1639-
std::vector<Record *> Revved;
1639+
std::vector<const Record *> Revved;
16401640
for (unsigned VI = 0; VI < Elts2.size(); VI += VectorSize) {
16411641
for (int LI = VectorSize - 1; LI >= 0; --LI) {
16421642
Revved.push_back(Elts2[VI + LI]);

llvm/include/llvm/TableGen/Record.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,7 @@ class DefInit : public TypedInit {
13231323
return I->getKind() == IK_DefInit;
13241324
}
13251325

1326-
static DefInit *get(Record*);
1326+
static DefInit *get(const Record *);
13271327

13281328
Init *convertInitializerTo(RecTy *Ty) const override;
13291329

@@ -1673,7 +1673,7 @@ class Record {
16731673
RecordKeeper &TrackedRecords;
16741674

16751675
// The DefInit corresponding to this record.
1676-
DefInit *CorrespondingDefInit = nullptr;
1676+
mutable DefInit *CorrespondingDefInit = nullptr;
16771677

16781678
// Unique record ID.
16791679
unsigned ID;
@@ -1740,7 +1740,7 @@ class Record {
17401740
RecordRecTy *getType();
17411741

17421742
/// get the corresponding DefInit.
1743-
DefInit *getDefInit();
1743+
DefInit *getDefInit() const;
17441744

17451745
bool isClass() const { return Kind == RK_Class; }
17461746

llvm/include/llvm/TableGen/SetTheory.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class Record;
6464

6565
class SetTheory {
6666
public:
67-
using RecVec = std::vector<Record *>;
68-
using RecSet = SmallSetVector<Record *, 16>;
67+
using RecVec = std::vector<const Record *>;
68+
using RecSet = SmallSetVector<const Record *, 16>;
6969

7070
/// Operator - A callback representing a DAG operator.
7171
class Operator {

llvm/lib/TableGen/Record.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2235,9 +2235,7 @@ Init *VarBitInit::resolveReferences(Resolver &R) const {
22352235
DefInit::DefInit(Record *D)
22362236
: TypedInit(IK_DefInit, D->getType()), Def(D) {}
22372237

2238-
DefInit *DefInit::get(Record *R) {
2239-
return R->getDefInit();
2240-
}
2238+
DefInit *DefInit::get(const Record *R) { return R->getDefInit(); }
22412239

22422240
Init *DefInit::convertInitializerTo(RecTy *Ty) const {
22432241
if (auto *RRT = dyn_cast<RecordRecTy>(Ty))
@@ -2808,10 +2806,10 @@ RecordRecTy *Record::getType() {
28082806
return RecordRecTy::get(TrackedRecords, DirectSCs);
28092807
}
28102808

2811-
DefInit *Record::getDefInit() {
2809+
DefInit *Record::getDefInit() const {
28122810
if (!CorrespondingDefInit) {
2813-
CorrespondingDefInit =
2814-
new (TrackedRecords.getImpl().Allocator) DefInit(this);
2811+
CorrespondingDefInit = new (TrackedRecords.getImpl().Allocator)
2812+
DefInit(const_cast<Record *>(this));
28152813
}
28162814
return CorrespondingDefInit;
28172815
}

llvm/utils/TableGen/AsmMatcherEmitter.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class AsmMatcherInfo;
140140
// RegisterSets can be seen in the outputted AsmMatcher tables occasionally, and
141141
// can even affect compiler output (at least seen in diagnostics produced when
142142
// all matches fail). So we use a type that sorts them consistently.
143-
typedef std::set<Record *, LessRecordByID> RegisterSet;
143+
typedef std::set<const Record *, LessRecordByID> RegisterSet;
144144

145145
class AsmMatcherEmitter {
146146
RecordKeeper &Records;
@@ -242,7 +242,7 @@ struct ClassInfo {
242242
if (!isRegisterClass() || !RHS.isRegisterClass())
243243
return false;
244244

245-
std::vector<Record *> Tmp;
245+
std::vector<const Record *> Tmp;
246246
std::set_intersection(Registers.begin(), Registers.end(),
247247
RHS.Registers.begin(), RHS.Registers.end(),
248248
std::back_inserter(Tmp), LessRecordByID());
@@ -403,7 +403,7 @@ struct MatchableInfo {
403403
bool IsIsolatedToken;
404404

405405
/// Register record if this token is singleton register.
406-
Record *SingletonReg;
406+
const Record *SingletonReg;
407407

408408
explicit AsmOperand(bool IsIsolatedToken, StringRef T)
409409
: Token(T), Class(nullptr), SubOpIdx(-1),
@@ -582,7 +582,7 @@ struct MatchableInfo {
582582
void formTwoOperandAlias(StringRef Constraint);
583583

584584
void initialize(const AsmMatcherInfo &Info,
585-
SmallPtrSetImpl<Record *> &SingletonRegisters,
585+
SmallPtrSetImpl<const Record *> &SingletonRegisters,
586586
AsmVariantInfo const &Variant, bool HasMnemonicFirst);
587587

588588
/// validate - Return true if this matchable is a valid thing to match against
@@ -757,7 +757,8 @@ class AsmMatcherInfo {
757757
std::vector<OperandMatchEntry> OperandMatchInfo;
758758

759759
/// Map of Register records to their class information.
760-
typedef std::map<Record *, ClassInfo *, LessRecordByID> RegisterClassesTy;
760+
typedef std::map<const Record *, ClassInfo *, LessRecordByID>
761+
RegisterClassesTy;
761762
RegisterClassesTy RegisterClasses;
762763

763764
/// Map of Predicate records to their subtarget information.
@@ -784,7 +785,8 @@ class AsmMatcherInfo {
784785

785786
/// buildRegisterClasses - Build the ClassInfo* instances for register
786787
/// classes.
787-
void buildRegisterClasses(SmallPtrSetImpl<Record *> &SingletonRegisters);
788+
void
789+
buildRegisterClasses(SmallPtrSetImpl<const Record *> &SingletonRegisters);
788790

789791
/// buildOperandClasses - Build the ClassInfo* instances for user defined
790792
/// operand classes.
@@ -935,10 +937,10 @@ static void extractSingletonRegisterForAsmOperand(MatchableInfo::AsmOperand &Op,
935937
// be some random non-register token, just ignore it.
936938
}
937939

938-
void MatchableInfo::initialize(const AsmMatcherInfo &Info,
939-
SmallPtrSetImpl<Record *> &SingletonRegisters,
940-
AsmVariantInfo const &Variant,
941-
bool HasMnemonicFirst) {
940+
void MatchableInfo::initialize(
941+
const AsmMatcherInfo &Info,
942+
SmallPtrSetImpl<const Record *> &SingletonRegisters,
943+
AsmVariantInfo const &Variant, bool HasMnemonicFirst) {
942944
AsmVariantID = Variant.AsmVariantNo;
943945
AsmString = CodeGenInstruction::FlattenAsmStringVariants(
944946
AsmString, Variant.AsmVariantNo);
@@ -972,8 +974,8 @@ void MatchableInfo::initialize(const AsmMatcherInfo &Info,
972974
// Collect singleton registers, if used.
973975
for (MatchableInfo::AsmOperand &Op : AsmOperands) {
974976
extractSingletonRegisterForAsmOperand(Op, Info, Variant.RegisterPrefix);
975-
if (Record *Reg = Op.SingletonReg)
976-
SingletonRegisters.insert(Reg);
977+
if (Op.SingletonReg)
978+
SingletonRegisters.insert(Op.SingletonReg);
977979
}
978980

979981
const RecordVal *DepMask = TheDef->getValue("DeprecatedFeatureMask");
@@ -1253,7 +1255,7 @@ struct LessRegisterSet {
12531255
};
12541256

12551257
void AsmMatcherInfo::buildRegisterClasses(
1256-
SmallPtrSetImpl<Record *> &SingletonRegisters) {
1258+
SmallPtrSetImpl<const Record *> &SingletonRegisters) {
12571259
const auto &Registers = Target.getRegBank().getRegisters();
12581260
auto &RegClassList = Target.getRegBank().getRegClasses();
12591261

@@ -1268,14 +1270,14 @@ void AsmMatcherInfo::buildRegisterClasses(
12681270
RegisterSet(RC.getOrder().begin(), RC.getOrder().end()));
12691271

12701272
// Add any required singleton sets.
1271-
for (Record *Rec : SingletonRegisters) {
1273+
for (const Record *Rec : SingletonRegisters) {
12721274
RegisterSets.insert(RegisterSet(&Rec, &Rec + 1));
12731275
}
12741276

12751277
// Introduce derived sets where necessary (when a register does not determine
12761278
// a unique register set class), and build the mapping of registers to the set
12771279
// they should classify to.
1278-
std::map<Record *, RegisterSet> RegisterMap;
1280+
std::map<const Record *, RegisterSet> RegisterMap;
12791281
for (const CodeGenRegister &CGR : Registers) {
12801282
// Compute the intersection of all sets containing this register.
12811283
RegisterSet ContainingSet;
@@ -1369,7 +1371,7 @@ void AsmMatcherInfo::buildRegisterClasses(
13691371
RegisterClasses[It.first] = RegisterSetClasses[It.second];
13701372

13711373
// Name the register classes which correspond to singleton registers.
1372-
for (Record *Rec : SingletonRegisters) {
1374+
for (const Record *Rec : SingletonRegisters) {
13731375
ClassInfo *CI = RegisterClasses[Rec];
13741376
assert(CI && "Missing singleton register class info!");
13751377

@@ -1526,7 +1528,7 @@ void AsmMatcherInfo::buildInfo() {
15261528

15271529
// Parse the instructions; we need to do this first so that we can gather the
15281530
// singleton register classes.
1529-
SmallPtrSet<Record *, 16> SingletonRegisters;
1531+
SmallPtrSet<const Record *, 16> SingletonRegisters;
15301532
unsigned VariantCount = Target.getAsmParserVariantCount();
15311533
for (unsigned VC = 0; VC != VariantCount; ++VC) {
15321534
Record *AsmVariant = Target.getAsmParserVariant(VC);
@@ -1617,7 +1619,7 @@ void AsmMatcherInfo::buildInfo() {
16171619
StringRef Token = Op.Token;
16181620

16191621
// Check for singleton registers.
1620-
if (Record *RegRecord = Op.SingletonReg) {
1622+
if (const Record *RegRecord = Op.SingletonReg) {
16211623
Op.Class = RegisterClasses[RegRecord];
16221624
assert(Op.Class && Op.Class->Registers.size() == 1 &&
16231625
"Unexpected class for singleton register");

llvm/utils/TableGen/Common/CodeGenRegisters.cpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ void CodeGenSubRegIndex::computeConcatTransitiveClosure() {
158158
// CodeGenRegister
159159
//===----------------------------------------------------------------------===//
160160

161-
CodeGenRegister::CodeGenRegister(Record *R, unsigned Enum)
161+
CodeGenRegister::CodeGenRegister(const Record *R, unsigned Enum)
162162
: TheDef(R), EnumValue(Enum),
163163
CostPerUse(R->getValueAsListOfInts("CostPerUse")),
164164
CoveredBySubRegs(R->getValueAsBit("CoveredBySubRegs")),
@@ -657,10 +657,10 @@ struct TupleExpander : SetTheory::Expander {
657657
RecordKeeper &RK = Def->getRecords();
658658
for (unsigned n = 0; n != Length; ++n) {
659659
std::string Name;
660-
Record *Proto = Lists[0][n];
660+
const Record *Proto = Lists[0][n];
661661
std::vector<Init *> Tuple;
662662
for (unsigned i = 0; i != Dim; ++i) {
663-
Record *Reg = Lists[i][n];
663+
const Record *Reg = Lists[i][n];
664664
if (i)
665665
Name += '_';
666666
Name += Reg->getName();
@@ -1198,18 +1198,17 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
11981198
Idx.updateComponents(*this);
11991199

12001200
// Read in the register and register tuple definitions.
1201-
std::vector<Record *> Regs = Records.getAllDerivedDefinitions("Register");
1201+
const RecordKeeper &RC = Records;
1202+
std::vector<const Record *> Regs = RC.getAllDerivedDefinitions("Register");
12021203
if (!Regs.empty() && Regs[0]->isSubClassOf("X86Reg")) {
12031204
// For X86, we need to sort Registers and RegisterTuples together to list
12041205
// new registers and register tuples at a later position. So that we can
12051206
// reduce unnecessary iterations on unsupported registers in LiveVariables.
12061207
// TODO: Remove this logic when migrate from LiveVariables to LiveIntervals
12071208
// completely.
1208-
std::vector<Record *> Tups =
1209-
Records.getAllDerivedDefinitions("RegisterTuples");
1210-
for (Record *R : Tups) {
1209+
for (const Record *R : Records.getAllDerivedDefinitions("RegisterTuples")) {
12111210
// Expand tuples and merge the vectors
1212-
std::vector<Record *> TupRegs = *Sets.expand(R);
1211+
std::vector<const Record *> TupRegs = *Sets.expand(R);
12131212
Regs.insert(Regs.end(), TupRegs.begin(), TupRegs.end());
12141213
}
12151214

@@ -1224,13 +1223,10 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records,
12241223
getReg(Regs[i]);
12251224

12261225
// Expand tuples and number the new registers.
1227-
std::vector<Record *> Tups =
1228-
Records.getAllDerivedDefinitions("RegisterTuples");
1229-
1230-
for (Record *R : Tups) {
1231-
std::vector<Record *> TupRegs = *Sets.expand(R);
1226+
for (Record *R : Records.getAllDerivedDefinitions("RegisterTuples")) {
1227+
std::vector<const Record *> TupRegs = *Sets.expand(R);
12321228
llvm::sort(TupRegs, LessRecordRegister());
1233-
for (Record *RC : TupRegs)
1229+
for (const Record *RC : TupRegs)
12341230
getReg(RC);
12351231
}
12361232
}
@@ -1342,7 +1338,7 @@ CodeGenRegBank::findSubRegIdx(const Record *Def) const {
13421338
return Def2SubRegIdx.lookup(Def);
13431339
}
13441340

1345-
CodeGenRegister *CodeGenRegBank::getReg(Record *Def) {
1341+
CodeGenRegister *CodeGenRegBank::getReg(const Record *Def) {
13461342
CodeGenRegister *&Reg = Def2Reg[Def];
13471343
if (Reg)
13481344
return Reg;
@@ -2508,7 +2504,8 @@ CodeGenRegBank::getMinimalPhysRegClass(Record *RegRecord,
25082504
return BestRC;
25092505
}
25102506

2511-
BitVector CodeGenRegBank::computeCoveredRegisters(ArrayRef<Record *> Regs) {
2507+
BitVector
2508+
CodeGenRegBank::computeCoveredRegisters(ArrayRef<const Record *> Regs) {
25122509
SetVector<const CodeGenRegister *> Set;
25132510

25142511
// First add Regs with all sub-registers.

llvm/utils/TableGen/Common/CodeGenRegisters.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ class CodeGenSubRegIndex {
172172
/// CodeGenRegister - Represents a register definition.
173173
class CodeGenRegister {
174174
public:
175-
Record *TheDef;
175+
const Record *TheDef;
176176
unsigned EnumValue;
177177
std::vector<int64_t> CostPerUse;
178178
bool CoveredBySubRegs = true;
@@ -184,7 +184,7 @@ class CodeGenRegister {
184184
typedef std::map<CodeGenSubRegIndex *, CodeGenRegister *, deref<std::less<>>>
185185
SubRegMap;
186186

187-
CodeGenRegister(Record *R, unsigned Enum);
187+
CodeGenRegister(const Record *R, unsigned Enum);
188188

189189
StringRef getName() const;
190190

@@ -314,7 +314,7 @@ inline bool operator==(const CodeGenRegister &A, const CodeGenRegister &B) {
314314
class CodeGenRegisterClass {
315315
CodeGenRegister::Vec Members;
316316
// Allocation orders. Order[0] always contains all registers in Members.
317-
std::vector<SmallVector<Record *, 16>> Orders;
317+
std::vector<SmallVector<const Record *, 16>> Orders;
318318
// Bit mask of sub-classes including this, indexed by their EnumValue.
319319
BitVector SubClasses;
320320
// List of super-classes, topologocally ordered to have the larger classes
@@ -452,7 +452,9 @@ class CodeGenRegisterClass {
452452
// Returns an ordered list of class members.
453453
// The order of registers is the same as in the .td file.
454454
// No = 0 is the default allocation order, No = 1 is the first alternative.
455-
ArrayRef<Record *> getOrder(unsigned No = 0) const { return Orders[No]; }
455+
ArrayRef<const Record *> getOrder(unsigned No = 0) const {
456+
return Orders[No];
457+
}
456458

457459
// Return the total number of allocation orders available.
458460
unsigned getNumOrders() const { return Orders.size(); }
@@ -594,7 +596,7 @@ class CodeGenRegBank {
594596
// Registers.
595597
std::deque<CodeGenRegister> Registers;
596598
StringMap<CodeGenRegister *> RegistersByName;
597-
DenseMap<Record *, CodeGenRegister *> Def2Reg;
599+
DenseMap<const Record *, CodeGenRegister *> Def2Reg;
598600
unsigned NumNativeRegUnits;
599601

600602
std::map<TopoSigId, unsigned> TopoSigs;
@@ -713,7 +715,7 @@ class CodeGenRegBank {
713715
}
714716

715717
// Find a register from its Record def.
716-
CodeGenRegister *getReg(Record *);
718+
CodeGenRegister *getReg(const Record *);
717719

718720
// Get a Register's index into the Registers array.
719721
unsigned getRegIndex(const CodeGenRegister *Reg) const {
@@ -846,7 +848,7 @@ class CodeGenRegBank {
846848
//
847849
// This is used to compute the mask of call-preserved registers from a list
848850
// of callee-saves.
849-
BitVector computeCoveredRegisters(ArrayRef<Record *> Regs);
851+
BitVector computeCoveredRegisters(ArrayRef<const Record *> Regs);
850852

851853
// Bit mask of lanes that cover their registers. A sub-register index whose
852854
// LaneMask is contained in CoveringLanes will be completely covered by

0 commit comments

Comments
 (0)