http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45221

Navin Kumar <navin.kumar at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|4.5.0                       |4.6.0

--- Comment #11 from Navin Kumar <navin.kumar at gmail dot com> 2011-05-17 
15:18:06 UTC ---
Bumping this to 4.6.0 since the problem still exists.

As a review (since this has been open and not updated for a while), the problem
is very slow performance when dealing with C++'s multiple-inheritance (even
under -O3).  In the example below, the 'simple' fooA function generates slow
code, whereas the equivalent code written with more steps in fooB generates
optimal code.

Base2* fooA(Derived* x)
{
    Base2& y = *x;
    return &y;
}
Base2* fooB(Derived* x) {
    Derived& x2 = *x;
    Base2& y = x2;
    return &y;
}

Both fooA and fooB are funtionally identical.

Yet the assembly generated for fooA is:
    leaq    4(%rdi), %rdx
    xorl    %eax, %eax
    testq   %rdi, %rdi
    cmovne  %rdx, %rax
    ret

and the assembly generated for fooB is:
    leaq    4(%rdi), %rax
    ret

Reply via email to