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