From d90100baae427ab4fea592636f167e036d302a6d Mon Sep 17 00:00:00 2001 From: schilkp Date: Mon, 13 Jan 2025 15:28:07 +0100 Subject: [PATCH] [MLIR][TableGen] Use arg index in InferredResultType constructor. `InferredResultType` construct expects an "result and arg"-style index (with results negative and args positive), and not a results index (results nonegative). --- mlir/lib/TableGen/Operator.cpp | 4 ++-- mlir/test/mlir-tblgen/op-result.td | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mlir/lib/TableGen/Operator.cpp b/mlir/lib/TableGen/Operator.cpp index c360c61afd27b..20a43ef15d09e 100644 --- a/mlir/lib/TableGen/Operator.cpp +++ b/mlir/lib/TableGen/Operator.cpp @@ -503,8 +503,8 @@ void Operator::populateTypeInferenceInfo( for (int otherResultIndex : resultIndices) { if (resultIndex == otherResultIndex) continue; - inference[resultIndex].sources.emplace_back(otherResultIndex, - "$_self"); + inference[resultIndex].sources.emplace_back( + InferredResultType::unmapResultIndex(otherResultIndex), "$_self"); } } } diff --git a/mlir/test/mlir-tblgen/op-result.td b/mlir/test/mlir-tblgen/op-result.td index 51f8b0671a328..f668d9a5a6644 100644 --- a/mlir/test/mlir-tblgen/op-result.td +++ b/mlir/test/mlir-tblgen/op-result.td @@ -180,6 +180,27 @@ def OpL4 : NS_Op<"two_inference_edges", [ // CHECK: inferredReturnTypes[1] = odsInferredType1 // CHECK: inferredReturnTypes[2] = odsInferredType2 +def OpL5 : NS_Op<"op_with_same_but_unconstraint_results", + [AllTypesMatch<["result_a", "result_b"]>]> { + let results = (outs AnyType:$result_a, AnyType:$result_b); +} + +// CHECK-NOT: LogicalResult OpL5::inferReturnTypes + +def OpL6 : NS_Op<"op_with_same_and_constraint_results", + [AllTypesMatch<["result_a", "result_b", "result_c"]>]> { + let results = (outs AnyType:$result_a, AnyType:$result_b, I32:$result_c); +} + +// CHECK-LABEL: LogicalResult OpL6::inferReturnTypes +// CHECK-NOT: } +// CHECK: odsInferredType0 = odsBuilder.getIntegerType(32); +// CHECK: odsInferredType1 = odsBuilder.getIntegerType(32); +// CHECK: odsInferredType2 = odsBuilder.getIntegerType(32); +// CHECK: inferredReturnTypes[0] = odsInferredType0; +// CHECK: inferredReturnTypes[1] = odsInferredType1; +// CHECK: inferredReturnTypes[2] = odsInferredType2; + def OpM : NS_Op<"mix_diff_size_variadic_and_normal_results_op", [AttrSizedResultSegments]> { let results = (outs Variadic:$output1, AnyTensor:$output2, Optional:$output3); }