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.

Reply via email to