Skip to content

Commit b2d7312

Browse files
authored
[TableGen][GISel] Add const to some member functions & reformat (NFC) (#120899)
Add const to `import*Renderer` member functions and recursively to functions called from them. I didn't do that for `import*Matcher` functions because they mutate class variables.
1 parent a0f0a69 commit b2d7312

File tree

1 file changed

+43
-41
lines changed

1 file changed

+43
-41
lines changed

llvm/utils/TableGen/GlobalISelEmitter.cpp

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -396,27 +396,26 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
396396
Expected<BuildMIAction &>
397397
createAndImportInstructionRenderer(RuleMatcher &M,
398398
InstructionMatcher &InsnMatcher,
399-
const TreePatternNode &Dst);
399+
const TreePatternNode &Dst) const;
400400
Expected<action_iterator> createAndImportSubInstructionRenderer(
401401
action_iterator InsertPt, RuleMatcher &M, const TreePatternNode &Dst,
402-
unsigned TempReg);
402+
unsigned TempReg) const;
403403
Expected<action_iterator>
404404
createInstructionRenderer(action_iterator InsertPt, RuleMatcher &M,
405-
const TreePatternNode &Dst);
405+
const TreePatternNode &Dst) const;
406406

407-
Expected<action_iterator>
408-
importExplicitDefRenderers(action_iterator InsertPt, RuleMatcher &M,
409-
BuildMIAction &DstMIBuilder,
410-
const TreePatternNode &Dst, unsigned Start = 0);
407+
Expected<action_iterator> importExplicitDefRenderers(
408+
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
409+
const TreePatternNode &Dst, unsigned Start = 0) const;
411410

412411
Expected<action_iterator>
413412
importExplicitUseRenderers(action_iterator InsertPt, RuleMatcher &M,
414413
BuildMIAction &DstMIBuilder,
415-
const TreePatternNode &Dst);
414+
const TreePatternNode &Dst) const;
416415
Expected<action_iterator>
417416
importExplicitUseRenderer(action_iterator InsertPt, RuleMatcher &Rule,
418417
BuildMIAction &DstMIBuilder,
419-
const TreePatternNode &Dst);
418+
const TreePatternNode &Dst) const;
420419
Error importDefaultOperandRenderers(action_iterator InsertPt, RuleMatcher &M,
421420
BuildMIAction &DstMIBuilder,
422421
const DAGDefaultOperand &DefaultOp) const;
@@ -441,30 +440,31 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
441440
const CodeGenRegisterClass *
442441
inferSuperRegisterClassForNode(const TypeSetByHwMode &Ty,
443442
const TreePatternNode &SuperRegNode,
444-
const TreePatternNode &SubRegIdxNode);
443+
const TreePatternNode &SubRegIdxNode) const;
445444
const CodeGenSubRegIndex *
446-
inferSubRegIndexForNode(const TreePatternNode &SubRegIdxNode);
445+
inferSubRegIndexForNode(const TreePatternNode &SubRegIdxNode) const;
447446

448447
/// Infer a CodeGenRegisterClass which suppoorts \p Ty and \p SubRegIdxNode.
449448
/// Return nullptr if no such class exists.
450449
const CodeGenRegisterClass *
451450
inferSuperRegisterClass(const TypeSetByHwMode &Ty,
452-
const TreePatternNode &SubRegIdxNode);
451+
const TreePatternNode &SubRegIdxNode) const;
453452

454453
/// Return the CodeGenRegisterClass associated with \p Leaf if it has one.
455-
const CodeGenRegisterClass *getRegClassFromLeaf(const TreePatternNode &Leaf);
454+
const CodeGenRegisterClass *
455+
getRegClassFromLeaf(const TreePatternNode &Leaf) const;
456456

457457
/// Return a CodeGenRegisterClass for \p N if one can be found. Return
458458
/// nullptr otherwise.
459459
const CodeGenRegisterClass *
460-
inferRegClassFromPattern(const TreePatternNode &N);
460+
inferRegClassFromPattern(const TreePatternNode &N) const;
461461

462462
const CodeGenRegisterClass *
463463
inferRegClassFromInstructionPattern(const TreePatternNode &N,
464-
unsigned ResIdx);
464+
unsigned ResIdx) const;
465465

466466
Error constrainOperands(action_iterator InsertPt, RuleMatcher &M,
467-
unsigned InsnID, const TreePatternNode &Dst);
467+
unsigned InsnID, const TreePatternNode &Dst) const;
468468

