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

            Bug ID: 110942
           Summary: [14 Regression] Dead Code Elimination Regression at
                    -O3 since r14-1165-g257c2be7ff8
           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 short d;
static char e;
void bar49_(void);
void bar115_(void);
void bar42_(void);
void foo(void);
static short(a)(short f, short g) { return f + g; }
static int h() {
  short i = 0;
  char j;
  int k;
l:
  k = 0;
  if (i)
    bar42_();
  i = 0;
  for (; i != 8; i = a(i, 8)) {
    if (e)
      bar49_();
    if (0 >= i)
      c = 0;
    if (!k) {
      j = 6;
      for (; j >= 0; j--) {
        k = 0;
        for (; k <= 0; k++) {
          if (!(j >= 5))
            bar115_();
          for (; d; d = 0) {
            if (!j)
              foo();
            if (j)
              break;
          }
          if (i)
            break;
        }
        if (c)
          return j;
        c = 2;
        if (b)
          goto l;
      }
    }
  }
  return 0;
}
int main() { h(); }

gcc-25c4b1620eb (trunk) -O3 cannot eliminate the call to foo but
gcc-releases/gcc-13.1.0 -O3 can.
-----------------------------------------------------------------------
gcc-25c4b1620ebc10fceabd86a34fdbbaf8037e7e82 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB2:
        .cfi_startproc
        pushq   %rbx
        .cfi_def_cfa_offset 16
        .cfi_offset 3, -16
        xorl    %eax, %eax
        movl    $6, %ebx
.L2:
        movl    %eax, c(%rip)
        cmpb    $4, %bl
        jne     .L18
.L7:
        call    bar115_
        cmpw    $0, d(%rip)
        je      .L8
        testb   %bl, %bl
        jne     .L8
        call    foo
        movl    c(%rip), %edx
        xorl    %eax, %eax
        movw    %ax, d(%rip)
        testl   %edx, %edx
        jne     .L5
        movl    $2, c(%rip)
.L5:
        xorl    %eax, %eax
        popq    %rbx
        .cfi_remember_state
        .cfi_def_cfa_offset 8
        ret
.L18:
        .cfi_restore_state
        testl   %eax, %eax
        jne     .L5
        subl    $1, %ebx
        movl    $2, %eax
        jmp     .L2
.L8:
        cmpl    $0, c(%rip)
        jne     .L5
        movl    $2, c(%rip)
        subl    $1, %ebx
        cmpb    $-1, %bl
        jne     .L7
        jmp     .L5
---------- END OUTPUT ---------

-----------------------------------------------------------------------
gcc-2b98cc24d6af0432a74f6dad1c722ce21c1f7458 -O3 case.c -S -o case.s
--------- OUTPUT ---------
main:
.LFB2:
        .cfi_startproc
        movl    $2, c(%rip)
        xorl    %eax, %eax
        ret
---------- END OUTPUT ---------

-----------------------------------------------------------------------
Bisects to r14-1165-g257c2be7ff8

Reply via email to