http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58195
Bug ID: 58195
Summary: Missed optimization opportunity when returning a
conditional
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: warp at iki dot fi
When compiling the following function:
int a(int input)
{
return input == 0 ? 0 : -input;
}
gcc is unable to see that the conditional and returning 0 can be optimized
away, producing:
movl %edi, %edx
xorl %eax, %eax
negl %edx
testl %edi, %edi
cmovne %edx, %eax
ret
For the record, I found out the above when I was testing what gcc would do with
this function:
int a(int input)
{
int value = 0;
for(int n = input; n != 0; ++n)
++value;
return value;
}
gcc is able to optimize that into the same asm code as above, but no further
(not even if the conditional is written explicitly, as written in the first
function above.)