https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117033
            Bug ID: 117033
           Summary: GCC trunk emits larger code at -Oz compared to -O2
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dccitaliano at gmail dot com
  Target Milestone: ---

long patatino() {
    long x = 0;
    for (int i = 0; i < 5; ++i) {
        while (x < 37) {
            if (x % 4 == 0) {
                x += 4;
            }
        }
    }
    return x;
}

-Oz:

patatino():
        pushq   $5
        xorl    %eax, %eax
        popq    %rdx
.L5:
        cmpq    $36, %rax
        jg      .L7
        addq    $4, %rax
        jmp     .L5
.L7:
        decl    %edx
        jne     .L5
        ret


-O2:

patatino():
        movl    $40, %eax
        ret

https://godbolt.org/z/969sf9cfb

Believe this is a pass ordering problem -- might be that simplifying the loop
isn't always beneficial.

Reply via email to