http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35545
Jan Hubicka <hubicka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2013-12-17
CC| |hubicka at gcc dot gnu.org,
| |mjambor at suse dot cz,
| |rguenther at suse dot de
Ever confirmed|0 |1
--- Comment #2 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Couple years later we finally devirtualize here:
<bb 5>:
ap_8 = operator new (16);
ap_8->i = 0;
ap_8->_vptr.A = &MEM[(void *)&_ZTV1A + 16B];
_19 = foo;
PROF_26 = [obj_type_ref] OBJ_TYPE_REF(_19;(struct A)ap_8->0);
if (PROF_26 == foo)
goto <bb 8>;
else
goto <bb 7>;
<bb 6>:
ap_13 = operator new (16);
MEM[(struct B *)ap_13].D.2237.i = 0;
MEM[(struct B *)ap_13].b = 0;
MEM[(struct B *)ap_13].D.2237._vptr.A = &MEM[(void *)&_ZTV1B + 16B];
_1 = foo;
PROF_30 = [obj_type_ref] OBJ_TYPE_REF(_1;(struct A)ap_13->0);
if (PROF_30 == foo)
goto <bb 8>;
else
goto <bb 7>;
however the code ends up super sily after tracer.
for some reason we do not manage to fold away the virtual table lookup.
Why?