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

            Bug ID: 116972
           Summary: missed vectorization when an array of type 'long' is
                    initialized to 0
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: 652023330028 at smail dot nju.edu.cn
  Target Milestone: ---

Hello, we noticed that there seems to be a missing vectorization for the code
below. When 'arr' is of type 'int', it works as expected.

https://godbolt.org/z/drGx7WqP6

long arr [20];

void f() {
    for (int i = 0; i < 20; i += 1) 
    {
        arr [i] = 0;
    }
}

GCC -O3:
f():
        mov     ecx, 20
        xor     eax, eax
        mov     edi, OFFSET FLAT:arr
        rep stosq
        ret


Expected code (Clang):
f():
        xorps   xmm0, xmm0
        movaps  xmmword ptr [rip + arr+144], xmm0
        movaps  xmmword ptr [rip + arr+128], xmm0
        movaps  xmmword ptr [rip + arr+112], xmm0
        movaps  xmmword ptr [rip + arr+96], xmm0
        movaps  xmmword ptr [rip + arr+80], xmm0
        movaps  xmmword ptr [rip + arr+64], xmm0
        movaps  xmmword ptr [rip + arr+48], xmm0
        movaps  xmmword ptr [rip + arr+32], xmm0
        movaps  xmmword ptr [rip + arr+16], xmm0
        movaps  xmmword ptr [rip + arr], xmm0
        ret

Thank you very much for your time and effort! We look forward to hearing from
you.

Reply via email to