<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/127237>127237</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] LLVM 20 regression when generating NEON instructions for ARMv9-A with SVE disabled
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ptosi
      </td>
    </tr>
</table>

<pre>
    Hi,

we have noticed a regression between Clang v19.0.1 and Clang v20.0.0 when compiling code targeting NEON for ARMv9-A with SVE disabled.

The following:
```
#include <arm_neon.h>

uint16x8_t vec_fma(uint16x8_t a, uint16x8_t b, uint16_t c)
{
        return vmlaq_n_u16(a, b, c);
}
```
compiles with
```
clang -target aarch64-linux-gnu -march=armv9.2-a -O2 -Xclang -target-feature -Xclang -sve -c "neon.c"
```
to
```
0000000000000000 <vec_fma>:
   0:   4e020c02        dup     v2.8h, w0
   4:   4e619440 mla     v0.8h, v2.8h, v1.8h
   8:   d65f03c0        ret
```
with (Android build)
```
Android (12833971, +pgo, +bolt, +lto, +mlgo, based on r536225) clang version 19.0.1 (https://android.googlesource.com/toolchain/llvm-project b3a530ec6537146650e42be89f1089e9a3588460)
```
However, the same invocation fails:
```
neon.c:4:9: error: always_inline function 'vmlaq_n_u16' requires target feature 'sve', but would be inlined into function 'vec_fma' that is compiled without support for 'sve'
    4 |         return vmlaq_n_u16(a, b, c);
      |                ^
```
with
```
Android (13016439, +pgo, +bolt, +lto, +mlgo, based on r547379) clang version 20.0.0 (https://android.googlesource.com/toolchain/llvm-project b718bcaf8c198c82f3021447d943401e3ab5bd54)
```
instead of generating the NEON instructions, as expected.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVUuP46gT_zTkUoqFwc9DDumX5jAP6f9fjfYWYVy2WRHIAHZ6vv0K4myn06uRdrXIkqGoKqp-9RLeq9Eg7kj5QMqnjZjDZN3uFKxXm872P3efFGGPhO4J3Z8RJrEgGBuUxB4EOBwdeq-sgQ7DGdHAoxZmhCVvM5rlIEx_pTCa0YzCeUID0h5PSiszgrQ9QhBuxBCPX5-_fYXBOtj_78vSbvdwVmGC_39_hl550Wnss4stv00Ig9XanpUZCY8kUtH1o3vCuDJSzz0C4Y_CHQ8Grckmwp8v8rMyIa9em0OABeVhOArCmhuiIOwRbs7d2_kQQBLWRj31A6F7WJfDMDsDy1GLHwdzmPOKsCbpScJJhj8ksac7cy94oE_u3t8l-LYXjEAIJ6eq2Gpl5tftaGbYHiOJ8Cfhjkubsa2A7TcG29_fCW4HFGF2-Eb3C8JWAmEsQSMJY3cvB3tHoHcrYntFjz9fogAAlPD4K5AyKim74tPPp_RfWNZMEZEzvfAXV_4qb4uCwlGLCyNdGf-SWPK4SULNRaivyoFySW-CcGd0yiDCmr3pnVU9dLPS_Rq_G7brNWFNzhrO2zqPLxL2cBrtuuusDutWhyvxqC_3nfDYgzXgSl4xVhLWwgXqBV0qkbUmCGumEE4-4sVeCHsRl6ez0dpRo7ezk5hJeyTsJVir5SSUIexF6-W4PTn7B8oAHRclpyirktd5UVUlxYJ12LRDTpsWW8HLpikq-tHRT_aMC7pocpgQvDgiKLNYKUI0chBK-48FteYI38dgtRF7dM66uBH6LH76gzJaGYRhNjIpIqx-Vwo1OPwxK4d-rXe4piRhtV-QsDrBOAc421n30EW7os4elAn2veZrzdYQJhFA-bWnYJ9qyM4B_Hw6WRdSO3l74lKvBZD6Ef5x5V7Yb0XXRcrnv0m7X6QYp3lV8PZfp1hR87r9mGJrk_1vUqzOm06KoZF528iGDZyyvCjqvi14QXPkoiu7viw-ppgyPqDowQ4wokEnUm-P2Zb6e7x2c4qlj24JD_h6Qhmwzzb9jvctb8UGd3nN27Ks67LcTLuyzKu6Kfkgyk4wTjmXOQ7Ylr1s-4ZXG7VjlJXRxLxhbV5mokLRdEUtGpRD1wpSUDwKpbPoZWbduFHez7jLWc14vdGiQ-3TIIwt8QzpNnbF8mnjdgmabh49KahWPvg3NUEFnSbofp-aMymf4PPn71-A0dsJmSbfDR4fsPj14NvMTu_eR3VUYZq7NY7RnLsQEvaSnPCEvaxeLjv2ZwAAAP__ysFaog">