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.)

Reply via email to