[Bug tree-optimization/77647] New: Missed opportunity to use register value causes additional load
npiggin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Sep 19 14:32:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77647
Bug ID: 77647
Summary: Missed opportunity to use register value causes
additional load
Product: gcc
Version: 6.2.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: npiggin at gmail dot com
Target Milestone: ---
static inline long load(long *p)
{
long ret;
asm ("movq %1,%0\n\t" : "=r" (ret) : "m" (*p));
if (ret != *p)
__builtin_unreachable();
return ret;
}
long foo(long *mem)
{
long ret;
ret = load(mem);
return ret - *mem;
}
foo() compiles down to 'xorl %eax,%eax ; ret' which is great. Changing the
minus to plus gives
movq (%rdi),%rax
addq (%rdi),%rax
ret
More information about the Gcc-bugs
mailing list