Commit 1685ecf3 by Jan Hubicka Committed by Jan Hubicka

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
parent 92d28cbb
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> 2014-06-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/60928 PR fortran/60928
......
...@@ -243,6 +243,17 @@ is_proper_for_analysis (tree t) ...@@ -243,6 +243,17 @@ is_proper_for_analysis (tree t)
if (TREE_READONLY (t)) if (TREE_READONLY (t))
return false; 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 /* 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. */ before, and if not add it the set of variables we care about. */
if (all_module_statics if (all_module_statics
...@@ -312,26 +323,6 @@ union_static_var_sets (bitmap &x, bitmap y) ...@@ -312,26 +323,6 @@ union_static_var_sets (bitmap &x, bitmap y)
return x == all_module_statics; 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. /* Return a copy of SET on the bitmap obstack containing SET.
But if SET is NULL or the maximum set, return that instead. */ But if SET is NULL or the maximum set, return that instead. */
...@@ -669,7 +660,6 @@ static unsigned int ...@@ -669,7 +660,6 @@ static unsigned int
propagate (void) propagate (void)
{ {
struct cgraph_node *node; struct cgraph_node *node;
varpool_node *vnode;
struct cgraph_node **order = struct cgraph_node **order =
XCNEWVEC (struct cgraph_node *, cgraph_n_nodes); XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
int order_pos; int order_pos;
...@@ -681,25 +671,6 @@ propagate (void) ...@@ -681,25 +671,6 @@ propagate (void)
ipa_discover_readonly_nonaddressable_vars (); ipa_discover_readonly_nonaddressable_vars ();
generate_summary (); 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 /* Propagate the local information through the call graph to produce
the global information. All the nodes within a cycle will have the global information. All the nodes within a cycle will have
the same info so we collapse cycles first. Then we can do the the same info so we collapse cycles first. Then we can do the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment