<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62211>62211</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Reductions of `<N x i1>` vectors can lead to miscompilations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Sp00ph
</td>
</tr>
</table>
<pre>
This code leads to the miscompilation:
```ll
declare i1 @llvm.vector.reduce.or(<2 x i1>)
define i1 @bad(<2 x i32> %a) noinline {
%b = trunc <2 x i32> %a to <2 x i1>
%ret = call i1 @llvm.vector.reduce.or(<2 x i1> %b)
ret i1 %ret
}
define i32 @main() {
%a = call i1 @bad(<2 x i32> <i32 1, i32 2>)
%b = zext i1 %a to i32
ret i32 %b
}
```
Compiling this with `-O3` leads to the following assembly:
```asm
bad: // @bad
umaxp v0.2s, v1.2s, v1.2s
fmov w8, s0
and w0, w8, #0x1
ret
.LCPI1_0:
.word 1 // 0x1
.word 2 // 0x2
main: // @main
str x30, [sp, #-16]! // 8-byte Folded Spill
adrp x8, .LCPI1_0
ldr d1, [x8, :lo12:.LCPI1_0]
bl bad
and w0, w0, #0x1
ldr x30, [sp], #16 // 8-byte Folded Reload
ret
```
which when executed returns a 0 from `main`. After removing the `noinline`, a 1 is returned from `main` instead.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVV2PqzYQ_TXOyyjIH0DggYdsciNVqtrq3r5XBpvgyuDINkm2v76ygWTZ3atu0Ups8Jkzc87YY-6cOg9SVih7Qdlxw0ffGVv9uGB86Ta1Ea_Vn51y0BghQUsuHHgDvpPQK9eY_qI098oMiO0RPiK8Rzme_rSePgjZaG4lKAIoxVpf--QqG29sYqUYG5kYi2iB2IHCHRRB7Bui5cw1E7RqWOJrLt6gGUXsGyCacURLGIwadICi3csUCmGtBsSO4O04NPAxMMhZJX8GWuljaMO1_h_lx5wPDRBYQnDkm3Xtjp8JZDSk6LkaAiMt3-qAqdh35XzqBjsEJoLoIVLSt47ORJMl_8j7Ulq0IRA8ULHsUFEQ867qpcXTz0PcBWo4gw875aZ8ByjH298ZyvF6z7RGa3MLUO6c7Gv9-nHfcNdPX4I4Fmv5rwfRE6KnxZBJwtjz-wUArjihLnhxJat_HkLD0_bmGt63IgAcXq_yQcANh5VpHVGG72SNefQ2-fXwxy_kL_wQtiCSm7ECAMhS7geOBUG_Jhff53bFHfMlp55GxZhVduct3FmUibIXd5mVbkmOsiOi5CdcxbZ-9RJORgsp4MdFLef-4Z6woQ9wj9497FlhtLDxLcicfgIjtteGUMSermbHdWSt4dnzN_2K3Zx6hn_WsyXrSnXQGuEk_1zid6nN-4zPk70-GrdONR3cOjmAvMtm9FIE7GgHBxwwtNb04azEbuQ4gX3rpQUre3OdDpQMy8tgC7z0ABwIKDcTSfGeBdTgvOQi2YiKiZKVfCMrkhekoLsdTTddlWa0wW2Wt2THm4IKVmJW0JynNcZlkdYbVVFMGU5JQVJKcZpgVmZ5IWqSNW1ayh1Ksey50kkciMaeN8q5UVY5pYRsNK-ldvFKoXSQN4iLiNJww9gqxGzr8ezCQFXOuyeLV17Hu2i_t02Xpyg7wvcwZ8Md48C0QSdih98e4zrHMM1jBw0f4rgJ02Z9O7nNaHXVeX9x4VzGtp6V78Y6aUyP6CkUML-2F2v-lo1H9BTLdoieoqx_AwAA__8sb-Uy">