From 46d317edf479ca33976c5299fe1a10bac968761a Mon Sep 17 00:00:00 2001 From: Groverkss Date: Thu, 14 Sep 2023 19:45:53 +0530 Subject: [PATCH] Rebase and account for variadicity --- .../tools/tblgen-to-irdl/OpDefinitionsGen.cpp | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/mlir/tools/tblgen-to-irdl/OpDefinitionsGen.cpp b/mlir/tools/tblgen-to-irdl/OpDefinitionsGen.cpp index 5f899ee242c04f..2323127d7afd63 100644 --- a/mlir/tools/tblgen-to-irdl/OpDefinitionsGen.cpp +++ b/mlir/tools/tblgen-to-irdl/OpDefinitionsGen.cpp @@ -70,27 +70,37 @@ irdl::OperationOp createIRDLOperation(OpBuilder &builder, Block &opBlock = op.getBody().emplaceBlock(); OpBuilder consBuilder = OpBuilder::atBlockBegin(&opBlock); - // Extract operands of the operation. - SmallVector operands; - for (const NamedTypeConstraint &namedCons : tblgenOp.getOperands()) { - assert(namedCons.isVariableLength() && - "Variable length operands not supported yet"); - auto operand = createConstraint(consBuilder, namedCons); - operands.push_back(operand); - } - - // Extract results of the operation. - SmallVector results; - for (const NamedTypeConstraint &namedCons : tblgenOp.getResults()) { - assert(namedCons.isVariableLength() && - "Variable length operands not supported yet"); - auto result = createConstraint(consBuilder, namedCons); - results.push_back(result); - } + auto getValues = [&](tblgen::Operator::const_value_range namedCons) { + SmallVector operands; + SmallVector variadicity; + for (const NamedTypeConstraint &namedCons : namedCons) { + auto operand = createConstraint(consBuilder, namedCons); + operands.push_back(operand); + + irdl::VariadicityAttr var; + if (namedCons.isOptional()) + var = consBuilder.getAttr( + irdl::Variadicity::optional); + else if (namedCons.isVariadic()) + var = consBuilder.getAttr( + irdl::Variadicity::variadic); + else + var = consBuilder.getAttr( + irdl::Variadicity::single); + + variadicity.push_back(var); + } + return std::make_tuple(operands, variadicity); + }; + + auto [operands, operandVariadicity] = getValues(tblgenOp.getOperands()); + auto [results, resultVariadicity] = getValues(tblgenOp.getResults()); // Create the operands and results operations. - consBuilder.create(UnknownLoc::get(ctx), operands); - consBuilder.create(UnknownLoc::get(ctx), results); + consBuilder.create(UnknownLoc::get(ctx), operands, + operandVariadicity); + consBuilder.create(UnknownLoc::get(ctx), results, + resultVariadicity); return op; }