<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58409>58409</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
incorrect lowering of vector.contract
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir:vectorops
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
nicolasvasilache
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ftynse
</td>
</tr>
</table>
<pre>
`vector.contract` lowers to add/mul contraction regardless of the contraction kind specified. Repro (expected to find compares or mins in the output, but add/mul are generated instead):
```mlir
cat <<EOF | mlir-opt -convert-vector-to-llvm | grep cmp
#map0 = affine_map<(i, j, k) -> (i, k)>
#map1 = affine_map<(i, j, k) -> (k, j)>
#map2 = affine_map<(i, j, k) -> (i, j)>
func.func @main() -> (i32) {
%c0 = arith.constant 0 : i32
%v0 = arith.constant dense<[[1., 2., 3., 4.],
[5., 6., 7., 8.],
[9., 10., 11., 12.]]> : vector<3x4xf32>
%v1 = arith.constant dense<[[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.],
[10., 11., 12.]]> : vector<4x3xf32>
%v2 = arith.constant dense<[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]> : vector<3x3xf32>
%v3 = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<minf>} %v0, %v1, %v2 : vector<3x4xf32>, vector<4x3xf32> into vector<3x3xf32>
vector.print %v3 : vector<3x3xf32>
return %c0 : i32
}
EOF
```
https://reviews.llvm.org/D136079 adds a stopgap, but a proper lowering may be desired.
On a side note, the modeling of contraction kind by a single selector isn't very clear to me. There are two primitive operations involved: per-element combination (multiplication) and accumulation (summation), which of them is being controlled by the kind?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVl1zozoM_TXwognDRwjJAw_dpn3dmZ37vmNAEG8NZmyTJv9-JUPStLfdvZm5GccxsnQ4kmwplW7OZbCJj1g7baJaD86I2pEElH5FY8FpEE0TpM_9pOCyL_UABjthGoXWgm7BHfDd7oscGrAj1rKV2EQAP3A0GoJ0iyeSOmwYuWWtWvejMEgwBno5WJCDh9OTGycXpI9QTe6GBOlChwMawShk4FDQ3i7IHoJ4H8SXeRPPo1fSzKJaOAiyRxpP358hKB6B91Z6dLAi8kc0bjVHYuX0Sqlj75U6gyPU_bjgplkvxpiA9iBa8gB_0jPDplvJbH_x9EKEYBVkT3ARv3iKT7cgyT0gL4v4I0h6N5MFBG6j1U5DHfEEwTruhRxI-Z1hlvJjUHyb9YGEeb1EwUh34LNjnRgcsPAB2OBN8_ipZoODReabf6ORREwu9XPm53UU5HteXJD-9CGE3Ftt_Fz4eXsnws5bJfH8MzNKUg9Cg0NBrs1HhHhnp_WpJT-vCblxOLnb4buIrr3V1eG7bK-hoXl3p-1_Dc36lL0LDcBtcNK_B2d-z3W-i-T_a_tp4rMvE5953z4UVL44VOvwJIeOL6n1SuzpXE08wbkmvC3Thbl0XOu0-enOI95YplQ2hVKoaDlbfSIx2Ey-JLNoxvO12aOk2cKTReQXld-WnSr286WdMegwXxbplxeAFD5JPpVnKvNfxg0ucRoNKV7D94dIA_UdN5nhWn5uKg3RnhdU3T_0gNs0HZwbLTeL9JmGwaPEVxtxtY-06Ui0T7JNXOy45VgQYJ0eO6qrl0YE1MhGNHODpHxCL85QIZ1fKyna0e27vg8MIBuEQTtkCO5svW5QsSU1zn81zersTYZOIVhUPhAgLeWvcBQXc4ZaoTDcPnuM4J8DUj_knuheNVGTvXTySN1z5ENDqNxPj1odseFgkXRFoD1SuKnxVnLwSlziqbc6OSpZi_m4UACIjqjriXauWnbq-4sC-_N6kPVh-QfQE0-KBHvm3dJ0FL1D7PR8xJ5DLJPNZhMneZzlYVNmzS7bidBJp7CUQ62NIZffgkvIH-9SOBlVvs9iR5VkqkilpwdO5fKzolz9InN6lNZOaGmRb9fxLjyUNVZ5lbVxRt-m2RTNplpvmyIvdhv61mmoRIXKlvNd8_8isoeZi6ZX--sUyjKN0zSJkyLJ8iLJo6TYrsV617QiibdtHFM7Reqn6nrAQlN6ZtXUWdpU0rq30xcKa2U3IC5vHWStlbBHYaUS9QGXt4rJHbQpW3emkhl6z0rv1m8YTL3a">