aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-04-27 10:42:08 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-04-27 10:42:08 +0000
commit2b78f22152e0af0612433f2bdf1d9eae76bfd843 (patch)
tree2d34bc0aec820121f34dc86520fb24811bd5eee2 /gcc
parentc1e1f4333b65cb99f2dbfff267a634448d947529 (diff)
downloadgcc-2b78f22152e0af0612433f2bdf1d9eae76bfd843.zip
gcc-2b78f22152e0af0612433f2bdf1d9eae76bfd843.tar.gz
gcc-2b78f22152e0af0612433f2bdf1d9eae76bfd843.tar.bz2
re PR ipa/70785 (LTO bootstrap with IPA PTA is broken)
2016-04-27 Richard Biener <rguenther@suse.de> PR ipa/70785 * tree-ssa-structalias.c (refered_from_nonlocal_fn): New function cummulating used_from_other_partition, externally_visible and force_output from aliases. (refered_from_nonlocal_var): Likewise. (ipa_pta_execute): Use call_for_symbol_and_aliases to cummulate node flags properly. From-SVN: r235477
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/tree-ssa-structalias.c29
2 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2ddc3df..38dd7c8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2016-04-27 Richard Biener <rguenther@suse.de>
+
+ PR ipa/70785
+ * tree-ssa-structalias.c (refered_from_nonlocal_fn): New
+ function cummulating used_from_other_partition, externally_visible
+ and force_output from aliases.
+ (refered_from_nonlocal_var): Likewise.
+ (ipa_pta_execute): Use call_for_symbol_and_aliases to cummulate
+ node flags properly.
+
2016-04-27 Bernd Schmidt <bschmidt@redhat.com>
* doc/invoke.texi (Warning Options): Add -Wmemset-elt-size.
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 3fdde84..8c25af7 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -7508,7 +7508,7 @@ struct pt_solution ipa_escaped_pt
= { true, false, false, false, false, false, false, false, NULL };
/* Associate node with varinfo DATA. Worker for
- cgraph_for_node_and_aliases. */
+ cgraph_for_symbol_thunks_and_aliases. */
static bool
associate_varinfo_to_alias (struct cgraph_node *node, void *data)
{
@@ -7624,6 +7624,29 @@ debug_varmap (void)
dump_varmap (stderr);
}
+/* Compute whether node is refered to non-locally. Worker for
+ cgraph_for_symbol_thunks_and_aliases. */
+static bool
+refered_from_nonlocal_fn (struct cgraph_node *node, void *data)
+{
+ bool *nonlocal_p = (bool *)data;
+ *nonlocal_p |= (node->used_from_other_partition
+ || node->externally_visible
+ || node->force_output);
+ return false;
+}
+
+/* Same for varpool nodes. */
+static bool
+refered_from_nonlocal_var (struct varpool_node *node, void *data)
+{
+ bool *nonlocal_p = (bool *)data;
+ *nonlocal_p |= (node->used_from_other_partition
+ || node->externally_visible
+ || node->force_output);
+ return false;
+}
+
/* Execute the driver for IPA PTA. */
static unsigned int
ipa_pta_execute (void)
@@ -7687,6 +7710,8 @@ ipa_pta_execute (void)
|| node->externally_visible
|| node->force_output
|| node_address_taken);
+ node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn,
+ &nonlocal_p, true);
vi = create_function_info_for (node->decl,
alias_get_name (node->decl), false,
@@ -7724,6 +7749,8 @@ ipa_pta_execute (void)
bool nonlocal_p = (var->used_from_other_partition
|| var->externally_visible
|| var->force_output);
+ var->call_for_symbol_and_aliases (refered_from_nonlocal_var,
+ &nonlocal_p, true);
if (nonlocal_p)
vi->is_ipa_escape_point = true;
}