@@ -396,27 +396,26 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
396
396
Expected<BuildMIAction &>
397
397
createAndImportInstructionRenderer (RuleMatcher &M,
398
398
InstructionMatcher &InsnMatcher,
399
- const TreePatternNode &Dst);
399
+ const TreePatternNode &Dst) const ;
400
400
Expected<action_iterator> createAndImportSubInstructionRenderer (
401
401
action_iterator InsertPt, RuleMatcher &M, const TreePatternNode &Dst,
402
- unsigned TempReg);
402
+ unsigned TempReg) const ;
403
403
Expected<action_iterator>
404
404
createInstructionRenderer (action_iterator InsertPt, RuleMatcher &M,
405
- const TreePatternNode &Dst);
405
+ const TreePatternNode &Dst) const ;
406
406
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 ;
411
410
412
411
Expected<action_iterator>
413
412
importExplicitUseRenderers (action_iterator InsertPt, RuleMatcher &M,
414
413
BuildMIAction &DstMIBuilder,
415
- const TreePatternNode &Dst);
414
+ const TreePatternNode &Dst) const ;
416
415
Expected<action_iterator>
417
416
importExplicitUseRenderer (action_iterator InsertPt, RuleMatcher &Rule,
418
417
BuildMIAction &DstMIBuilder,
419
- const TreePatternNode &Dst);
418
+ const TreePatternNode &Dst) const ;
420
419
Error importDefaultOperandRenderers (action_iterator InsertPt, RuleMatcher &M,
421
420
BuildMIAction &DstMIBuilder,
422
421
const DAGDefaultOperand &DefaultOp) const ;
@@ -441,30 +440,31 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
441
440
const CodeGenRegisterClass *
442
441
inferSuperRegisterClassForNode (const TypeSetByHwMode &Ty,
443
442
const TreePatternNode &SuperRegNode,
444
- const TreePatternNode &SubRegIdxNode);
443
+ const TreePatternNode &SubRegIdxNode) const ;
445
444
const CodeGenSubRegIndex *
446
- inferSubRegIndexForNode (const TreePatternNode &SubRegIdxNode);
445
+ inferSubRegIndexForNode (const TreePatternNode &SubRegIdxNode) const ;
447
446
448
447
// / Infer a CodeGenRegisterClass which suppoorts \p Ty and \p SubRegIdxNode.
449
448
// / Return nullptr if no such class exists.
450
449
const CodeGenRegisterClass *
451
450
inferSuperRegisterClass (const TypeSetByHwMode &Ty,
452
- const TreePatternNode &SubRegIdxNode);
451
+ const TreePatternNode &SubRegIdxNode) const ;
453
452
454
453
// / 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 ;
456
456
457
457
// / Return a CodeGenRegisterClass for \p N if one can be found. Return
458
458
// / nullptr otherwise.
459
459
const CodeGenRegisterClass *
460
- inferRegClassFromPattern (const TreePatternNode &N);
460
+ inferRegClassFromPattern (const TreePatternNode &N) const ;
461
461
462
462
const CodeGenRegisterClass *
463
463
inferRegClassFromInstructionPattern (const TreePatternNode &N,
464
- unsigned ResIdx);
464
+ unsigned ResIdx) const ;
465
465
466
466
Error constrainOperands (action_iterator InsertPt, RuleMatcher &M,
467
- unsigned InsnID, const TreePatternNode &Dst);
467
+ unsigned InsnID, const TreePatternNode &Dst) const ;
468
468
469
469
// / Return the size of the MemoryVT in this predicate, if possible.
470
470
std::optional<unsigned >
@@ -1178,8 +1178,8 @@ Error GlobalISelEmitter::importChildMatcher(
1178
1178
// has to succeed.
1179
1179
OperandMatcher &OM =
1180
1180
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 ))
1183
1183
return failedImport (toString (std::move (Error)) +
1184
1184
" for result of Src pattern operator" );
1185
1185
@@ -1198,7 +1198,7 @@ Error GlobalISelEmitter::importChildMatcher(
1198
1198
1199
1199
Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer (
1200
1200
action_iterator InsertPt, RuleMatcher &Rule, BuildMIAction &DstMIBuilder,
1201
- const TreePatternNode &Dst) {
1201
+ const TreePatternNode &Dst) const {
1202
1202
1203
1203
const auto &SubOperand = Rule.getComplexSubOperand (Dst.getName ());
1204
1204
if (SubOperand) {
@@ -1360,7 +1360,7 @@ Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer(
1360
1360
// / source DAG; this information is available via RuleMatcher::hasOperand.
1361
1361
Expected<BuildMIAction &> GlobalISelEmitter::createAndImportInstructionRenderer (
1362
1362
RuleMatcher &M, InstructionMatcher &InsnMatcher,
1363
- const TreePatternNode &Dst) {
1363
+ const TreePatternNode &Dst) const {
1364
1364
auto InsertPtOrError = createInstructionRenderer (M.actions_end (), M, Dst);
1365
1365
if (auto Error = InsertPtOrError.takeError ())
1366
1366
return std::move (Error);
@@ -1393,7 +1393,7 @@ Expected<BuildMIAction &> GlobalISelEmitter::createAndImportInstructionRenderer(
1393
1393
Expected<action_iterator>
1394
1394
GlobalISelEmitter::createAndImportSubInstructionRenderer (
1395
1395
action_iterator InsertPt, RuleMatcher &M, const TreePatternNode &Dst,
1396
- unsigned TempRegID) {
1396
+ unsigned TempRegID) const {
1397
1397
auto InsertPtOrError = createInstructionRenderer (InsertPt, M, Dst);
1398
1398
1399
1399
// TODO: Assert there's exactly one result.
@@ -1425,8 +1425,10 @@ GlobalISelEmitter::createAndImportSubInstructionRenderer(
1425
1425
return InsertPtOrError.get ();
1426
1426
}
1427
1427
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 {
1430
1432
const Record *DstOp = Dst.getOperator ();
1431
1433
if (!DstOp->isSubClassOf (" Instruction" )) {
1432
1434
if (DstOp->isSubClassOf (" ValueType" ))
@@ -1448,7 +1450,7 @@ Expected<action_iterator> GlobalISelEmitter::createInstructionRenderer(
1448
1450
1449
1451
Expected<action_iterator> GlobalISelEmitter::importExplicitDefRenderers (
1450
1452
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
1451
- const TreePatternNode &Dst, unsigned Start) {
1453
+ const TreePatternNode &Dst, unsigned Start) const {
1452
1454
const CodeGenInstruction *DstI = DstMIBuilder.getCGI ();
1453
1455
1454
1456
// Process explicit defs. The caller may have already handled the first def.
@@ -1516,7 +1518,7 @@ Expected<action_iterator> GlobalISelEmitter::importExplicitDefRenderers(
1516
1518
1517
1519
Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderers (
1518
1520
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
1519
- const TreePatternNode &Dst) {
1521
+ const TreePatternNode &Dst) const {
1520
1522
const CodeGenInstruction *DstI = DstMIBuilder.getCGI ();
1521
1523
CodeGenInstruction *OrigDstI = &Target.getInstruction (Dst.getOperator ());
1522
1524
@@ -1740,7 +1742,7 @@ Error GlobalISelEmitter::importImplicitDefRenderers(
1740
1742
1741
1743
Error GlobalISelEmitter::constrainOperands (action_iterator InsertPt,
1742
1744
RuleMatcher &M, unsigned InsnID,
1743
- const TreePatternNode &Dst) {
1745
+ const TreePatternNode &Dst) const {
1744
1746
const Record *DstOp = Dst.getOperator ();
1745
1747
const CodeGenInstruction &DstI = Target.getInstruction (DstOp);
1746
1748
StringRef DstIName = DstI.TheDef ->getName ();
@@ -1853,7 +1855,7 @@ Error GlobalISelEmitter::constrainOperands(action_iterator InsertPt,
1853
1855
}
1854
1856
1855
1857
const CodeGenRegisterClass *
1856
- GlobalISelEmitter::getRegClassFromLeaf (const TreePatternNode &Leaf) {
1858
+ GlobalISelEmitter::getRegClassFromLeaf (const TreePatternNode &Leaf) const {
1857
1859
assert (Leaf.isLeaf () && " Expected leaf?" );
1858
1860
const Record *RCRec = getInitValueAsRegClass (Leaf.getLeafValue ());
1859
1861
if (!RCRec)
@@ -1862,7 +1864,7 @@ GlobalISelEmitter::getRegClassFromLeaf(const TreePatternNode &Leaf) {
1862
1864
}
1863
1865
1864
1866
const CodeGenRegisterClass *
1865
- GlobalISelEmitter::inferRegClassFromPattern (const TreePatternNode &N) {
1867
+ GlobalISelEmitter::inferRegClassFromPattern (const TreePatternNode &N) const {
1866
1868
if (N.isLeaf ())
1867
1869
return getRegClassFromLeaf (N);
1868
1870
@@ -1886,7 +1888,7 @@ GlobalISelEmitter::inferRegClassFromPattern(const TreePatternNode &N) {
1886
1888
1887
1889
const CodeGenRegisterClass *
1888
1890
GlobalISelEmitter::inferRegClassFromInstructionPattern (const TreePatternNode &N,
1889
- unsigned ResIdx) {
1891
+ unsigned ResIdx) const {
1890
1892
const CodeGenInstruction &Inst = Target.getInstruction (N.getOperator ());
1891
1893
assert (ResIdx < Inst.Operands .NumDefs &&
1892
1894
" Can only infer register class for explicit defs" );
@@ -1965,7 +1967,7 @@ GlobalISelEmitter::inferRegClassFromInstructionPattern(const TreePatternNode &N,
1965
1967
}
1966
1968
1967
1969
const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClass (
1968
- const TypeSetByHwMode &Ty, const TreePatternNode &SubRegIdxNode) {
1970
+ const TypeSetByHwMode &Ty, const TreePatternNode &SubRegIdxNode) const {
1969
1971
// We need a ValueTypeByHwMode for getSuperRegForSubReg.
1970
1972
if (!Ty.isValueTypeByHwMode (false ))
1971
1973
return nullptr ;
@@ -1984,7 +1986,7 @@ const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClass(
1984
1986
1985
1987
const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClassForNode (
1986
1988
const TypeSetByHwMode &Ty, const TreePatternNode &SuperRegNode,
1987
- const TreePatternNode &SubRegIdxNode) {
1989
+ const TreePatternNode &SubRegIdxNode) const {
1988
1990
// Check if we already have a defined register class for the super register
1989
1991
// node. If we do, then we should preserve that rather than inferring anything
1990
1992
// from the subregister index node. We can assume that whoever wrote the
@@ -1997,7 +1999,7 @@ const CodeGenRegisterClass *GlobalISelEmitter::inferSuperRegisterClassForNode(
1997
1999
}
1998
2000
1999
2001
const CodeGenSubRegIndex *GlobalISelEmitter::inferSubRegIndexForNode (
2000
- const TreePatternNode &SubRegIdxNode) {
2002
+ const TreePatternNode &SubRegIdxNode) const {
2001
2003
if (!SubRegIdxNode.isLeaf ())
2002
2004
return nullptr ;
2003
2005
@@ -2200,15 +2202,15 @@ GlobalISelEmitter::buildMatchTable(MutableArrayRef<RuleMatcher> Rules,
2200
2202
OpcodeOrder[Opcode] = CurrentOrdering++;
2201
2203
}
2202
2204
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
+ });
2212
2214
2213
2215
for (Matcher *Rule : InputRules)
2214
2216
Rule->optimize ();
0 commit comments