diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -1478,6 +1478,19 @@ functional-type($buildable_res, $result) attr-dict }]>; +def FormatVariadicResult : TEST_Op<"format_variadic_result"> { + let results = (outs Variadic:$result); + let assemblyFormat = [{ `:` type($result) attr-dict}]; +} + +def FormatMultipleVariadicResults : TEST_Op<"format_multiple_variadic_results", + [AttrSizedResultSegments]> { + let results = (outs Variadic:$result0, Variadic:$result1); + let assemblyFormat = [{ + `:` `(` type($result0) `)` `,` `(` type($result1) `)` attr-dict + }]; +} + // Test various mixings of operand type formatting. class FormatOperandBase : TEST_Op<"format_operand_" # suffix # "_op"> { @@ -1506,6 +1519,19 @@ let assemblyFormat = "$targets attr-dict"; } +def FormatVariadicOperand : TEST_Op<"format_variadic_operand"> { + let arguments = (ins Variadic:$operand); + let assemblyFormat = [{ $operand `:` type($operand) attr-dict}]; +} + +def FormatMultipleVariadicOperands : + TEST_Op<"format_multiple_variadic_operands", [AttrSizedOperandSegments]> { + let arguments = (ins Variadic:$operand0, Variadic:$operand1); + let assemblyFormat = [{ + ` ` `(` $operand0 `)` `,` `(` $operand1 `:` type($operand1) `)` attr-dict + }]; +} + // Test various mixings of optional operand and result type formatting. class FormatOptionalOperandResultOpBase : TEST_Op<"format_optional_operand_result_" # suffix # "_op", diff --git a/mlir/test/mlir-tblgen/op-format.mlir b/mlir/test/mlir-tblgen/op-format.mlir --- a/mlir/test/mlir-tblgen/op-format.mlir +++ b/mlir/test/mlir-tblgen/op-format.mlir @@ -2,6 +2,8 @@ // CHECK: %[[I64:.*]] = %i64 = "foo.op"() : () -> (i64) +// CHECK: %[[I32:.*]] = +%i32 = "foo.op"() : () -> (i32) // CHECK: %[[MEMREF:.*]] = %memref = "foo.op"() : () -> (memref<1xf64>) @@ -119,6 +121,12 @@ // CHECK: test.format_result_c_op (i64) -> memref<1xf64> %ignored_c:2 = test.format_result_c_op (i64) -> memref<1xf64> +// CHECK: test.format_variadic_result : i64, i64, i64 +%ignored_v:3 = test.format_variadic_result : i64, i64, i64 + +// CHECK: test.format_multiple_variadic_results : (i64, i64, i64), (i32, i32) +%ignored_mv:5 = test.format_multiple_variadic_results : (i64, i64, i64), (i32, i32) + //===----------------------------------------------------------------------===// // Format operands //===----------------------------------------------------------------------===// @@ -138,6 +146,12 @@ // CHECK: test.format_operand_e_op %[[I64]], %[[MEMREF]] : i64, memref<1xf64> test.format_operand_e_op %i64, %memref : i64, memref<1xf64> +// CHECK: test.format_variadic_operand %[[I64]], %[[I64]], %[[I64]] : i64, i64, i64 +test.format_variadic_operand %i64, %i64, %i64 : i64, i64, i64 + +// CHECK: test.format_multiple_variadic_operands (%[[I64]], %[[I64]], %[[I64]]), (%[[I64]], %[[I32]] : i64, i32) +test.format_multiple_variadic_operands (%i64, %i64, %i64), (%i64, %i32 : i64, i32) + //===----------------------------------------------------------------------===// // Format successors //===----------------------------------------------------------------------===//