Author: Martin Erhart Date: 2020-04-28T18:20:15+02:00 New Revision: 7f8ae5405a93a6041bd0969da7ccb288a4f7ec22
URL: https://github.com/llvm/llvm-project/commit/7f8ae5405a93a6041bd0969da7ccb288a4f7ec22 DIFF: https://github.com/llvm/llvm-project/commit/7f8ae5405a93a6041bd0969da7ccb288a4f7ec22.diff LOG: [mlir][assemblyFormat] Fix bug when using AttrSizedOperandSegments trait with non-buildable operand types only Summary: When creating an operation with * the `AttrSizedOperandSegments` trait * variadic operands of only non-buildable types * assemblyFormat to automatically generate the parser a local `builder` variable is used, but never declared. This adds a fix as well as a test for this case, as existing ones use buildable types only. Reviewers: rriddle, Kayjukh, grosser Reviewed By: Kayjukh Subscribers: mehdi_amini, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, grosul1, frgossen, llvm-commits Tags: #mlir, #llvm Differential Revision: https://reviews.llvm.org/D79004 Added: Modified: mlir/test/lib/Dialect/Test/TestOps.td mlir/tools/mlir-tblgen/OpFormatGen.cpp Removed: ################################################################################ diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td index 57b0c36505ca..1da2e71fbbd4 100644 --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -1258,6 +1258,16 @@ def FormatOptionalOperandResultBOp : FormatOptionalOperandResultOpBase<"b", [{ (`[` $variadic^ `]`)? attr-dict }]>; +def FormatTwoVariadicOperandsNoBuildableTypeOp + : TEST_Op<"format_two_variadic_operands_no_buildable_type_op", + [AttrSizedOperandSegments]> { + let arguments = (ins Variadic<AnyType>:$a, + Variadic<AnyType>:$b); + let assemblyFormat = [{ + `(` $a `:` type($a) `)` `->` `(` $b `:` type($b) `)` attr-dict + }]; +} + //===----------------------------------------------------------------------===// // Test SideEffects //===----------------------------------------------------------------------===// diff --git a/mlir/tools/mlir-tblgen/OpFormatGen.cpp b/mlir/tools/mlir-tblgen/OpFormatGen.cpp index a8116e4290b4..47c145df29e0 100644 --- a/mlir/tools/mlir-tblgen/OpFormatGen.cpp +++ b/mlir/tools/mlir-tblgen/OpFormatGen.cpp @@ -741,10 +741,8 @@ void OperationFormat::genParserTypeResolution(Operator &op, // Initialize the set of buildable types. if (!buildableTypes.empty()) { - body << " Builder &builder = parser.getBuilder();\n"; - FmtContext typeBuilderCtx; - typeBuilderCtx.withBuilder("builder"); + typeBuilderCtx.withBuilder("parser.getBuilder()"); for (auto &it : buildableTypes) body << " Type odsBuildableType" << it.second << " = " << tgfmt(it.first, &typeBuilderCtx) << ";\n"; @@ -867,7 +865,7 @@ void OperationFormat::genParserVariadicSegmentResolution(Operator &op, OpMethodBody &body) { if (!allOperands && op.getTrait("OpTrait::AttrSizedOperandSegments")) { body << " result.addAttribute(\"operand_segment_sizes\", " - << "builder.getI32VectorAttr({"; + << "parser.getBuilder().getI32VectorAttr({"; auto interleaveFn = [&](const NamedTypeConstraint &operand) { // If the operand is variadic emit the parsed size. if (operand.isVariableLength()) _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
