diff mbox

Transparent alias suport part 9 (ipa-reference fixes)

Message ID 20151209193842.GA6067@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka Dec. 9, 2015, 7:38 p.m. UTC
Hi,
unfortunately I managed to mess up while handling this patch and accidentally commit earlier
version of it yesterday (without Changelog). This introduced one testsuite regression in
leaf attribute testing.

I commited the following which should fix the fallout.  My apologize for that.
The patch also fixes handling of leaf aliases and moves the symtab related code from
tree-ssa-alias to ipa-refernce.c where it belongs more.

Honza
diff mbox

Patch

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 231469)
+++ ChangeLog	(working copy)
@@ -1,3 +1,19 @@ 
+2015-12-08  Jan Hubicka  <hubicka@ucw.cz>
+
+	PR ipa/61886
+	PR middle-end/25140
+	* ipa-reference.c (ipa_reference_get_not_read_global,
+	ipa_reference_get_not_read_global): Fix WRT aliases.
+	(is_improper): Break out from ...
+	(is_proper_for_analysis): ... here; fix WRT aliases.
+	(analyze_function, generate_summary,
+	ipa_reference_write_optimization_summary,
+	ipa_reference_read_optimization_summary): Use ipa_reference_var_uid.
+	* ipa-refrence.h (ipa_reference_var_uid): New inline.
+	* tree-ssa-alias.c: Revert my accidental previous commit.
+	(ref_maybe_used_by_call_p_1,
+	call_may_clobber_ref_p_1): Use ipa_reference_var_uid.
+
 2015-12-09  Aditya Kumar  <aditya.k7@samsung.com>
 	    Sebastian Pop  <s.pop@samsung.com>
 
Index: ipa-reference.c
===================================================================
--- ipa-reference.c	(revision 231442)
+++ ipa-reference.c	(working copy)
@@ -174,14 +174,22 @@  set_reference_optimization_summary (stru
 bitmap
 ipa_reference_get_not_read_global (struct cgraph_node *fn)
 {
-  if (!opt_for_fn (fn->decl, flag_ipa_reference)
-      || !opt_for_fn (current_function_decl, flag_ipa_reference))
+  if (!opt_for_fn (current_function_decl, flag_ipa_reference))
     return NULL;
+
+  enum availability avail;
+  struct cgraph_node *fn2 = fn->function_symbol (&avail);
   ipa_reference_optimization_summary_t info =
-    get_reference_optimization_summary (fn->function_symbol (NULL));
-  if (info)
+    get_reference_optimization_summary (fn2);
+
+  if (info
+      && (avail >= AVAIL_AVAILABLE
+	  || (avail == AVAIL_INTERPOSABLE
+	      && flags_from_decl_or_type (fn->decl) & ECF_LEAF))
+      && opt_for_fn (fn2->decl, flag_ipa_reference))
     return info->statics_not_read;
-  else if (flags_from_decl_or_type (fn->decl) & ECF_LEAF)
+  else if (avail == AVAIL_NOT_AVAILABLE
+	   && flags_from_decl_or_type (fn->decl) & ECF_LEAF)
     return all_module_statics;
   else
     return NULL;
@@ -195,14 +203,22 @@  ipa_reference_get_not_read_global (struc
 bitmap
 ipa_reference_get_not_written_global (struct cgraph_node *fn)
 {
-  if (!opt_for_fn (fn->decl, flag_ipa_reference)
-      || !opt_for_fn (current_function_decl, flag_ipa_reference))
+  if (!opt_for_fn (current_function_decl, flag_ipa_reference))
     return NULL;
+
+  enum availability avail;
+  struct cgraph_node *fn2 = fn->function_symbol (&avail);
   ipa_reference_optimization_summary_t info =
-    get_reference_optimization_summary (fn);
-  if (info)
+    get_reference_optimization_summary (fn2);
+
+  if (info
+      && (avail >= AVAIL_AVAILABLE
+	  || (avail == AVAIL_INTERPOSABLE
+	      && flags_from_decl_or_type (fn->decl) & ECF_LEAF))
+      && opt_for_fn (fn2->decl, flag_ipa_reference))
     return info->statics_not_written;
-  else if (flags_from_decl_or_type (fn->decl) & ECF_LEAF)
+  else if (avail == AVAIL_NOT_AVAILABLE
+	   && flags_from_decl_or_type (fn->decl) & ECF_LEAF)
     return all_module_statics;
   else
     return NULL;
Index: tree-ssa-alias.c
===================================================================
--- tree-ssa-alias.c	(revision 231442)
+++ tree-ssa-alias.c	(working copy)
@@ -1739,21 +1739,15 @@  ref_maybe_used_by_call_p_1 (gcall *call,
       && TREE_STATIC (base))
     {
       struct cgraph_node *node = cgraph_node::get (callee);
+      bitmap not_read;
 
       /* FIXME: Callee can be an OMP builtin that does not have a call graph
 	 node yet.  We should enforce that there are nodes for all decls in the
 	 IL and remove this check instead.  */
-      if (node)
-	{
-	  enum availability avail;
-	  bitmap not_read;
-
-	  node = node->ultimate_alias_target (&avail);
-	  if (avail >= AVAIL_AVAILABLE
-	      && (not_read = ipa_reference_get_not_read_global (node))
-	      && bitmap_bit_p (not_read, ipa_reference_var_uid (base)))
-	    goto process_args;
-	}
+      if (node
+	  && (not_read = ipa_reference_get_not_read_global (node))
+	  && bitmap_bit_p (not_read, ipa_reference_var_uid (base)))
+	goto process_args;
     }
 
   /* Check if the base variable is call-used.  */
@@ -2134,18 +2128,12 @@  call_may_clobber_ref_p_1 (gcall *call, a
       && TREE_STATIC (base))
     {
       struct cgraph_node *node = cgraph_node::get (callee);
+      bitmap not_written;
 
-      if (node)
-	{
-	  bitmap not_written;
-	  enum availability avail;
-
-	  node = node->ultimate_alias_target (&avail);
-	  if (avail >= AVAIL_AVAILABLE
-	      && (not_written = ipa_reference_get_not_written_global (node))
-	      && bitmap_bit_p (not_written, ipa_reference_var_uid (base)))
-	    return false;
-	}
+      if (node
+	  && (not_written = ipa_reference_get_not_written_global (node))
+	  && bitmap_bit_p (not_written, ipa_reference_var_uid (base)))
+	return false;
     }
 
   /* Check if the base variable is call-clobbered.  */