This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix for PR ipa/65245
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Martin Liška <mliska at suse dot cz>
- Cc: "gcc- >> GCC Patches" <gcc-patches at gcc dot gnu dot org>, "hubick >> Jan Hubicka" <hubicka at ucw dot cz>
- Date: Sat, 28 Feb 2015 23:41:15 +0100
- Subject: Re: [PATCH] Fix for PR ipa/65245
- Authentication-results: sourceware.org; auth=none
- References: <54F23BAD dot 2010304 at suse dot cz>
> 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
>