https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113869
Bug ID: 113869 Summary: V4HF->V4SF pattern seems to be missing Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Target: aarch64 Take: ``` void f( _Float16 * __restrict a, float * __restrict b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; b+=4;a+=4; #if 0 b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; #endif } ``` The pattern that converts V4HF to V4SF seems be to missing and we don't SLP the above. We able to handle V8HF to V8SF which does: ``` fcvtl v30.4s, v31.4h fcvtl2 v31.4s, v31.8h ``` But the first fcvtl is exactly what we want for V4HF->V4SF.