https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102540
Bug ID: 102540 Summary: Dead Code Elimination Regression at -O3 (trunk vs 11.2.0) Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: theodoridisgr at gmail dot com Target Milestone: --- cat test.c static long a; static unsigned b; void foo(void); int main() { long c, e; c = b = a; e = c ? 2 / (c + 1) : 0; if (e && !b) foo(); a = 0; } 11.2.0 at -O3 can eliminate the call to foo but trunk at -O3 cannot: gcc-11 -v Target: x86_64-pc-linux-gnu Configured with: ../configure --disable-multilib --disable-bootstrap --enable-languages=c,c++ Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 11.2.0 (GCC) gcc-11 test.c -S -O3 cat test.s .file "test.c" .text .section .text.startup,"ax",@progbits .p2align 4 .globl main .type main, @function main: .LFB0: .cfi_startproc movq $0, a(%rip) xorl %eax, %eax ret .cfi_endproc .LFE0: .size main, .-main .local a .comm a,8,8 .ident "GCC: (GNU) 11.2.0" .section .note.GNU-stack,"",@progbits gcc-trunk -v Target: x86_64-pc-linux-gnu Configured with: ../configure --disable-multilib --disable-bootstrap --enable-languages=c,c++ Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.0.0 20210930 (experimental) (GCC) gcc-trunk test.c -S -O3 cat test.s .file "test.c" .text .section .text.startup,"ax",@progbits .p2align 4 .globl main .type main, @function main: .LFB0: .cfi_startproc movq a(%rip), %rcx movq %rcx, %rsi andl $4294967295, %esi je .L13 movl $2, %eax addq $1, %rsi cqto idivq %rsi testb $1, %al je .L13 testl %ecx, %ecx je .L17 .L13: movq $0, a(%rip) xorl %eax, %eax ret .L17: pushq %rax .cfi_def_cfa_offset 16 call foo xorl %edx, %edx xorl %eax, %eax movq %rdx, a(%rip) popq %rcx .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE0: .size main, .-main .local a .comm a,8,8 .ident "GCC: (GNU) 12.0.0 20210930 (experimental)" .section .note.GNU-stack,"",@progbits