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

            Bug ID: 111003
           Summary: [14 Regression] Dead Code Elimination Regression at
                    -O3 since r14-2161-g237e83e2158
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: scherrer.sv at gmail dot com
  Target Milestone: ---

static int c, d, e, f;
static short g;
static int *h = &c;
void foo(void);
short(a)();
static unsigned b(unsigned char j, int l) { return j > l ? j : j << l; }
static int *i();
static void k(int j, unsigned char l) {
  i();
  g = f;
  f = g;
  for (; g;) {
    int m;
    d = a();
    for (; d;) {
      if (l)
        if (!(j >= -639457069 && j <= -639457069))
          if (m)
            foo();
      m = (10 != (l ^ b(j, 6))) < (0 > e);
    }
  }
}
static int *i() {
  for (; e; e = a(e, 6))
    ;
  return h;
}
int main() { k(c, c); }

gcc-8441841a1b9 (trunk) -O3 cannot eliminate the call to foo but
gcc-releases/gcc-13.1.0 -O3 can.
-----------------------------------------------------------------------
gcc-8441841a1b985d68245954af1ff023db121b0635 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB3:
        .cfi_startproc
        pushq   %r13
        .cfi_def_cfa_offset 16
        .cfi_offset 13, -16
        pushq   %r12
        .cfi_def_cfa_offset 24
        .cfi_offset 12, -24
        pushq   %rbp
        .cfi_def_cfa_offset 32
        .cfi_offset 6, -32
        pushq   %rbx
        .cfi_def_cfa_offset 40
        .cfi_offset 3, -40
        subq    $8, %rsp
        .cfi_def_cfa_offset 48
        movl    e(%rip), %edi
        movl    c(%rip), %ebx
        testl   %edi, %edi
        je      .L5
        .p2align 4,,10
        .p2align 3
.L2:
        movl    $6, %esi
        xorl    %eax, %eax
        call    a
        movswl  %ax, %edi
        movl    %edi, e(%rip)
        testl   %edi, %edi
        jne     .L2
.L5:
        movl    f(%rip), %eax
        movswl  %ax, %edx
        movw    %ax, g(%rip)
        movl    %edx, f(%rip)
        testw   %ax, %ax
        je      .L36
        movzbl  %bl, %ebp
        testb   %bl, %bl
        je      .L39
        movl    %ebp, %eax
        sall    $6, %eax
        xorl    %ebp, %eax
        cmpl    $10, %eax
        setne   %r12b
        .p2align 4,,10
        .p2align 3
.L18:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L14
        cmpl    $-639457069, %ebx
        jne     .L17
.L19:
        jmp     .L19
        .p2align 4,,10
        .p2align 3
.L16:
        cmpl    $6, %ebp
        jg      .L20
        movl    e(%rip), %eax
        xorl    %r13d, %r13d
        shrl    $31, %eax
        cmpb    %al, %r12b
        setb    %r13b
        .p2align 4,,10
        .p2align 3
.L17:
        testl   %r13d, %r13d
        je      .L16
        call    foo
        movl    e(%rip), %eax
        shrl    $31, %eax
        cmpl    $6, %ebp
        setg    %dl
        xorl    %r13d, %r13d
        orl     %r12d, %edx
        cmpb    %al, %dl
        movl    d(%rip), %eax
        setb    %r13b
        testl   %eax, %eax
        jne     .L17
.L14:
        cmpw    $0, g(%rip)
        jne     .L18
.L36:
        addq    $8, %rsp
        .cfi_remember_state
        .cfi_def_cfa_offset 40
        xorl    %eax, %eax
        popq    %rbx
        .cfi_def_cfa_offset 32
        popq    %rbp
        .cfi_def_cfa_offset 24
        popq    %r12
        .cfi_def_cfa_offset 16
        popq    %r13
        .cfi_def_cfa_offset 8
        ret
.L39:
        .cfi_restore_state
        cmpl    $6, %ebp
        jg      .L7
        .p2align 4,,10
        .p2align 3
.L10:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L8
.L9:
        jmp     .L9
        .p2align 4,,10
        .p2align 3
.L12:
        cmpw    $0, g(%rip)
        je      .L36
.L7:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L12
.L13:
        jmp     .L13
        .p2align 4,,10
        .p2align 3
.L8:
        cmpw    $0, g(%rip)
        jne     .L10
        jmp     .L36
        .p2align 4,,10
        .p2align 3
.L20:
        cmpl    $-639457069, %ebx
        jne     .L20
        jmp     .L19
---------- END OUTPUT ---------

-----------------------------------------------------------------------
gcc-2b98cc24d6af0432a74f6dad1c722ce21c1f7458 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB3:
        .cfi_startproc
        movl    e(%rip), %edi
        pushq   %rbx
        .cfi_def_cfa_offset 16
        .cfi_offset 3, -16
        movl    c(%rip), %ebx
        testl   %edi, %edi
        je      .L5
        .p2align 4,,10
        .p2align 3
.L2:
        movl    $6, %esi
        xorl    %eax, %eax
        call    a
        movswl  %ax, %edi
        movl    %edi, e(%rip)
        testl   %edi, %edi
        jne     .L2
.L5:
        movl    f(%rip), %eax
        movswl  %ax, %edx
        movw    %ax, g(%rip)
        movl    %edx, f(%rip)
        testw   %ax, %ax
        je      .L37
        movzbl  %bl, %eax
        cmpl    $6, %eax
        jg      .L6
        testb   %bl, %bl
        jne     .L7
        .p2align 4,,10
        .p2align 3
.L10:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L8
.L9:
        jmp     .L9
        .p2align 4,,10
        .p2align 3
.L18:
        cmpw    $0, g(%rip)
        je      .L37
.L6:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L18
        cmpl    $-639457069, %ebx
        je      .L39
.L19:
        testl   %eax, %eax
        je      .L18
        cmpl    $-639457069, %ebx
        jne     .L19
.L39:
        jmp     .L39
        .p2align 4,,10
        .p2align 3
.L8:
        cmpw    $0, g(%rip)
        jne     .L10
.L37:
        xorl    %eax, %eax
        popq    %rbx
        .cfi_remember_state
        .cfi_def_cfa_offset 8
        ret
.L7:
        .cfi_restore_state
        cmpl    $-639457069, %ebx
        je      .L15
        .p2align 4,,10
        .p2align 3
.L12:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L16
.L17:
        jmp     .L17
        .p2align 4,,10
        .p2align 3
.L13:
        cmpw    $0, g(%rip)
        je      .L37
.L15:
        xorl    %eax, %eax
        call    a
        cwtl
        movl    %eax, d(%rip)
        testl   %eax, %eax
        je      .L13
.L14:
        jmp     .L14
        .p2align 4,,10
        .p2align 3
.L16:
        cmpw    $0, g(%rip)
        jne     .L12
        jmp     .L37
---------- END OUTPUT ---------

-----------------------------------------------------------------------
Bisects to r14-2161-g237e83e2158
CC to include: rguent...@suse.de

Reply via email to