<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/62670>62670</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Inconsistent vector.multi_reduction type after matmul vectorization
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir:linalg,
            mlir
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          antiagainst
      </td>
    </tr>
</table>

<pre>
    The following test to `test/Dialect/Linalg/vectorization.mlir`:

```mlir
#a_map = affine_map<(d0, d1, d2, d3) -> (d0, d2, d3)>
#b_map = affine_map<(d0, d1, d2, d3) -> (d2, d3, d1)>
#c_map = affine_map<(d0, d1, d2, d3) -> (d0, d1)>

func.func @linalg_generic_blocked_matmul(%A: tensor<4096x86x128xf32>, %B: tensor<86x128x2048xf32>) -> tensor<4096x2048xf32> {
  %f0 = arith.constant 0.0 : f32
  %empty = tensor.empty() : tensor<4096x2048xf32>
  %output = linalg.fill ins(%f0 : f32) outs(%empty : tensor<4096x2048xf32>) -> tensor<4096x2048xf32>
 %matmul = linalg.generic {
    indexing_maps = [#a_map, #b_map, #c_map],
    iterator_types = ["parallel", "parallel", "parallel", "reduction"]
  } ins(%A, %B : tensor<4096x86x128xf32>, tensor<86x128x2048xf32>)
    outs(%output : tensor<4096x2048xf32>) {
 ^bb0(%l: f32, %r: f32, %out: f32):
    %4 = arith.mulf %l, %r : f32
 %5 = arith.addf %out, %4 : f32
    linalg.yield %5 : f32
  } -> tensor<4096x2048xf32>
  return %matmul : tensor<4096x2048xf32>
}

transform.sequence failures(propagate) {
^bb1(%arg1: !pdl.operation):
  %0 = transform.structured.match ops{["linalg.generic"]} in %arg1 : (!pdl.operation) -> !pdl.operation
 %1 = get_closest_isolated_parent %0 : (!pdl.operation) -> !pdl.operation
 %2 = transform.structured.vectorize %1  { disable_multi_reduction_to_contract_patterns, disable_transfer_permutation_map_lowering_patterns }
}
```

would trigger error:

```
error: 'vector.multi_reduction' op destination type 'vector<4096x2048xf32>' is incompatible with source type 'vector<4096x2048x86x128xf32>'
note: see current operation: %7 = "vector.multi_reduction"(%6, %1) {kind = #vector.kind<add>, reduction_dims = [3]} : (vector<4096x2048x86x128xf32>, vector<4096x2048xf32>) -> vector<4096x2048xf32>
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVs2OozgQfhrnYg0CExJyyCGTTKSV9rh3ZHBBvGNs1i6mu_fpV7YhkJ7-Gc1KLTcpqr76-6owd052GuBIiq-kuGz4iDdjj1yj5B2X2uGmNuLl-NcNaGuUMk9SdxTBIUVDyS71j4RdL5IraPzTn1Jz1RF2_QENGiv_5SiNTnolLdmlJD-R9ELS-dyl8S-8jiKW86rnAyX5hfK2lRr8T5KfCStFStiZiiycLJw5YQf6heTf6PJ-eUPyb3fY-vdh77Ko9QDb_N9oHwHD2Y66SfxByTZVoaJVBxqsbKpameY7iKrn2I-KsJKw4kTyE0XQzliSn7fpYfdc7p4zVj63OfPY7EwJK74-qE0aLN0ualNwj1ArDUr2X2OI1AO2aUzcSrwljdEOuUaaJl58ot5k0YV-wJegHtGTIAjxH-jP8a_DWkDMiMOIASWWJWmlUlRqFwvRLp7ZgZoRJ_ns_CMvnyY_xUFYEWu_DmPqzro-lEot4FnqzlPCBW0_ZhPBY08iK6fnQCVSXAg7r0AQLEdjK3wZYIXCBm65UqAIY9H-lyQWxNj4kfSi4nKv7f6yVPE08-WNiv3Eq4_5tOSxNOPexE-6sdSSFN_qOo3W6t7gEKN9_GlGXAhw3zbeP2HFdsXWflQtDXATzivKElYUK3UuRDvjR4Pta47TmQsvEpSYAR7HYH_5NY5RCzha_cC1TyeE7C_rJYKWa9ca2ycO_hlBN0BbLtVowfdhsGbgHUd4qHQodBYLzW2Xea-EZYNQiRk8DwNx1oUlrIhLYOUO7djgaEEkPcfmRs3gvIfA2sd5mUgYyEcnnzQ6Ld_wO6_OVy_uHctCJB1g1SjjwGElnVEcQVQDt6BxDvd3HbD3U52_dxAD8TWlQjpeK6j6UaGs7qNXoakao9HyBquBI4L1o3e-60cHYKsBbD9iCMLvhkqZJ7B-o8xWdGn6_WH-qK7J8GRGJSha2XVgKVjrefT2tzj-nFUoYfuYWvIqC8L21AxUgEOpQ4jUr6jF4M2x3lPpqNSN6QeOslZAnyTeqDOjbeAjgFeLZx_D1AbBR-kAaDPa0OOlbyH8Yh-XJmPv5cEi4XfTZGfTSHyXWkym-WTqRSQ_cyGm7bf0VMj-vp3zidQT0T7P5kw_KNnEyvc1Hvu3EcdcHPID38Ax25V5WWyLfb65HTM48KIseVEednmbNnmTHeqyhq0oSrFtDxt5ZCnL0yJjacZYkSc7gPaQb0VdZ21RFjXZptBzqRKlfvSJsd1GOjfCccd2-3SjeA3KHeOchxtdflLTddDv51kaZn5jjx7kSz12LlxyHLoFFiWqcCkNBsWF_qH99UI69A1-u4-RPLxFsHRamg930M1o1fGGODjPfHYl7NpJvI110piesKt3Pv37Mljzd7zPhgQdYdeQ438BAAD__yS4Pa0">