aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-06-30 09:55:34 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-06-30 09:55:34 +0000
commit42bc61e05685cc6a4d96d9005dbab2e87351dddd (patch)
tree2738597e7116e10ffc0882dfea2b58bdaafb9d6b /gcc
parentb6a1a144f4b12fdb674a1ac919906c08b8be8c37 (diff)
downloadgcc-42bc61e05685cc6a4d96d9005dbab2e87351dddd.zip
gcc-42bc61e05685cc6a4d96d9005dbab2e87351dddd.tar.gz
gcc-42bc61e05685cc6a4d96d9005dbab2e87351dddd.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/tree-ssa-alias.c10
-rw-r--r--gcc/tree-ssa-alias.h6
-rw-r--r--gcc/tree-ssa-dce.c36
4 files changed, 34 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fe12202..af585a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index e8bca84..4d72187 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -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;
diff --git a/gcc/tree-ssa-alias.h b/gcc/tree-ssa-alias.h
index b071e4b..2be903f 100644
--- a/gcc/tree-ssa-alias.h
+++ b/gcc/tree-ssa-alias.h
@@ -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);
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index b252ece..0cb8ac6 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -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);