Skip to content

Dead Code Elimination Regression at -O3 (trunk vs 13.0.0) #51934

@llvmbot

Description

@llvmbot
Bugzilla Link 52592
Version trunk
OS Linux
Reporter LLVM Bugzilla Contributor
CC @aeubanks

Extended Description

cat case.c
void bar(void);
void foo(void);

static char b = 1;
static int c;

static int d(int e) { return e; }

int main() {
b = 0;
bar();
c = d(2048);
if (!((((0 == c || b) && 1) ^ 2)% 5))
{
d(0);
foo();
}
}

trunk cannot eliminate the call to foo but 13.0.0 can:

clang-13.0.0 -O3 -S -o /dev/stdout case.c
main: # @​main
.cfi_startproc

%bb.0:

pushq	%rax
.cfi_def_cfa_offset 16
callq	bar
xorl	%eax, %eax
popq	%rcx
.cfi_def_cfa_offset 8
retq

.Lfunc_end0:

clang-trunk -O3 -S -o /dev/stdout case.c
main: # @​main
.cfi_startproc

%bb.0:

pushq	%rax
.cfi_def_cfa_offset 16
movb	$1, b(%rip)
callq	bar
movzbl	b(%rip), %eax
xorl	$1, %eax
orl	$2, %eax
imull	$-858993459, %eax, %eax         # imm = 0xCCCCCCCD
cmpl	$858993459, %eax                # imm = 0x33333333
jbe	.LBB0_1

%bb.2:

xorl	%eax, %eax
popq	%rcx
.cfi_def_cfa_offset 8
retq

.LBB0_1:
.cfi_def_cfa_offset 16
callq foo
xorl %eax, %eax
popq %rcx
.cfi_def_cfa_offset 8
retq
.Lfunc_end0:

clang-trunk -v
clang version 14.0.0 (https://github.com/llvm/llvm-project 38ed1db)
Target: x86_64-unknown-linux-gnu
Thread model: posix

Started with e7249e4

Metadata

Metadata

Assignees

Labels

bugzillaIssues migrated from bugzilla

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions