Skip to content

Commit

Permalink
Rebase and account for variadicity
Browse files Browse the repository at this point in the history
  • Loading branch information
Groverkss committed Sep 19, 2023
1 parent 29ed2c5 commit 46d317e
Showing 1 changed file with 29 additions and 19 deletions.
48 changes: 29 additions & 19 deletions mlir/tools/tblgen-to-irdl/OpDefinitionsGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<Value> 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<Value> 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<Value> operands;
SmallVector<irdl::VariadicityAttr> 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::VariadicityAttr>(
irdl::Variadicity::optional);
else if (namedCons.isVariadic())
var = consBuilder.getAttr<irdl::VariadicityAttr>(
irdl::Variadicity::variadic);
else
var = consBuilder.getAttr<irdl::VariadicityAttr>(
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<irdl::OperandsOp>(UnknownLoc::get(ctx), operands);
consBuilder.create<irdl::ResultsOp>(UnknownLoc::get(ctx), results);
consBuilder.create<irdl::OperandsOp>(UnknownLoc::get(ctx), operands,
operandVariadicity);
consBuilder.create<irdl::ResultsOp>(UnknownLoc::get(ctx), results,
resultVariadicity);

return op;
}
Expand Down

0 comments on commit 46d317e

Please sign in to comment.