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