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

            Bug ID: 120675
           Summary: Missed loop invariant code elimination from loop
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vekumar at gcc dot gnu.org
  Target Milestone: ---

For the below case GCC does not remove store of 3 from the loop. 

void test_licm(int * restrict a, int * restrict b, int n) {
    for (int i=0;i<n;i++) {
        b[0] = 3;
        a[i] = a[i] + b[i];
    }
}


-O3 

Assembly
--Snip--
.L3:
        movl    $3, (%rsi)
        movl    (%rsi,%rax), %ecx
        addl    %ecx, (%rdi,%rax)
        addq    $4, %rax
        cmpq    %rax, %rdx
        jne     .L3
--Snip--

ref: https://godbolt.org/z/rbhz9z6r1

Reply via email to