<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59394>59394</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir][SparseTensor] Sparsification pass crashes with subi in reduction loop
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
qcolombet
</td>
</tr>
</table>
<pre>
I don't know if I'm somehow building the IR incorrectly, but I can crash the `sparsification` pass with a somewhat simple IR example (See attached [tmp.txt](https://github.com/llvm/llvm-project/files/10184899/tmp.txt) for the mlir file. Github doesn't like `.mlir` file extension.)
Essentially I'm doing: `res = sparse_input[i] - res` and the sparsification chokes on it.
If I do `res = res - sparse_input[i]` everything is fine (i.e., swap the argument of the `arith.subi` operation)
If I do `res = sparse_input[i] * res` everything is fine as well (i.e., replace `arith.subi` with `arith.muli`).
To reproduce:
```
mlir-opt -sparsification repro.mlir -o -
```
Where repro.mlir is:
```
#SparseVector = #sparse_tensor.encoding<{dimLevelType = ["compressed"]}>
#trait = {
indexing_maps = [
affine_map<(i) -> (i)>, // a (in)
affine_map<(i) -> ()> // x (out)
],
iterator_types = ["reduction"]
}
func.func @sparse_reduction_subi(%argx: tensor<i32>,
%arga: tensor<?xi32, #SparseVector>)
-> tensor<i32> {
%0 = linalg.generic #trait
ins(%arga: tensor<?xi32, #SparseVector>)
outs(%argx: tensor<i32>) {
^bb(%a: i32, %x: i32):
%t = arith.subi %a, %x: i32
linalg.yield %t : i32
} -> tensor<i32>
return %0 : tensor<i32>
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVV1zszYT_TXrmx0zWEBsLriI4_idzLxXfTLtZUbAAmqERCUR2_--IwGOk_ppp2U8YCTtxzlnl-XWilYRFZDtITus-Og6bYo_Ki11X5Jblbq-FC9YawVs6_Bd6ROKBl-AbXu0uqdOn7AchayFatF1hC-_oFCVNoYqJy_AnrAcHb5gxRVWhtsunIKH2A7cWNGIijuhFTzEOHBr8SRchzz4PnXcoRX9IINbOvPwF9juBxFy53jVUY2Q7V0_RO7sIDsA23XODRaSR2BHYMdWuG4so0r3wI5SfiyP9WD071Q5YMdGSLLAjpt4s0t3eQ7suDhkOTbahJR7KQz6oxH-L_jEWpOdeJHiPWCK_CEPxZ9DOjtSVmgVAcshPkD8ON2frSXlBJfyMlNZa6FaSB69E0MWITlgIIjehBpGB9leQHbANRqyPgBXdcjqK4tYdfqdLGqFwkVTsJcGvYC3nv1zfc-_90wfZC6u83oKi41QgXERUeTFtCc-hMDctGNPyqFuFkW5Ea6L7FgK70cPZCZpF_B3MrmHEdjjgvJOLtziiaS8zcnQIHl1J4VQS9fVfpR-FVge3Yrxqr0Do-uxIl8109ZDPP_Cq5d1rQeH6298B8ugOq41rvGu9XT_rSNDtwbC_iwcsORHIOZXqpw2gSlgyUyWLyptIlKVrkPVPMF2X4v-__RB8vUy0HQ-2wNjle4HQ9ZSDYx5gbcHSJ5v0wKWOMOFm4y2-2kVUaiazkK1bz0f7OIRl11E3ng5_K5PgO2E75U1JM84v_g47AlxakPkYf2zGP7ewWTv48zmZ7-qR_dpj6HbfYAlY-cLTps3dxnI3pBgqB6rqRIDBxPu7eGWhmZUVeRvCGk8E321ewsF5bPKuGnPvk8nESB5EgmbkH5S89Nrsudf7CE5nr0P9oTfZA9uF7SBmG9Bb-UClsUBshSKyzZqSZERFS7yzueEslcc_ymPcOnR2X-gI79NLmDPnstyNvIW11jZ-fqaXxvihrGpMj8bO7D4zXSpgRn8RZCsF9svBxC2h7tcLvuG3GjUQudfgX2rnaVvV3WR1HmS8xUVm4dtnOb5LtmsuiKNyzItqdxUWcIqyjiv4zjN0iar-bbM0pUoWMzYhsW7zSZNsjja1nzTbPOqTMuYbeIc0ph6LmTkp1akTbsS1o5UZHmSpyvJS5K2mApd0QnD5lToK1OESVeOrYU0lsI6--nFCSfD4A8zKztAtp9Uf50gZwf88fVjF-ZzmOE0z-mgh_CfwblTUGo9rEYji389hUPifgwHYH8GAAD__-NdidQ">