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

            Bug ID: 114556
           Summary: weird loop unrolling when there's attribute aligned in
                    side the loop
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liuhongt at gcc dot gnu.org
  Target Milestone: ---

v32qi
zzzzz (void* pa, void* pb, void* pc)
{
    v32qi __attribute__((aligned(64))) a;
    v32qi __attribute__((aligned(64))) b;
    v32qi __attribute__((aligned(64))) c;
    __builtin_memcpy (&a, pa, sizeof (a));
    __builtin_memcpy (&b, pb, sizeof (a));
    __builtin_memcpy (&c, pc, sizeof (a));
    #pragma GCC unroll 8
    for (int i = 0; i != 2048; i++)
      a += b;
      return a;
}

-O2 -mavx2, we have 

zzzzz:
        vmovdqu (%rsi), %ymm1
        vpaddb  (%rdi), %ymm1, %ymm0
        movl    $2041, %eax
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        jmp     .L2
.L3:
        vpaddb  %ymm0, %ymm1, %ymm0
        subl    $8, %eax
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
        vpaddb  %ymm0, %ymm1, %ymm0
.L2:
        vpaddb  %ymm0, %ymm1, %ymm0
        cmpl    $1, %eax
        jne     .L3
        ret

But shouldn't it better with

zzzzz:
        vmovdqu (%rsi), %ymm1
        vmovdqu (%rdi), %ymm0
        movl    $2048, %eax
.L2:
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        vpaddb  %ymm1, %ymm0, %ymm0
        subl    $8, %eax
        jne     .L2
        ret

Reply via email to