[PATCH] D54604: Automatic variable initialization
Alexander Potapenko via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 29 08:13:45 PST 2019
glider added a comment.
Not sure if a similar problem was mentioned already or not, but the following program:
void alloc_sock(int *err);
int try_send();
int send(int len) {
int err;
if (len) {
err = -1;
alloc_sock(&err);
err = try_send();
}
return -1;
}
produces a redundant store of `0xaaaaaaaa` to `err`:
0000000000000000 <send>:
void alloc_sock(int *err);
int try_send();
int send(int len) {
0: 50 push %rax
int err;
1: c7 44 24 04 aa aa aa movl $0xaaaaaaaa,0x4(%rsp)
8: aa
if (len) {
9: 85 ff test %edi,%edi
b: 74 1d je 2a <send+0x2a>
err = -1;
d: c7 44 24 04 ff ff ff movl $0xffffffff,0x4(%rsp)
14: ff
15: 48 8d 7c 24 04 lea 0x4(%rsp),%rdi
alloc_sock(&err);
1a: e8 00 00 00 00 callq 1f <send+0x1f>
1b: R_X86_64_PLT32 alloc_sock-0x4
err = try_send();
1f: 31 c0 xor %eax,%eax
21: e8 00 00 00 00 callq 26 <send+0x26>
22: R_X86_64_PLT32 try_send-0x4
26: 89 44 24 04 mov %eax,0x4(%rsp)
}
return -1;
2a: b8 ff ff ff ff mov $0xffffffff,%eax
2f: 59 pop %rcx
30: c3 retq
Not sure whether this isn't a bug in DSE though.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54604/new/
https://reviews.llvm.org/D54604
More information about the cfe-commits
mailing list