<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90296>90296</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir][arith] canonicalization pattern causes miscompilation on `arith.index_cast`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pingshiyu
</td>
</tr>
</table>
<pre>
similar issue to: https://github.com/llvm/llvm-project/issues/90238
The following code:
```mlir
module {
func.func @main() {
%3 = call @gt_i8_max() : () -> index
%4 = arith.index_cast %3 : index to i8
%5 = arith.index_cast %4 : i8 to index
vector.print str "%3="
vector.print %3 : index
vector.print str "%4="
vector.print %4 : i8
vector.print str "%5="
vector.print %5 : index // Bug: expect "%5=0".
return
}
func.func @gt_i8_max() -> index {
%max = arith.constant 256 : index
return %max : index
}
}
```
incorrectly prints out `%5=256` (correct result should be `%5=0`) when compiled and executed with:
`mlir-opt --canonicalize --arith-expand --convert-arith-to-llvm --convert-scf-to-cf --convert-cf-to-llvm --convert-vector-to-llvm --convert-func-to-llvm --reconcile-unrealized-casts | mlir-cpu-runner -e main --shared-libs ~/lib/mlir/libmlir_c_runner_utils.so --entry-point-result void`
This appears to be caused by the canonicalization for `arith.index_cast` folding the sequence:
```mlir
%3 = call @gt_i8_max() : () -> index
%4 = arith.index_cast %3 : index to i8
%5 = arith.index_cast %4 : i8 to index
```
into:
```mlir
%3 = call @gt_i8_max() : () -> index
%4 = arith.index_cast %3 : index to i8
// effectively: %5 = %3
```
Reproduction here: https://godbolt.org/z/oW318xzE5
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVslu4zgTfhr6UqAhU4vlgw_J7_YD_BhgjgZFli0OKFLDJbFzmGcfkIpjORsa3ZcJApos1sZavhL3Xp0M4pbUj6TeLXgMvXXbUZmT79UlLjorL1uvBqW5A-V9RAiWlA_QhzB6Uj4Qtidsf1Khj91S2IGwvdZP1x86OvsXikDYPgt7wvabgpUtKXakeJjWP3qEo9XaPitzAmElJr0TQ1NM_4NWbiINVkaNQNaP0xkA4BiNWKYFSFUMXBnCWsI2MybC6hJIuQPBtU5cp3BQ7WHg5ytrmZjylpLyBygj8XyzkP4Iq6usgzsV-mXmOAjuw1X7wyQFwYJqP8jWX8pWk2ybBWd2n1AE65ajUyaADw4IY8kUKXdpd2fgjvfen--1VT-j7erh96rqn1FVzwI1FQ88xlOi4XlEEWa6CsLYEu7VOQzRmRuNrHdf1MH7DN_Sel88r-kZ-HmWIGGND9wEYHXzIZJ3rtxkPzC9-XbbXOt5OiojrHMogr5ADpAHGwOk-ykCrG5IU6TCfGUEhz7qAL63UUvocMac9bINPPdoQNhhVBolcCMBzyhiQAnPKvTz5kptRe0YgFLBjTVKcK1eECjNYaB4HpM8pcKaJ3ThlRwsTd09o3txTFRxnNEm0jvGqRw-uUhpm5EdCmuE0kijcZi9kjQ1jAey_h9kx8UYqYvGoAOKkPoeKPU9dyipVp2HfxIMqY6wfcaPfEi7gzhMcocYlPZLb4FSNMFd6GiVCfQ1yk9WybdkXcFKeeDjiNz51K8dguDRo4TuAqFPp7c48qCsgaN1KUnvGz_l9Wi1TJiX5Dz-HdGIb7Hvd1DsV9DrV1DrQ4nnefEfelKGHDweUQT1hPoyGXh9aIbXz94xrf_H0VkZRU5sjw4_GYVWdlaHpXUnwvYvhO3tn-WqPb_8qBdyW8pNueEL3K7Wq2q1LtesXfTbo2y7Y91W3brpKinWuNoI3rVlJTvByoYv1JYVrCoq1rCSsaJdrlrJG2yKghVtWbOOVAUOXOllap9ke5Hn7XZTsE2z0LxD7fOQZ2xqBZbGvdvmId3FkydVoZUP_qYgqKDzh0EWqHekfsxxJvXuY5GPPAR0ZuoFD4PyEwBNt9Z80QGL6PT2tz4lNs2_AQAA__9WV5rR">