Fix IPA CP where it forgot to add a reference in cgraph (PR ipa/71190).
authorMartin Liska <mliska@suse.cz>
Fri, 20 Jan 2017 08:44:35 +0000 (09:44 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 20 Jan 2017 08:44:35 +0000 (08:44 +0000)
2017-01-20  Martin Liska  <mliska@suse.cz>

PR ipa/71190
* cgraph.h (maybe_create_reference): Remove argument and
update comment.
* cgraphclones.c (cgraph_node::create_virtual_clone): Remove one
argument.
* ipa-cp.c (create_specialized_node): Likewise.
* symtab.c (symtab_node::maybe_create_reference): Handle
VAR_DECLs and ADDR_EXPRs and select ipa_ref_use type.

From-SVN: r244687

gcc/ChangeLog
gcc/cgraph.h
gcc/cgraphclones.c
gcc/ipa-cp.c
gcc/symtab.c

index d38e2a5a2492832a380589846428044734f67dbd..9ff10e0c34e76120542d5552f2607cad70348a3f 100644 (file)
@@ -1,3 +1,14 @@
+2017-01-20  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/71190
+       * cgraph.h (maybe_create_reference): Remove argument and
+       update comment.
+       * cgraphclones.c (cgraph_node::create_virtual_clone): Remove one
+       argument.
+       * ipa-cp.c (create_specialized_node): Likewise.
+       * symtab.c (symtab_node::maybe_create_reference): Handle
+       VAR_DECLs and ADDR_EXPRs and select ipa_ref_use type.
+
 2017-01-20  Martin Liska  <mliska@suse.cz>
 
        * read-rtl-function.c (function_reader::create_function): Use
index db2915c5751679429217b7e7d48c378dd793a498..5410a71176ac5583e8a8fdd6fa648aab4b1dedd4 100644 (file)
@@ -131,11 +131,9 @@ public:
                             enum ipa_ref_use use_type, gimple *stmt);
 
   /* If VAL is a reference to a function or a variable, add a reference from
-     this symtab_node to the corresponding symbol table node.  USE_TYPE specify
-     type of the use and STMT the statement (if it exists).  Return the new
+     this symtab_node to the corresponding symbol table node.  Return the new
      reference or NULL if none was created.  */
-  ipa_ref *maybe_create_reference (tree val, enum ipa_ref_use use_type,
-                                  gimple *stmt);
+  ipa_ref *maybe_create_reference (tree val, gimple *stmt);
 
   /* Clone all references from symtab NODE to this symtab_node.  */
   void clone_references (symtab_node *node);
index a17663519a968154aad7dad4d1b4cb0fb03aee24..c2337e8455364f74450bc6bef4d2159bd265bf08 100644 (file)
@@ -624,7 +624,7 @@ 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);
+    new_node->maybe_create_reference (map->new_tree, NULL);
 
   if (ipa_transforms_to_apply.exists ())
     new_node->ipa_transforms_to_apply
index 9cc903769e8182f5e7c4aa66c193f6a775d19e2a..aa3c9973a66b0f7e8266e610b5752c1302916428 100644 (file)
@@ -3786,7 +3786,7 @@ 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);
+    new_node->maybe_create_reference (av->value, NULL);
 
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
index ba395cdd26b40c2337e571ea0518ae4b624ecdd6..87febdc212f27553115f6fc3f2da996f7a53a562 100644 (file)
@@ -588,18 +588,25 @@ symtab_node::create_reference (symtab_node *referred_node,
   return ref;
 }
 
-/* If VAL is a reference to a function or a variable, add a reference from
-   this symtab_node to the corresponding symbol table node.  USE_TYPE specify
-   type of the use and STMT the statement (if it exists).  Return the new
-   reference or NULL if none was created.  */
-
 ipa_ref *
-symtab_node::maybe_create_reference (tree val, enum ipa_ref_use use_type,
-                                    gimple *stmt)
+symtab_node::maybe_create_reference (tree val, gimple *stmt)
 {
   STRIP_NOPS (val);
-  if (TREE_CODE (val) != ADDR_EXPR)
-    return NULL;
+  ipa_ref_use use_type;
+
+  switch (TREE_CODE (val))
+    {
+    case VAR_DECL:
+      use_type = IPA_REF_LOAD;
+      break;
+    case ADDR_EXPR:
+      use_type = IPA_REF_ADDR;
+      break;
+    default:
+      gcc_assert (!handled_component_p (val));
+      return NULL;
+    }
+
   val = get_base_var (val);
   if (val && VAR_OR_FUNCTION_DECL_P (val))
     {