On Fri, 15 Apr 2011, Martin Jambor wrote: > Hi, > > ipa_analyze_virtual_call_uses contains code that was meant to deal > with situation where OBJ_TYPE_REF_OBJECT is a (number of) > COMPONENT_REFs on top of a dereferenced default definition SSA_NAME of > a parameter. > > The code is useless because that never happens in the IL, if an > ancestor object of a parameter is being used for a virtual call, the > object in the expression is always an SSA_NAME which is assigned the > proper value in a previous statement. > > Moreover, if it ever triggered, it might lead to wrong code because in > cases like this it is necessary also to store the offset within the > parameter into the indirect call graph edge information (like we do in > indirect inlining). > > The above is done in the next patch in the series. I've split this > part from it because I would like to commit it also to the 4.6 branch. > I have bootstrapped and tested this on x86-64-linux without any > problems. OK for trunk and the 4.6 branch?
Ok for both. Thanks, Richard. > Thanks, > > Martin > > > 2011-04-08 Martin Jambor <mjam...@suse.cz> > > * ipa-prop.c (ipa_analyze_virtual_call_uses): Remove handling > of ADR_EXPRs. > > > Index: src/gcc/ipa-prop.c > =================================================================== > --- src.orig/gcc/ipa-prop.c > +++ src/gcc/ipa-prop.c > @@ -1383,18 +1383,6 @@ ipa_analyze_virtual_call_uses (struct cg > if (!flag_devirtualize) > return; > > - if (TREE_CODE (obj) == ADDR_EXPR) > - { > - do > - { > - obj = TREE_OPERAND (obj, 0); > - } > - while (TREE_CODE (obj) == COMPONENT_REF); > - if (TREE_CODE (obj) != MEM_REF) > - return; > - obj = TREE_OPERAND (obj, 0); > - } > - > if (TREE_CODE (obj) != SSA_NAME > || !SSA_NAME_IS_DEFAULT_DEF (obj)) > return; > > -- Richard Guenther <rguent...@suse.de> Novell / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex