https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116257
Bug ID: 116257
Summary: [12/13/14/15 Regression] vmlaq_lane_f32 no longer uses
fmla
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
Take:
```
#include <arm_neon.h>
float32x4_t f(float32x4_t x, float32x2_t vconstants0)
{
x = vmlaq_lane_f32(x, x, vconstants0, 0);
return x;
}
```
I would have expected this to produce:
```
f:
fmla v0.4s, v0.4s, v1.s[0]
ret
```
But starting in GCC 12, fmul/fadd is being produced:
```
f:
fmul v1.4s, v0.4s, v1.s[0]
fadd v0.4s, v0.4s, v1.4s
ret
```