<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/148846>148846</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR] Boolean true incorrectly cast to -1 via `tosa.cast` from i1 to i32
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sweead
</td>
</tr>
</table>
<pre>
test commit: [87e39c3](https://github.com/llvm/llvm-project/commit/87e39c399c96128307a826fd9168679f7c8c8d10)
## Description:
When using `tosa.cast` to convert a tensor of type `tensor<...xi1>` (i.e., 1-bit boolean values) to a wider integer type such as `tensor<...xi32>`, the cast operation performs `sign-extension` rather than zero-extension. As a result: A boolean value true (represented as 1 in i1) is sign-extended to -1 in i32 (i.e., 0xFFFFFFFF).
## Steps to Reproduce:
### Minimal MLIR program (test.mlir):
```
func.func private @printMemrefI32(tensor<*xi32>)
func.func @main() {
%0 = "tosa.const"() <{values = dense<true> : tensor<2x3x1x2xi1>}> : () -> tensor<2x3x1x2xi1>
%1 = tosa.cast %0 : (tensor<2x3x1x2xi1>) -> tensor<2x3x1x2xi32>
%cast = tensor.cast %1 : tensor<2x3x1x2xi32> to tensor<*xi32>
call @printMemrefI32(%cast) : (tensor<*xi32>) -> ()
return
}
}
```
#### Command:
```
/home/workdir/llvm-project/build/bin/mlir-opt test.mlir -tosa-to-linalg-pipeline -tosa-to-arith -sparsifier | \
/home/workdir/llvm-project/build/bin/mlir-runner -e main -entry-point-result=void -shared-libs=/home/workdir/llvm-project/build/lib/libmlir_runner_utils.so
```
#### Output:
```
[[[[-1, -1]],
[[-1, -1]],
[[-1, -1]]],
[[[-1, -1]],
[[-1, -1]],
[[-1, -1]]]]
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P4zYM_TXKhbBhSfHXIYdMsgEW6KLA9tDjQraZWK0sGZKcnemvL2g7mUln57AL1BBkzIh8JB-fxagQ9MUi7lj-xPLjRk2xd34XviOqbtO47mUXMURo3TDoyOQeWP5UlSjrVrL8yETVxzgGJvdMnJg4XXTspyZt3cDEyZjr7ZWM3v2FbWTitEKJ0wpT121dcFHJrFSVKM5dzYuqKOtz2VZt1fGMiZple1pCMiHhiKH1eozaWYo7H_3Zo4UpaHsBVmTRBZW2KkRWZBAdtM5e0UdQENEG58GdIb6MONvO_2HykKbps-ZMfiInJiqdYsrEAXjS6AiNcwaVhasyEwYmasJV8F136EHbiBf0C2aY2h5UeI8txQJOoLFHoATBjegVlQIj-rPzw-xITUnwmfypyiIDr2JPEXpl4R_07vU0hX0ABR7DZOYO7R-ThegnpII8jh4D2ogd5cdBW9CcStEBXiN22FFtyXIuxVsusufT-jBRpw9d-SPiGMjxK47edVOL9-YsFmT0RVs9KANffvv8FUbvLl4NhE8aSwejPfX67lZk68r2AOfJtiltMHp9VRGBbbPRaxu_4ODx_FmKGWhlnIn9jfFZPm8B2DYblLZMVFQ8K5_mcwAm8gyYPAITYpGQsyEyIW6W8sDKp0UBs12HNiCTB2KYyU9A7N8zEM_ymT-LVVPl8WawgiX09wfG93T4HOYu51uGe3hb6qPvx9ALG3fsBZDgZ8t7AP5BGbM7NfhHHC-orTLmh21Zwy0kPmb_0Kgl9YUhwvQYJ29ndGIw26_7G2XcxUX6OrhhULZbJfRgderdgEycvjv_d0dC---91EzadPQmZZxIjIkbI9ylCQn1IYkuMdoqc0lGPaLRFuH1RHkde4AkjMoHfdboievyACw_wC-n4Sdr0UOCQLKFBG30L8notI3J7bM_Xp3uIAm98tglRjeByeNPhDO6WXaK-G2J-G2K2oQ0uPff4wPrv09xnOIPSKeZsq6E0_1BT8JpcNDsmCkB-HWDV5v_PU7-TnfZftPtZFfLWm1wx8tc5NW2lHzT7zgq2bXblpdNWW_LbVPLoqzymmfnjNeN2uidyESelTznMstFkZZVU3TnLT-XjRRCNGyb4aC0SaldqfOXjQ5hwh3fVtW22BjVoAnz0BZiuTcFjW-_m9vbTJfAtpnRIYZXhKijmQc93b4sP8LTOibmAaFt67zHNpqXZTItM-Cq1buJevZuAM3JQkuxmbzZ_fSvgLmcwMRprei6E_8GAAD__3l2ez0">