@@ -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
11991199Expected<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.
13611361Expected<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(
13931393Expected<action_iterator>
13941394GlobalISelEmitter::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
14491451Expected<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
15171519Expected<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
17411743Error 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
18551857const 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
18641866const 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
18871889const CodeGenRegisterClass *
18881890GlobalISelEmitter::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
19671969const 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
19851987const 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
19992001const 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