This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR64664


> Hello.
> 
> Following patch correctly handles filtered removed items, where we forgot
> to check that a cgraph node is deleted or not. Apart from that, logic
> in the function was rewritten and is much more understandable what's going on.
> 
> Tested on x86_64-linux-pc.
> Ready for installation?
> 
> Thanks,
> Martin

> >From 3f1d52424d01e7a76b127bf91bdaa04077371d30 Mon Sep 17 00:00:00 2001
> From: mliska <mliska@suse.cz>
> Date: Mon, 19 Jan 2015 14:28:50 +0100
> Subject: [PATCH] Fix PR64664.
> 
> gcc/ChangeLog:
> 
> 2015-01-19  Martin Liska  <mliska@suse.cz>
> 
> 	* ipa-icf.c (sem_item_optimizer::filter_removed_items):
> 	Handle safe potentially removed nodes during filtering.
OK,
thanks

Honza
> ---
>  gcc/ipa-icf.c | 47 +++++++++++++++++++----------------------------
>  1 file changed, 19 insertions(+), 28 deletions(-)
> 
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 0ac01a9..449d552 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -1652,40 +1652,31 @@ sem_item_optimizer::filter_removed_items (void)
>      {
>        sem_item *item = m_items[i];
>  
> -      if (item->type == FUNC
> -	  && !opt_for_fn (item->decl, flag_ipa_icf_functions))
> -	{
> -	  remove_item (item);
> -	  continue;
> -	}
> -
> -      if (!flag_ipa_icf_variables && item->type == VAR)
> -	{
> +      if (m_removed_items_set.contains (item->node))
> +        {
>  	  remove_item (item);
>  	  continue;
> -	}
> -
> -      bool no_body_function = false;
> +        }
>  
>        if (item->type == FUNC)
> -	{
> +        {
>  	  cgraph_node *cnode = static_cast <sem_function *>(item)->get_node ();
>  
> -	  no_body_function = in_lto_p && (cnode->alias || cnode->body_removed);
> -	}
> -
> -      if(!m_removed_items_set.contains (m_items[i]->node)
> -	  && !no_body_function)
> -	{
> -	  if (item->type == VAR || (!DECL_CXX_CONSTRUCTOR_P (item->decl)
> -				    && !DECL_CXX_DESTRUCTOR_P (item->decl)))
> -	    {
> -	      filtered.safe_push (m_items[i]);
> -	      continue;
> -	    }
> -	}
> -
> -      remove_item (item);
> +	  bool no_body_function = in_lto_p && (cnode->alias || cnode->body_removed);
> +	  if (no_body_function || !opt_for_fn (item->decl, flag_ipa_icf_functions)
> +	      || DECL_CXX_CONSTRUCTOR_P (item->decl)
> +	      || DECL_CXX_DESTRUCTOR_P (item->decl))
> +	    remove_item (item);
> +	  else
> +	    filtered.safe_push (item);
> +        }
> +      else /* VAR.  */
> +        {
> +	  if (!flag_ipa_icf_variables)
> +	    remove_item (item);
> +	  else
> +	    filtered.safe_push (item);
> +        }
>      }
>  
>    /* Clean-up of released semantic items.  */
> -- 
> 2.1.2
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]