ipa-reference.c (is_proper_for_analysis): Exclude addressable and public vars.

* ipa-reference.c (is_proper_for_analysis): Exclude addressable and public
	vars.
	(intersect_static_var_sets): Remove.
	(propagate): Do not prune local statics.

From-SVN: r211398
This commit is contained in:
Jan Hubicka 2014-06-10 08:30:50 +02:00 committed by Jan Hubicka
parent 92d28cbb59
commit 1685ecf3bf
2 changed files with 18 additions and 40 deletions

View File

@ -1,3 +1,10 @@
2014-06-10 Jan Hubicka <hubicka@ucw.cz>
* ipa-reference.c (is_proper_for_analysis): Exclude addressable and public
vars.
(intersect_static_var_sets): Remove.
(propagate): Do not prune local statics.
2014-06-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/60928

View File

@ -243,6 +243,17 @@ is_proper_for_analysis (tree t)
if (TREE_READONLY (t))
return false;
/* We can not track variables with address taken. */
if (TREE_ADDRESSABLE (t))
return false;
/* TODO: We could track public variables that are not addressable, but currently
frontends don't give us those. */
if (TREE_PUBLIC (t))
return false;
/* TODO: Check aliases. */
/* This is a variable we care about. Check if we have seen it
before, and if not add it the set of variables we care about. */
if (all_module_statics
@ -312,26 +323,6 @@ union_static_var_sets (bitmap &x, bitmap y)
return x == all_module_statics;
}
/* Compute X &= Y, taking into account the possibility that
X may become the maximum set. */
static bool
intersect_static_var_sets (bitmap &x, bitmap y)
{
if (x != all_module_statics)
{
bitmap_and_into (x, y);
/* As with union_static_var_sets, reducing to the maximum
set as early as possible is an overall win. */
if (bitmap_equal_p (x, all_module_statics))
{
BITMAP_FREE (x);
x = all_module_statics;
}
}
return x == all_module_statics;
}
/* Return a copy of SET on the bitmap obstack containing SET.
But if SET is NULL or the maximum set, return that instead. */
@ -669,7 +660,6 @@ static unsigned int
propagate (void)
{
struct cgraph_node *node;
varpool_node *vnode;
struct cgraph_node **order =
XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
int order_pos;
@ -681,25 +671,6 @@ propagate (void)
ipa_discover_readonly_nonaddressable_vars ();
generate_summary ();
/* Now we know what vars are really statics; prune out those that aren't. */
FOR_EACH_VARIABLE (vnode)
if (vnode->externally_visible
|| TREE_ADDRESSABLE (vnode->decl)
|| TREE_READONLY (vnode->decl)
|| !is_proper_for_analysis (vnode->decl)
|| !vnode->definition)
bitmap_clear_bit (all_module_statics, DECL_UID (vnode->decl));
/* Forget info we collected "just for fun" on variables that turned out to be
non-local. */
FOR_EACH_DEFINED_FUNCTION (node)
{
ipa_reference_local_vars_info_t node_l;
node_l = &get_reference_vars_info (node)->local;
intersect_static_var_sets (node_l->statics_read, all_module_statics);
intersect_static_var_sets (node_l->statics_written, all_module_statics);
}
/* Propagate the local information through the call graph to produce
the global information. All the nodes within a cycle will have
the same info so we collapse cycles first. Then we can do the