re PR lto/61886 (LTO breaks fread with _FORTIFY_SOURCE=2)
authorJan Hubicka <hubicka@gcc.gnu.org>
Wed, 9 Dec 2015 19:29:38 +0000 (19:29 +0000)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 9 Dec 2015 19:29:38 +0000 (19:29 +0000)
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.

From-SVN: r231471

gcc/ChangeLog
gcc/ipa-reference.c
gcc/tree-ssa-alias.c

index 68d04793bd2cbe6d360d95ef8aced0469eaef3f8..22e87afdda57f01b6d93257e60511f0ec0f39f6a 100644 (file)
@@ -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  Andreas Tobler  <andreast@gcc.gnu.org>
 
        * config/rs6000/freebsd64.h: Remove the redefinition of WCHAR_TYPE.
        * tree-vectorizer.h (set_vinfo_for_stmt): Assert we don't
        overwrite an existing entry.
 
+>>>>>>> .r231469
 2015-12-09  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * c-family/c-omp.c (c_finish_oacc_wait): Remove add_stmt() call.
index be98cdc58930819b0d1f68115113d14ba24b2108..7d7f4ac23098abae6869e2796ea866a429eeb529 100644 (file)
@@ -174,14 +174,22 @@ set_reference_optimization_summary (struct cgraph_node *node,
 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 (struct cgraph_node *fn)
 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 c859e3fcedfa17ebb7b7695bc4b184f000d5a573..b0ab6fb46aa0e467ad56c83b9a4b2b610be1801e 100644 (file)
@@ -1739,21 +1739,15 @@ ref_maybe_used_by_call_p_1 (gcall *call, ao_ref *ref)
       && 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, ao_ref *ref)
       && 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.  */