Commit 42bc61e0 by Richard Guenther Committed by Richard Biener

tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to use ao_ref references.

2009-06-30  Richard Guenther  <rguenther@suse.de>

	* tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to
	use ao_ref references.
	(walk_aliased_vdefs): Likewise.
	* tree-ssa-alias.h (walk_aliased_vdefs): Adjust prototype.
	* tree-ssa-dce.c (struct ref_data): Remove.
	(mark_aliased_reaching_defs_necessary_1): Use the ao_ref argument.
	(mark_aliased_reaching_defs_necessary): Adjust.
	(mark_all_reaching_defs_necessary_1): Likewise.

From-SVN: r149086
parent b6a1a144
2009-06-30 Richard Guenther <rguenther@suse.de>
* tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to
use ao_ref references.
(walk_aliased_vdefs): Likewise.
* tree-ssa-alias.h (walk_aliased_vdefs): Adjust prototype.
* tree-ssa-dce.c (struct ref_data): Remove.
(mark_aliased_reaching_defs_necessary_1): Use the ao_ref argument.
(mark_aliased_reaching_defs_necessary): Adjust.
(mark_all_reaching_defs_necessary_1): Likewise.
2009-06-30 Paolo Bonzini <bonzini@gnu.org> 2009-06-30 Paolo Bonzini <bonzini@gnu.org>
PR boostrap/40597 PR boostrap/40597
......
...@@ -1427,8 +1427,8 @@ walk_non_aliased_vuses (ao_ref *ref, tree vuse, ...@@ -1427,8 +1427,8 @@ walk_non_aliased_vuses (ao_ref *ref, tree vuse,
The function returns the number of statements walked. */ The function returns the number of statements walked. */
static unsigned int static unsigned int
walk_aliased_vdefs_1 (tree ref, tree vdef, walk_aliased_vdefs_1 (ao_ref *ref, tree vdef,
bool (*walker)(tree, tree, void *), void *data, bool (*walker)(ao_ref *, tree, void *), void *data,
bitmap *visited, unsigned int cnt) bitmap *visited, unsigned int cnt)
{ {
do do
...@@ -1455,7 +1455,7 @@ walk_aliased_vdefs_1 (tree ref, tree vdef, ...@@ -1455,7 +1455,7 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
/* ??? Do we want to account this to TV_ALIAS_STMT_WALK? */ /* ??? Do we want to account this to TV_ALIAS_STMT_WALK? */
cnt++; cnt++;
if ((!ref if ((!ref
|| stmt_may_clobber_ref_p (def_stmt, ref)) || stmt_may_clobber_ref_p_1 (def_stmt, ref))
&& (*walker) (ref, vdef, data)) && (*walker) (ref, vdef, data))
return cnt; return cnt;
...@@ -1465,8 +1465,8 @@ walk_aliased_vdefs_1 (tree ref, tree vdef, ...@@ -1465,8 +1465,8 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
} }
unsigned int unsigned int
walk_aliased_vdefs (tree ref, tree vdef, walk_aliased_vdefs (ao_ref *ref, tree vdef,
bool (*walker)(tree, tree, void *), void *data, bool (*walker)(ao_ref *, tree, void *), void *data,
bitmap *visited) bitmap *visited)
{ {
bitmap local_visited = NULL; bitmap local_visited = NULL;
......
...@@ -100,9 +100,9 @@ extern bool stmt_may_clobber_ref_p_1 (gimple, ao_ref *); ...@@ -100,9 +100,9 @@ extern bool stmt_may_clobber_ref_p_1 (gimple, ao_ref *);
extern void *walk_non_aliased_vuses (ao_ref *, tree, extern void *walk_non_aliased_vuses (ao_ref *, tree,
void *(*)(ao_ref *, tree, void *), void *(*)(ao_ref *, tree, void *),
void *(*)(ao_ref *, tree, void *), void *); void *(*)(ao_ref *, tree, void *), void *);
extern unsigned int walk_aliased_vdefs (tree, tree, extern unsigned int walk_aliased_vdefs (ao_ref *, tree,
bool (*)(tree, tree, void *), void *, bool (*)(ao_ref *, tree, void *),
bitmap *); void *, bitmap *);
extern struct ptr_info_def *get_ptr_info (tree); extern struct ptr_info_def *get_ptr_info (tree);
extern void dump_alias_info (FILE *); extern void dump_alias_info (FILE *);
extern void debug_alias_info (void); extern void debug_alias_info (void);
......
...@@ -452,13 +452,6 @@ ref_may_be_aliased (tree ref) ...@@ -452,13 +452,6 @@ ref_may_be_aliased (tree ref)
&& !may_be_aliased (ref)); && !may_be_aliased (ref));
} }
struct ref_data {
tree base;
HOST_WIDE_INT size;
HOST_WIDE_INT offset;
HOST_WIDE_INT max_size;
};
static bitmap visited = NULL; static bitmap visited = NULL;
static unsigned int longest_chain = 0; static unsigned int longest_chain = 0;
static unsigned int total_chain = 0; static unsigned int total_chain = 0;
...@@ -471,10 +464,10 @@ static bool chain_ovfl = false; ...@@ -471,10 +464,10 @@ static bool chain_ovfl = false;
anymore. DATA points to cached get_ref_base_and_extent data for REF. */ anymore. DATA points to cached get_ref_base_and_extent data for REF. */
static bool static bool
mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data) mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef,
void *data ATTRIBUTE_UNUSED)
{ {
gimple def_stmt = SSA_NAME_DEF_STMT (vdef); gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
struct ref_data *refd = (struct ref_data *)data;
/* All stmts we visit are necessary. */ /* All stmts we visit are necessary. */
mark_operand_necessary (vdef); mark_operand_necessary (vdef);
...@@ -485,22 +478,24 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data) ...@@ -485,22 +478,24 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
{ {
tree base, lhs = gimple_get_lhs (def_stmt); tree base, lhs = gimple_get_lhs (def_stmt);
HOST_WIDE_INT size, offset, max_size; HOST_WIDE_INT size, offset, max_size;
ao_ref_base (ref);
base = get_ref_base_and_extent (lhs, &offset, &size, &max_size); base = get_ref_base_and_extent (lhs, &offset, &size, &max_size);
/* We can get MEM[symbol: sZ, index: D.8862_1] here, /* We can get MEM[symbol: sZ, index: D.8862_1] here,
so base == refd->base does not always hold. */ so base == refd->base does not always hold. */
if (base == refd->base) if (base == ref->base)
{ {
/* For a must-alias check we need to be able to constrain /* For a must-alias check we need to be able to constrain
the accesses properly. */ the accesses properly. */
if (size != -1 && size == max_size if (size != -1 && size == max_size
&& refd->max_size != -1) && ref->max_size != -1)
{ {
if (offset <= refd->offset if (offset <= ref->offset
&& offset + size >= refd->offset + refd->max_size) && offset + size >= ref->offset + ref->max_size)
return true; return true;
} }
/* Or they need to be exactly the same. */ /* Or they need to be exactly the same. */
else if (operand_equal_p (ref, lhs, 0)) else if (ref->ref
&& operand_equal_p (ref->ref, lhs, 0))
return true; return true;
} }
} }
...@@ -512,14 +507,13 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data) ...@@ -512,14 +507,13 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
static void static void
mark_aliased_reaching_defs_necessary (gimple stmt, tree ref) mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
{ {
struct ref_data refd;
unsigned int chain; unsigned int chain;
ao_ref refd;
gcc_assert (!chain_ovfl); gcc_assert (!chain_ovfl);
refd.base = get_ref_base_and_extent (ref, &refd.offset, &refd.size, ao_ref_init (&refd, ref);
&refd.max_size); chain = walk_aliased_vdefs (&refd, gimple_vuse (stmt),
chain = walk_aliased_vdefs (ref, gimple_vuse (stmt),
mark_aliased_reaching_defs_necessary_1, mark_aliased_reaching_defs_necessary_1,
&refd, NULL); NULL, NULL);
if (chain > longest_chain) if (chain > longest_chain)
longest_chain = chain; longest_chain = chain;
total_chain += chain; total_chain += chain;
...@@ -532,8 +526,8 @@ mark_aliased_reaching_defs_necessary (gimple stmt, tree ref) ...@@ -532,8 +526,8 @@ mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
a non-aliased decl. */ a non-aliased decl. */
static bool static bool
mark_all_reaching_defs_necessary_1 (tree ref ATTRIBUTE_UNUSED, mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
tree vdef, void *data ATTRIBUTE_UNUSED) tree vdef, void *data ATTRIBUTE_UNUSED)
{ {
gimple def_stmt = SSA_NAME_DEF_STMT (vdef); gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
......
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