469469
/// Return the size of the MemoryVT in this predicate, if possible.
470470
std::optional<unsigned>
@@ -1178,8 +1178,8 @@ Error GlobalISelEmitter::importChildMatcher(
11781178
// has to succeed.
11791179
OperandMatcher &OM =
11801180
InsnOperand.getInsnMatcher().addOperand(0, "", TempOpIdx);
1181-
if (auto Error =
1182-
OM.addTypeCheckPredicate(TypeSetByHwMode(VTy), false /* OperandIsAPointer */))
1181+
if (auto Error = OM.addTypeCheckPredicate(TypeSetByHwMode(VTy),
1182+
/*OperandIsAPointer=*/false))
11831183
return failedImport(toString(std::move(Error)) +
11841184
" for result of Src pattern operator");
11851185

@@ -1198,7 +1198,7 @@ Error GlobalISelEmitter::importChildMatcher(
11981198

11991199
Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer(
12001200
action_iterator InsertPt, RuleMatcher &Rule, BuildMIAction &DstMIBuilder,
1201-
const TreePatternNode &Dst) {
1201+
const TreePatternNode &Dst) const {
12021202

12031203
const auto &SubOperand = Rule.getComplexSubOperand(Dst.getName());
12041204
if (SubOperand) {
@@ -1360,7 +1360,7 @@ Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer(
13601360
/// source DAG; this information is available via RuleMatcher::hasOperand.
13611361
Expected<BuildMIAction &> GlobalISelEmitter::createAndImportInstructionRenderer(
13621362
RuleMatcher &M, InstructionMatcher &InsnMatcher,
1363-
const TreePatternNode &Dst) {
1363+
const TreePatternNode &Dst) const {
13641364
auto InsertPtOrError = createInstructionRenderer(M.actions_end(), M, Dst);
13651365
if (auto Error = InsertPtOrError.takeError())
13661366
return std::move(Error);
@@ -1393,7 +1393,7 @@ Expected<BuildMIAction &> GlobalISelEmitter::createAndImportInstructionRenderer(
13931393
Expected<action_iterator>
13941394
GlobalISelEmitter::createAndImportSubInstructionRenderer(
13951395
action_iterator InsertPt, RuleMatcher &M, const TreePatternNode &Dst,
1396-
unsigned TempRegID) {
1396+
unsigned TempRegID) const {
13971397
auto InsertPtOrError = createInstructionRenderer(InsertPt, M, Dst);
13981398

13991399
// TODO: Assert there's exactly one result.
@@ -1425,8 +1425,10 @@ GlobalISelEmitter::createAndImportSubInstructionRenderer(
14251425
return InsertPtOrError.get();
14261426
}
14271427

1428-
Expected<action_iterator> GlobalISelEmitter::createInstructionRenderer(
1429-
action_iterator InsertPt, RuleMatcher &M, const TreePatternNode &Dst) {
1428+
Expected<action_iterator>
1429+
GlobalISelEmitter::createInstructionRenderer(action_iterator InsertPt,
1430+
RuleMatcher &M,
1431+
const TreePatternNode &Dst) const {
14301432
const Record *DstOp = Dst.getOperator();
14311433
if (!DstOp->isSubClassOf("Instruction")) {
14321434
if (DstOp->isSubClassOf("ValueType"))
@@ -1448,7 +1450,7 @@ Expected<action_iterator> GlobalISelEmitter::createInstructionRenderer(
14481450

14491451
Expected<action_iterator> GlobalISelEmitter::importExplicitDefRenderers(
14501452
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
1451-
const TreePatternNode &Dst, unsigned Start) {
1453+
const TreePatternNode &Dst, unsigned Start) const {
14521454
const CodeGenInstruction *DstI = DstMIBuilder.getCGI();
14531455

14541456
// Process explicit defs. The caller may have already handled the first def.
@@ -1516,7 +1518,7 @@ Expected<action_iterator> GlobalISelEmitter::importExplicitDefRenderers(
15161518

15171519
Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderers(
15181520
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
1519-
const TreePatternNode &Dst) {
1521+
const TreePatternNode &Dst) const {
15201522
const CodeGenInstruction *DstI = DstMIBuilder.getCGI();
15211523
CodeGenInstruction *OrigDstI = &Target.getInstruction(Dst.getOperator());
15221524

@@ -1740,7 +1742,7 @@ Error GlobalISelEmitter::importImplicitDefRenderers(
17401742

17411743
Error GlobalISelEmitter::constrainOperands(action_iterator InsertPt,
17421744
RuleMatcher &M, unsigned InsnID,
1743-
const TreePatternNode &Dst) {
1745+
const TreePatternNode &Dst) const {
17441746
const Record *DstOp = Dst.getOperator();
17451747
const CodeGenInstruction &DstI = Target.getInstruction(DstOp);
17461748
StringRef DstIName = DstI.TheDef->getName();
@@ -1853,7 +1855,7 @@ Error GlobalISelEmitter::constrainOperands(action_iterator InsertPt,
18531855
}
18541856

18551857
const CodeGenRegisterClass *
1856-
GlobalISelEmitter::getRegClassFromLeaf(const TreePatternNode &Leaf) {
1858+
GlobalISelEmitter::getRegClassFromLeaf(const TreePatternNode &Leaf) const {
18571859
assert(Leaf.isLeaf() && "Expected leaf?");
18581860
const Record *RCRec = getInitValueAsRegClass(Leaf.getLeafValue());
18591861
if (!RCRec)
@@ -1862,7 +1864,7 @@ GlobalISelEmitter::getRegClassFromLeaf(const TreePatternNode &Leaf) {
18621864
}
18631865

18641866
const CodeGenRegisterClass *
1865-
GlobalISelEmitter::inferRegClassFromPattern(const TreePatternNode &N) {
1867+
GlobalISelEmitter::inferRegClassFromPattern(const TreePatternNode &N) const {
18661868
if (N.isLeaf())
18671869
return getRegClassFromLeaf(N);
18681870

@@ -1886,7 +1888,7 @@ GlobalISelEmitter::inferRegClassFromPattern(const TreePatternNode &N) {
18861888

18871889
const CodeGenRegisterClass *
18881890
GlobalISelEmitter::inferRegClassFromInstructionPattern(const TreePatternNode &N,
1889-
unsigned ResIdx) {
1891+
unsigned ResIdx) const {
18901892
const CodeGenInstruction &Inst = Target.getInstruction(N.getOperator());
18911893
assert(ResIdx < Inst.Operands.NumDefs &&
18921894
"Can only infer register class for explicit defs");
@@ -1965,7 +1967,7 @@ GlobalISelEmitter::inferRegClassFromInstructionPattern(const TreePatternNode &N,
19651967
}
19661968

19671969
const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClass(
1968-
const TypeSetByHwMode &Ty, const TreePatternNode &SubRegIdxNode) {
1970+
const TypeSetByHwMode &Ty, const TreePatternNode &SubRegIdxNode) const {
19691971
// We need a ValueTypeByHwMode for getSuperRegForSubReg.
19701972
if (!Ty.isValueTypeByHwMode(false))
19711973
return nullptr;
@@ -1984,7 +1986,7 @@ const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClass(
19841986

19851987
const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClassForNode(
19861988
const TypeSetByHwMode &Ty, const TreePatternNode &SuperRegNode,
1987-
const TreePatternNode &SubRegIdxNode) {
1989+
const TreePatternNode &SubRegIdxNode) const {
19881990
// Check if we already have a defined register class for the super register
19891991
// node. If we do, then we should preserve that rather than inferring anything
19901992
// from the subregister index node. We can assume that whoever wrote the
@@ -1997,7 +1999,7 @@ const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClassForNode(
19971999
}
19982000

19992001
const CodeGenSubRegIndex *GlobalISelEmitter::inferSubRegIndexForNode(
2000-
const TreePatternNode &SubRegIdxNode) {
2002+
const TreePatternNode &SubRegIdxNode) const {
20012003
if (!SubRegIdxNode.isLeaf())
20022004
return nullptr;
20032005

@@ -2200,15 +2202,15 @@ GlobalISelEmitter::buildMatchTable(MutableArrayRef<RuleMatcher> Rules,
22002202
OpcodeOrder[Opcode] = CurrentOrdering++;
22012203
}
22022204

2203-
llvm::stable_sort(InputRules, [&OpcodeOrder](const Matcher *A,
2204-
const Matcher *B) {
2205-
auto *L = static_cast<const RuleMatcher *>(A);
2206-
auto *R = static_cast<const RuleMatcher *>(B);
2207-
return std::tuple(OpcodeOrder[L->getOpcode()],
2208-
L->insnmatchers_front().getNumOperandMatchers()) <
2209-
std::tuple(OpcodeOrder[R->getOpcode()],
2210-
R->insnmatchers_front().getNumOperandMatchers());
2211-
});
2205+
llvm::stable_sort(
2206+
InputRules, [&OpcodeOrder](const Matcher *A, const Matcher *B) {
2207+
auto *L = static_cast<const RuleMatcher *>(A);
2208+
auto *R = static_cast<const RuleMatcher *>(B);
2209+
return std::tuple(OpcodeOrder[L->getOpcode()],
2210+
L->insnmatchers_front().getNumOperandMatchers()) <
2211+
std::tuple(OpcodeOrder[R->getOpcode()],
2212+
R->insnmatchers_front().getNumOperandMatchers());
2213+
});
22122214

22132215
for (Matcher *Rule : InputRules)
22142216
Rule->optimize();

0 commit comments

Comments
 (0)