https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99639

            Bug ID: 99639
           Summary: Duplicated constant in V2SI/V4SI
           Product: gcc
           Version: 11.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: ---

Take C++ code:
void  foo(int (&arr)[42])
{
    for (unsigned i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
        arr[i] = 43;
}
---- CUT ----
Current we produce:
foo(int (&) [42]):
        movi    v0.4s, 0x2b
        movi    v1.2s, 0x2b
        stp     q0, q0, [x0]
        stp     q0, q0, [x0, 32]
        stp     q0, q0, [x0, 64]
        stp     q0, q0, [x0, 96]
        stp     q0, q0, [x0, 128]
        str     d1, [x0, 160]
        ret
----- CUT ----
But d1 is the same as q0 really.  And we don't need to have it.

Reply via email to