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

            Bug ID: 88212
           Summary: IRA Register Coalescing not working for the testcase
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kugan at gcc dot gnu.org
  Target Milestone: ---

When compiling the following on aarch64 with -O2:
#include <arm_neon.h>
void g(int32_t *p, int32x2x2_t val, int x)
{
     vst2_lane_s32(p,val,0);
}

generates:
        .cfi_startproc
        mov     v2.8b, v0.8b
        mov     v3.8b, v1.8b
        st2     {v2.s - v3.s}[0], [x0]
        ret

clang produces:
        st2     { v0.s, v1.s }[0], [x0]
        ret

Essentially the problem is that access to part-registers doesn't get
coalesced, so IRA generates moves which aren't actually required.

Reply via email to