public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix IPA CP where it forgot to add a reference in cgraph
@ 2016-12-19 10:17 Martin Liška
  2016-12-19 10:19 ` Jakub Jelinek
  2016-12-20 10:22 ` Martin Jambor
  0 siblings, 2 replies; 9+ messages in thread
From: Martin Liška @ 2016-12-19 10:17 UTC (permalink / raw)
  To: GCC Patches; +Cc: Jan Hubicka, Martin Jambor

[-- Attachment #1: Type: text/plain, Size: 395 bytes --]

Hello.

Building mariadb with -flto exposes a bug which I also used to see in Firefox. It's
caused by IPA CP starting from r236418, where the pass started to propagate const
VAR_DECLs. Problem is that the pass does not update call graph by adding IPA_REF_READ
of the propagated variable.

Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

Ready to be installed?
Martin

[-- Attachment #2: 0001-Fix-IPA-CP-where-it-forgot-to-add-a-reference-in-cgr.patch --]
[-- Type: text/x-patch, Size: 2393 bytes --]

From 477e81fde08d0520ce552ec8baa0349590dc683c Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 19 Dec 2016 11:03:34 +0100
Subject: [PATCH] Fix IPA CP where it forgot to add a reference in cgraph

gcc/ChangeLog:

2016-12-19  Martin Liska  <mliska@suse.cz>

	* cgraphclones.c (cgraph_node::create_virtual_clone):
	Create either IPA_REF_LOAD of IPA_REF_READ depending on
	whether new_tree is a VAR_DECL or an ADDR_EXPR.
	* ipa-cp.c (create_specialized_node): Add reference just for
	ADDR_EXPRs.
	* symtab.c (symtab_node::maybe_create_reference): Remove guard
	as it's guarded in callers.
---
 gcc/cgraphclones.c | 6 +++++-
 gcc/ipa-cp.c       | 3 ++-
 gcc/symtab.c       | 2 --
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c
index 349892dab67..93c86e6a1cc 100644
--- a/gcc/cgraphclones.c
+++ b/gcc/cgraphclones.c
@@ -624,7 +624,11 @@ cgraph_node::create_virtual_clone (vec<cgraph_edge *> redirect_callers,
       || in_lto_p)
     new_node->unique_name = true;
   FOR_EACH_VEC_SAFE_ELT (tree_map, i, map)
-    new_node->maybe_create_reference (map->new_tree, IPA_REF_ADDR, NULL);
+    {
+      ipa_ref_use use_type
+	= TREE_CODE (map->new_tree) == VAR_DECL ? IPA_REF_ADDR : IPA_REF_LOAD;
+      new_node->maybe_create_reference (map->new_tree, use_type, NULL);
+    }
 
   if (ipa_transforms_to_apply.exists ())
     new_node->ipa_transforms_to_apply
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index d3b50524457..fd312b56fde 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -3787,7 +3787,8 @@ create_specialized_node (struct cgraph_node *node,
 					 args_to_skip, "constprop");
   ipa_set_node_agg_value_chain (new_node, aggvals);
   for (av = aggvals; av; av = av->next)
-    new_node->maybe_create_reference (av->value, IPA_REF_ADDR, NULL);
+    if (TREE_CODE (av->value) == ADDR_EXPR)
+      new_node->maybe_create_reference (av->value, IPA_REF_ADDR, NULL);
 
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 73168a8db09..562a4a2f6a6 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -598,8 +598,6 @@ symtab_node::maybe_create_reference (tree val, enum ipa_ref_use use_type,
 				     gimple *stmt)
 {
   STRIP_NOPS (val);
-  if (TREE_CODE (val) != ADDR_EXPR)
-    return NULL;
   val = get_base_var (val);
   if (val && VAR_OR_FUNCTION_DECL_P (val))
     {
-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-01-20  8:45 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-19 10:17 [PATCH] Fix IPA CP where it forgot to add a reference in cgraph Martin Liška
2016-12-19 10:19 ` Jakub Jelinek
2016-12-20 10:22 ` Martin Jambor
2016-12-20 14:57   ` Martin Liška
2017-01-10 10:50     ` Martin Liška
2017-01-18 22:32     ` Jan Hubicka
2017-01-19 15:09       ` Martin Liška
2017-01-19 15:14         ` Jan Hubicka
2017-01-20  9:05           ` Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).