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

Reply via email to