From 1326155711cd4af6bdbf347b51e2a7337cf07414 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 9 Dec 2015 19:29:38 +0000 Subject: [PATCH] re PR lto/61886 (LTO breaks fread with _FORTIFY_SOURCE=2) 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 | 17 +++++++++++++++++ gcc/ipa-reference.c | 36 ++++++++++++++++++++++++++---------- gcc/tree-ssa-alias.c | 32 ++++++++++---------------------- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68d04793bd2..22e87afdda5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2015-12-08 Jan Hubicka + + 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 * config/rs6000/freebsd64.h: Remove the redefinition of WCHAR_TYPE. @@ -119,6 +135,7 @@ * tree-vectorizer.h (set_vinfo_for_stmt): Assert we don't overwrite an existing entry. +>>>>>>> .r231469 2015-12-09 Chung-Lin Tang * c-family/c-omp.c (c_finish_oacc_wait): Remove add_stmt() call. diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c index be98cdc5893..7d7f4ac2309 100644 --- a/gcc/ipa-reference.c +++ b/gcc/ipa-reference.c @@ -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; diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index c859e3fcedf..b0ab6fb46aa 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -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. */