https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110503
Bug ID: 110503
Summary: [13/14 Regression] Dead Code Elimination Regression at
-O3 since r13-322-g7f04b0d786e
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/h3G76EEW5
Given the following code:
void foo(void);
static int f = 10, g, h;
static int *i = &g, *j = &f, *k = &h;
static char(a)(int b) {
if (!(((b) >= 1) && ((b) <= 3))) {
__builtin_unreachable();
}
return 0;
}
static char(c)(char d, char e) { return d % e; }
static void l() {
char m, n;
unsigned o;
int *p = &g;
o = -19;
for (; o > 22; o = o + 8) {
int *q = &g;
g = 30;
unsigned char d = 60, e = o;
m = d / e;
if ((0 || *q) & m == 0)
;
else {
foo();
n = c(0 != p, *p);
a(n);
*q = 0;
}
}
*i = a(3);
*k = 0 != *j;
}
int main() {
l();
a(h);
}
gcc-trunk -O3 does not eliminate the call to foo:
main:
pushq %rbx
movl $-19, %ebx
jmp .L5
.p2align 4,,10
.p2align 3
.L8:
call foo
addl $8, %ebx
.L5:
movl $30, g(%rip)
cmpb $60, %bl
jbe .L8
addl $8, %ebx
cmpl $5, %ebx
jne .L5
movl f(%rip), %edx
xorl %eax, %eax
popq %rbx
movl $0, g(%rip)
testl %edx, %edx
setne %al
movl %eax, h(%rip)
xorl %eax, %eax
ret
gcc-12.3.0 -O3 eliminates the call to foo:
main:
movl f(%rip), %edx
xorl %eax, %eax
movl $0, g(%rip)
testl %edx, %edx
setne %al
movl %eax, h(%rip)
xorl %eax, %eax
ret
Bisects to r13-322-g7f04b0d786e