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

            Bug ID: 111012
           Summary: [14 Regression] Dead Code Elimination Regression at
                    -O3 since r14-573-g69f1a8af45d
           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 b, c;
static char d;
static short e = -1L;
static int *j = &c;
void foo(void);
void bar150_(void);
void bar173_(void);
static char(a)(char k, char l) { return k + l; }
static void g(unsigned k, int l) {
  if (l)
    if (!k)
      foo();
  if (k)
    bar150_();
}
static const unsigned char h();
static char i(int k) {
  if (k)
    bar173_();
  c <= 0 >= b;
  if (k)
    return c;
  return c;
}
static void f(char k, unsigned) {
  char m = h(8 != c);
  g(m && 8, k);
}
static const unsigned char h(int k) {
  d = i(c);
  *j = a(e, d < k < k && c) ^ k;
  b = 0;
  return c;
}
int main() { f(c, b); }

gcc-9ec5d6de735 (trunk) -O3 cannot eliminate the call to foo but
gcc-releases/gcc-13.1.0 -O3 can.
-----------------------------------------------------------------------
gcc-9ec5d6de7355c15b3811150d1581dab5bd489966 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB5:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        pushq   %rbx
        .cfi_def_cfa_offset 24
        .cfi_offset 3, -24
        subq    $8, %rsp
        .cfi_def_cfa_offset 32
        movl    c(%rip), %ebx
        cmpl    $8, %ebx
        setne   %bpl
        testl   %ebx, %ebx
        jne     .L9
        movl    $-2, c(%rip)
        xorl    %eax, %eax
        movl    %eax, b(%rip)
.L4:
        call    bar150_
.L6:
        addq    $8, %rsp
        .cfi_remember_state
        .cfi_def_cfa_offset 24
        xorl    %eax, %eax
        popq    %rbx
        .cfi_def_cfa_offset 16
        popq    %rbp
        .cfi_def_cfa_offset 8
        ret
        .p2align 4,,10
        .p2align 3
.L9:
        .cfi_restore_state
        call    bar173_
        movl    c(%rip), %edx
        movzbl  %bpl, %ebp
        movl    $0, b(%rip)
        movsbl  %dl, %eax
        cmpl    %eax, %ebp
        setg    %al
        movzbl  %al, %eax
        cmpl    %eax, %ebp
        setg    %al
        testl   %edx, %edx
        setne   %dl
        andl    %edx, %eax
        subl    $1, %eax
        movsbl  %al, %eax
        xorl    %ebp, %eax
        movl    %eax, c(%rip)
        testb   %bl, %bl
        je      .L3
        testb   %al, %al
        jne     .L4
        call    foo
        jmp     .L6
.L3:
        testb   %al, %al
        je      .L6
        jmp     .L4
---------- END OUTPUT ---------

-----------------------------------------------------------------------
gcc-2b98cc24d6af0432a74f6dad1c722ce21c1f7458 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB5:
        .cfi_startproc
        movl    c(%rip), %eax
        pushq   %rbx
        .cfi_def_cfa_offset 16
        .cfi_offset 3, -16
        xorl    %ebx, %ebx
        cmpl    $8, %eax
        setne   %bl
        testl   %eax, %eax
        jne     .L10
.L2:
        cmpl    %eax, %ebx
        setg    %al
        movzbl  %al, %eax
        cmpl    %eax, %ebx
        jg      .L3
        notl    %ebx
.L4:
        movl    %ebx, c(%rip)
        movl    $0, b(%rip)
        call    bar150_
        xorl    %eax, %eax
        popq    %rbx
        .cfi_remember_state
        .cfi_def_cfa_offset 8
        ret
.L3:
        .cfi_restore_state
        cmpl    $1, c(%rip)
        sbbb    %bl, %bl
        xorl    $1, %ebx
        movsbl  %bl, %ebx
        jmp     .L4
.L10:
        call    bar173_
        movsbl  c(%rip), %eax
        jmp     .L2
---------- END OUTPUT ---------

-----------------------------------------------------------------------
Bisects to r14-573-g69f1a8af45d

Reply via email to