https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110177
Bug ID: 110177 Summary: [12/13/14 Regression] Missed Dead Code Elimination when using __builtin_unreachable since r12-2305-g398572c1544 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/d6zscbYYh void foo(void); static int c, *d = &c, *f, *i; static unsigned e; static int **g = &d, **j = &f,***h = &g; static short k; void __assert_fail() __attribute__((__noreturn__)); static short(a)(short b) { if (b != 0) { __builtin_unreachable(); } return 0; } int main() { c = 0; for (; c <= 20; c = c + 9) { k = c << e; c &&a(c >> k); i = **h; *j = i; if (f) ; else __assert_fail(); } e = 0; if (f); else foo(); } gcc-11.4 -Os generates: main: movq g(%rip), %rax movl $0, c(%rip) movq (%rax), %rdx movq %rdx, f(%rip) testq %rdx, %rdx je .L2 movq (%rax), %rax movq %rax, f(%rip) testq %rax, %rax jne .L8 movl $9, c(%rip) .L2: pushq %rax xorl %eax, %eax call __assert_fail .L8: movl $27, c(%rip) xorl %eax, %eax movl $0, e(%rip) ret gcc-trunk -Os generates: main: xorl %edi, %edi pushq %rsi movq g(%rip), %r8 xorl %eax, %eax movl %edi, c(%rip) movl e(%rip), %edi xorl %edx, %edx .L2: movl %eax, %esi cmpl $27, %eax je .L23 testl %eax, %eax je .L3 movl %edi, %ecx movl %eax, %r9d movl %eax, %r10d sall %cl, %r9d movl %r9d, %ecx sarl %cl, %r10d testl %r10d, %r10d je .L3 movl %eax, c(%rip) .L3: movq (%r8), %rcx addl $9, %eax movq %rcx, f(%rip) testq %rcx, %rcx jne .L8 testb %dl, %dl je .L4 movl %esi, c(%rip) .L4: xorl %eax, %eax call __assert_fail .L8: movb $1, %dl jmp .L2 .L23: testb %dl, %dl je .L6 movl $27, c(%rip) .L6: xorl %ecx, %ecx cmpq $0, f(%rip) movl %ecx, e(%rip) jne .L7 call foo .L7: xorl %eax, %eax popq %rdx ret Bisects to r12-2305-g398572c1544