From: Richard Guenther Date: Tue, 30 Jun 2009 09:55:34 +0000 (+0000) Subject: tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to use ao_ref references. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=42bc61e05685cc6a4d96d9005dbab2e87351dddd;p=platform%2Fupstream%2Fgcc.git tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to use ao_ref references. 2009-06-30 Richard Guenther * 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 --- 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 + + * 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 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);