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

            Bug ID: 110875
           Summary: [14 Regression] Dead Code Elimination Regression since
                    r14-2501-g285c9d042e9
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: theodort at inf dot ethz.ch
  Target Milestone: ---

https://godbolt.org/z/rjxT5PfzY

Given the following code:

void foo(void);
static int a, b;
static int *c = &a, *d;
static unsigned e;
static short f;
static unsigned g(unsigned char h, char i) { return h + i; }
int main() {
    d = &a;
    int *j = d;
    e = -27;
    for (; e > 18; e = g(e, 6)) {
        a = 0;
        for (; a != -3; a--) {
            if (0 != a ^ *j)
                for (; b; b++) f = -f;
            else if (*c) {
                foo();
                break;
            }
            if (!(((e) >= 235) && ((e) <= 4294967269))) {
                __builtin_unreachable();
            }
            b = 0;
        }
    }
}

gcc-trunk -O2 does not eliminate the call to foo:

main:
        subq    $8, %rsp
        movl    $-27, e(%rip)
        .p2align 4,,10
        .p2align 3
.L5:
        xorl    %eax, %eax
.L3:
        subl    $1, %eax
        cmpl    $-3, %eax
        je      .L2
        cmpl    $1, %eax
        jne     .L3
        movl    $1, a(%rip)
        movl    $0, b(%rip)
        call    foo
.L6:
        movzbl  e(%rip), %eax
        addl    $6, %eax
        movl    %eax, e(%rip)
        cmpl    $18, %eax
        jg      .L5
        xorl    %eax, %eax
        addq    $8, %rsp
        ret
        .p2align 4,,10
        .p2align 3
.L2:
        movl    $-3, a(%rip)
        movl    $0, b(%rip)
        jmp     .L6

gcc-13.2.0 -O2 eliminates the call to foo:

main:
        movl    $-27, e(%rip)
        movl    $-27, %esi
        .p2align 4,,10
        .p2align 3
.L9:
        movzwl  f(%rip), %r11d
        xorl    %ecx, %ecx
        xorl    %r10d, %r10d
        xorl    %edx, %edx
        movl    $0, a(%rip)
        movl    b(%rip), %eax
        leal    -235(%rsi), %r8d
        jmp     .L7
        .p2align 4,,10
        .p2align 3
.L2:
        cmpl    $-262, %r8d
        ja      .L28
        subl    $1, %edx
        xorl    %eax, %eax
        movl    $1, %ecx
        cmpl    $-3, %edx
        je      .L32
        movl    %edx, %r9d
.L7:
        xorl    %esi, %esi
        testl   %edx, %edx
        movl    %ecx, %edi
        setne   %sil
        cmpl    %edx, %esi
        je      .L2
        testl   %eax, %eax
        je      .L2
        testb   $1, %al
        je      .L3
        negl    %r11d
        addl    $1, %eax
        je      .L30
        .p2align 4,,10
        .p2align 3
.L3:
        addl    $2, %eax
        jne     .L3
.L30:
        movl    $1, %edi
        movl    $1, %r10d
        jmp     .L2
        .p2align 4,,10
        .p2align 3
.L32:
        movl    $-3, a(%rip)
        movl    $0, b(%rip)
        testb   %r10b, %r10b
        je      .L8
        movw    %r11w, f(%rip)
.L8:
        movzbl  e(%rip), %esi
        addl    $6, %esi
        movl    %esi, e(%rip)
        cmpl    $18, %esi
        jg      .L9
        xorl    %eax, %eax
        ret
        .section        .text.unlikely
        .type   main.cold, @function
main.cold:
.L28:
        testb   %cl, %cl
        je      .L5
        movl    %r9d, a(%rip)
.L5:
        testb   %dil, %dil
        je      .L6
        movl    %eax, b(%rip)
.L6:
        movw    %r11w, f(%rip)
        .section        .text.startup

Bisects to  r14-2501-g285c9d042e9

Reply via email to