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
This commit is contained in:
parent
0a04f2dfc2
commit
1326155711
@ -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.
|
||||
@ -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 <cltang@codesourcery.com>
|
||||
|
||||
* c-family/c-omp.c (c_finish_oacc_wait): Remove add_stmt() call.
|
||||
|
@ -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;
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user