@@ -422,6 +422,10 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
422422 Error importXFormNodeRenderer (RuleMatcher &M, BuildMIAction &MIBuilder,
423423 const TreePatternNode &N) const ;
424424
425+ Error importInstructionNodeRenderer (RuleMatcher &M, BuildMIAction &MIBuilder,
426+ const TreePatternNode &N,
427+ action_iterator &InsertPt) const ;
428+
425429 Expected<action_iterator>
426430 importExplicitUseRenderer (action_iterator InsertPt, RuleMatcher &Rule,
427431 BuildMIAction &DstMIBuilder,
@@ -1339,6 +1343,27 @@ Error GlobalISelEmitter::importXFormNodeRenderer(
13391343 return Error::success ();
13401344}
13411345
1346+ // Equivalent of MatcherGen::EmitResultInstructionAsOperand.
1347+ Error GlobalISelEmitter::importInstructionNodeRenderer (
1348+ RuleMatcher &M, BuildMIAction &MIBuilder, const TreePatternNode &N,
1349+ action_iterator &InsertPt) const {
1350+ Expected<LLTCodeGen> OpTy = getInstResultType (N, Target);
1351+ if (!OpTy)
1352+ return OpTy.takeError ();
1353+
1354+ unsigned TempRegID = M.allocateTempRegID ();
1355+ InsertPt = M.insertAction <MakeTempRegisterAction>(InsertPt, *OpTy, TempRegID);
1356+ MIBuilder.addRenderer <TempRegRenderer>(TempRegID);
1357+
1358+ auto InsertPtOrError =
1359+ createAndImportSubInstructionRenderer (++InsertPt, M, N, TempRegID);
1360+ if (!InsertPtOrError)
1361+ return InsertPtOrError.takeError ();
1362+
1363+ InsertPt = *InsertPtOrError;
1364+ return Error::success ();
1365+ }
1366+
13421367Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer (
13431368 action_iterator InsertPt, RuleMatcher &Rule, BuildMIAction &DstMIBuilder,
13441369 const TreePatternNode &Dst) const {
@@ -1361,20 +1386,10 @@ Expected<action_iterator> GlobalISelEmitter::importExplicitUseRenderer(
13611386 }
13621387
13631388 if (Dst.getOperator ()->isSubClassOf (" Instruction" )) {
1364- auto OpTy = getInstResultType (Dst, Target);
1365- if (!OpTy)
1366- return OpTy.takeError ();
1367-
1368- unsigned TempRegID = Rule.allocateTempRegID ();
1369- InsertPt =
1370- Rule.insertAction <MakeTempRegisterAction>(InsertPt, *OpTy, TempRegID);
1371- DstMIBuilder.addRenderer <TempRegRenderer>(TempRegID);
1372-
1373- auto InsertPtOrError =
1374- createAndImportSubInstructionRenderer (++InsertPt, Rule, Dst, TempRegID);
1375- if (auto Error = InsertPtOrError.takeError ())
1376- return std::move (Error);
1377- return InsertPtOrError.get ();
1389+ if (Error Err =
1390+ importInstructionNodeRenderer (Rule, DstMIBuilder, Dst, InsertPt))
1391+ return Err;
1392+ return InsertPt;
13781393 }
13791394
13801395 // Should not reach here.
0 commit comments