Skip to content

Commit 67a79ad

Browse files
committed
importInstructionNodeRenderer
1 parent 8a6029f commit 67a79ad

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

llvm/utils/TableGen/GlobalISelEmitter.cpp

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
13421367
Expected<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

Comments
 (0)