This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/77647] New: Missed opportunity to use register value causes additional load
- From: "npiggin at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 19 Sep 2016 14:32:02 +0000
- Subject: [Bug tree-optimization/77647] New: Missed opportunity to use register value causes additional load
- Auto-submitted: auto-generated
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