mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 01:50:34 +08:00
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
This commit is contained in:
parent
b6a1a144f4
commit
42bc61e056
@ -1,3 +1,14 @@
|
||||
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>
|
||||
|
||||
PR boostrap/40597
|
||||
|
@ -1427,8 +1427,8 @@ walk_non_aliased_vuses (ao_ref *ref, tree vuse,
|
||||
The function returns the number of statements walked. */
|
||||
|
||||
static unsigned int
|
||||
walk_aliased_vdefs_1 (tree ref, tree vdef,
|
||||
bool (*walker)(tree, tree, void *), void *data,
|
||||
walk_aliased_vdefs_1 (ao_ref *ref, tree vdef,
|
||||
bool (*walker)(ao_ref *, tree, void *), void *data,
|
||||
bitmap *visited, unsigned int cnt)
|
||||
{
|
||||
do
|
||||
@ -1455,7 +1455,7 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
|
||||
/* ??? Do we want to account this to TV_ALIAS_STMT_WALK? */
|
||||
cnt++;
|
||||
if ((!ref
|
||||
|| stmt_may_clobber_ref_p (def_stmt, ref))
|
||||
|| stmt_may_clobber_ref_p_1 (def_stmt, ref))
|
||||
&& (*walker) (ref, vdef, data))
|
||||
return cnt;
|
||||
|
||||
@ -1465,8 +1465,8 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
|
||||
}
|
||||
|
||||
unsigned int
|
||||
walk_aliased_vdefs (tree ref, tree vdef,
|
||||
bool (*walker)(tree, tree, void *), void *data,
|
||||
walk_aliased_vdefs (ao_ref *ref, tree vdef,
|
||||
bool (*walker)(ao_ref *, tree, void *), void *data,
|
||||
bitmap *visited)
|
||||
{
|
||||
bitmap local_visited = NULL;
|
||||
|
@ -100,9 +100,9 @@ extern bool stmt_may_clobber_ref_p_1 (gimple, ao_ref *);
|
||||
extern void *walk_non_aliased_vuses (ao_ref *, tree,
|
||||
void *(*)(ao_ref *, tree, void *),
|
||||
void *(*)(ao_ref *, tree, void *), void *);
|
||||
extern unsigned int walk_aliased_vdefs (tree, tree,
|
||||
bool (*)(tree, tree, void *), void *,
|
||||
bitmap *);
|
||||
extern unsigned int walk_aliased_vdefs (ao_ref *, tree,
|
||||
bool (*)(ao_ref *, tree, void *),
|
||||
void *, bitmap *);
|
||||
extern struct ptr_info_def *get_ptr_info (tree);
|
||||
extern void dump_alias_info (FILE *);
|
||||
extern void debug_alias_info (void);
|
||||
|
@ -452,13 +452,6 @@ ref_may_be_aliased (tree 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 unsigned int longest_chain = 0;
|
||||
static unsigned int total_chain = 0;
|
||||
@ -471,10 +464,10 @@ static bool chain_ovfl = false;
|
||||
anymore. DATA points to cached get_ref_base_and_extent data for REF. */
|
||||
|
||||
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);
|
||||
struct ref_data *refd = (struct ref_data *)data;
|
||||
|
||||
/* All stmts we visit are necessary. */
|
||||
mark_operand_necessary (vdef);
|
||||
@ -485,22 +478,24 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
|
||||
{
|
||||
tree base, lhs = gimple_get_lhs (def_stmt);
|
||||
HOST_WIDE_INT size, offset, max_size;
|
||||
ao_ref_base (ref);
|
||||
base = get_ref_base_and_extent (lhs, &offset, &size, &max_size);
|
||||
/* We can get MEM[symbol: sZ, index: D.8862_1] here,
|
||||
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
|
||||
the accesses properly. */
|
||||
if (size != -1 && size == max_size
|
||||
&& refd->max_size != -1)
|
||||
&& ref->max_size != -1)
|
||||
{
|
||||
if (offset <= refd->offset
|
||||
&& offset + size >= refd->offset + refd->max_size)
|
||||
if (offset <= ref->offset
|
||||
&& offset + size >= ref->offset + ref->max_size)
|
||||
return true;
|
||||
}
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
@ -512,14 +507,13 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
|
||||
static void
|
||||
mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
|
||||
{
|
||||
struct ref_data refd;
|
||||
unsigned int chain;
|
||||
ao_ref refd;
|
||||
gcc_assert (!chain_ovfl);
|
||||
refd.base = get_ref_base_and_extent (ref, &refd.offset, &refd.size,
|
||||
&refd.max_size);
|
||||
chain = walk_aliased_vdefs (ref, gimple_vuse (stmt),
|
||||
ao_ref_init (&refd, ref);
|
||||
chain = walk_aliased_vdefs (&refd, gimple_vuse (stmt),
|
||||
mark_aliased_reaching_defs_necessary_1,
|
||||
&refd, NULL);
|
||||
NULL, NULL);
|
||||
if (chain > longest_chain)
|
||||
longest_chain = chain;
|
||||
total_chain += chain;
|
||||
@ -532,8 +526,8 @@ mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
|
||||
a non-aliased decl. */
|
||||
|
||||
static bool
|
||||
mark_all_reaching_defs_necessary_1 (tree ref ATTRIBUTE_UNUSED,
|
||||
tree vdef, void *data ATTRIBUTE_UNUSED)
|
||||
mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
|
||||
tree vdef, void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user