<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">