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 for PR ipa/65245


> Hello.
> 
> Following patch skips all variable aliases as potential merge candidates. Tested on x86_64-linux.
> 
> Ready for trunk?
> Thanks,
> Martin

> >From fbde2e98f98a71105d18cf3e91e8032d0c657139 Mon Sep 17 00:00:00 2001
> From: mliska <mliska@suse.cz>
> Date: Fri, 27 Feb 2015 22:42:49 +0100
> Subject: [PATCH 2/4] ICF: Do not consider variable aliases for merge
>  operation.
> 
> gcc/ChangeLog:
> 
> 2015-02-28  Martin Liska  <mliska@suse.cz>
> 	    Jan Hubicka   <hubicka@ucw.cz>
> 
> 	PR ipa/65245
> 	* ipa-icf.c (sem_function::parse): Do not consider aliases.
> 	(sem_variable::parse):  Likewise.
> 	(sem_item_optimizer::build_graph): Consider ultimate aliases
> 	for references.

OK, can you please add a testcase checking that two functions get merged even
if each of them referrs different alias of an equvalent symbols?

Honza
> ---
>  gcc/ipa-icf.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 92133fc..864a5d0 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -1095,7 +1095,7 @@ sem_function::parse (cgraph_node *node, bitmap_obstack *stack)
>    tree fndecl = node->decl;
>    function *func = DECL_STRUCT_FUNCTION (fndecl);
>  
> -  /* TODO: add support for thunks and aliases.  */
> +  /* TODO: add support for thunks.  */
>  
>    if (!func || !node->has_gimple_body_p ())
>      return NULL;
> @@ -1407,6 +1407,9 @@ sem_variable::parse (varpool_node *node, bitmap_obstack *stack)
>  {
>    tree decl = node->decl;
>  
> +  if (node->alias)
> +    return NULL;
> +
>    bool readonly = TYPE_P (decl) ? TYPE_READONLY (decl) : TREE_READONLY (decl);
>    if (!readonly)
>      return NULL;
> @@ -2057,7 +2060,8 @@ sem_item_optimizer::build_graph (void)
>  	  cgraph_edge *e = cnode->callees;
>  	  while (e)
>  	    {
> -	      sem_item **slot = m_symtab_node_map.get (e->callee);
> +	      sem_item **slot = m_symtab_node_map.get
> +		(e->callee->ultimate_alias_target ());
>  	      if (slot)
>  		item->add_reference (*slot);
>  
> @@ -2068,7 +2072,8 @@ sem_item_optimizer::build_graph (void)
>        ipa_ref *ref = NULL;
>        for (unsigned i = 0; item->node->iterate_reference (i, ref); i++)
>  	{
> -	  sem_item **slot = m_symtab_node_map.get (ref->referred);
> +	  sem_item **slot = m_symtab_node_map.get
> +	    (ref->referred->ultimate_alias_target ());
>  	  if (slot)
>  	    item->add_reference (*slot);
>  	}
> -- 
> 2.1.2
> 


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