summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2015-12-09 19:29:38 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2015-12-09 19:29:38 +0000
commitb39960e1bf9defe8409541c113d4da6cc2a091a2 (patch)
tree4d484ae9a9e235802ede77e2da1d0a8cf358608a
parent195e39f39002977c5d3c437aadd893762efb890a (diff)
downloadgcc-b39960e1bf9defe8409541c113d4da6cc2a091a2.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231471 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/ipa-reference.c36
-rw-r--r--gcc/tree-ssa-alias.c32
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 <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.
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. */