https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102950
Bug ID: 102950
Summary: [11 Regression] Dead Code Elimination Regression at
-O3 (trunk&11.2.0 vs 10.3.0)
Product: gcc
Version: 12.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: ---
cat test.c
void foo(void);
static char a;
static short d(unsigned e) {
char b;
short c;
a = b = e;
if (b)
return 0;
if (1 >= e) {
c = e == 0;
if (c)
foo();
}
return 0;
}
int main() { d(a ^ 233); }
10.3.0 at -O3 can eliminate the call to foo but neither trunk nor 11.2.0 at -O3
can:
gcc-10 -O3 -S test.c -o /dev/stdout
main:
.LFB1:
.cfi_startproc
xorb $-23, a(%rip)
xorl %eax, %eax
ret
.cfi_endproc
gcc-11 -O3 -S test.c -o /dev/stdout
...
main:
.LFB1:
.cfi_startproc
movsbl a(%rip), %eax
xorb $-23, %al
movb %al, a(%rip)
cmpl $1, %eax
ja .L10
testb %al, %al
je .L14
.L10:
xorl %eax, %eax
ret
.L14:
pushq %rax
.cfi_def_cfa_offset 16
call foo
xorl %eax, %eax
popq %rdx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
gcc-trunk -O3 -S test.c -o /dev/stdout
main:
.LFB1:
.cfi_startproc
movsbl a(%rip), %eax
xorb $-23, %al
movb %al, a(%rip)
cmpl $1, %eax
ja .L10
testb %al, %al
je .L14
.L10:
xorl %eax, %eax
ret
.L14:
pushq %rax
.cfi_def_cfa_offset 16
call foo
xorl %eax, %eax
popq %rdx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
gcc-trunk -v
Using built-in specs.
Target: x86_64-pc-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.0 20211022 (experimental) (GCC)
Introduced with
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=fcae5121154d1c3382b056bcc2c563cedac28e74