tree-flow.h (may_point_to_global_var): Declare.
2008-06-11 Richard Guenther <rguenther@suse.de> * tree-flow.h (may_point_to_global_var): Declare. * tree-ssa-alias.c (may_point_to_global_var): New function. * tree-ssa-sink.c (is_hidden_global_store): Use it. From-SVN: r136657
This commit is contained in:
parent
6717c5442e
commit
fd73537b31
4 changed files with 25 additions and 14 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-06-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-flow.h (may_point_to_global_var): Declare.
|
||||
* tree-ssa-alias.c (may_point_to_global_var): New function.
|
||||
* tree-ssa-sink.c (is_hidden_global_store): Use it.
|
||||
|
||||
2008-06-10 Kazu Hirata <kazu@codesourcery.com>
|
||||
|
||||
* configure.ac: Teach that fido supports .debug_line.
|
||||
|
|
|
@ -853,6 +853,7 @@ extern void dump_points_to_info_for (FILE *, tree);
|
|||
extern void debug_points_to_info_for (tree);
|
||||
extern bool may_be_aliased (tree);
|
||||
extern struct ptr_info_def *get_ptr_info (tree);
|
||||
extern bool may_point_to_global_var (tree);
|
||||
extern void new_type_alias (tree, tree, tree);
|
||||
extern void count_uses_and_derefs (tree, tree, unsigned *, unsigned *,
|
||||
unsigned *);
|
||||
|
|
|
@ -2783,6 +2783,23 @@ may_alias_p (tree ptr, alias_set_type mem_alias_set,
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Return true, if PTR may point to a global variable. */
|
||||
|
||||
bool
|
||||
may_point_to_global_var (tree ptr)
|
||||
{
|
||||
struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
|
||||
|
||||
/* If we do not have points-to information for this variable,
|
||||
we have to punt. */
|
||||
if (!pi
|
||||
|| !pi->name_mem_tag)
|
||||
return true;
|
||||
|
||||
/* The name memory tag is marked as global variable if the points-to
|
||||
set contains a global variable. */
|
||||
return is_global_var (pi->name_mem_tag);
|
||||
}
|
||||
|
||||
/* Add ALIAS to the set of variables that may alias VAR. */
|
||||
|
||||
|
|
|
@ -189,20 +189,7 @@ is_hidden_global_store (tree stmt)
|
|||
|
||||
}
|
||||
else if (INDIRECT_REF_P (lhs))
|
||||
{
|
||||
tree ptr = TREE_OPERAND (lhs, 0);
|
||||
struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
|
||||
tree nmt = (pi) ? pi->name_mem_tag : NULL_TREE;
|
||||
tree smt = symbol_mem_tag (SSA_NAME_VAR (ptr));
|
||||
|
||||
/* If either the name tag or the symbol tag for PTR is a
|
||||
global variable, then the store is necessary. */
|
||||
if ((nmt && is_global_var (nmt))
|
||||
|| (smt && is_global_var (smt)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return may_point_to_global_var (TREE_OPERAND (lhs, 0));
|
||||
else
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue