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:
parent
92d28cbb59
commit
1685ecf3bf
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user