From: rguenth Date: Sun, 4 Jul 2010 10:52:43 +0000 (+0000) Subject: 2010-07-04 Richard Guenther X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=180572f4ef6d778575bd3f3acb2d41a33e37a670;p=pf3gnuchains%2Fgcc-fork.git 2010-07-04 Richard Guenther PR tree-optimization/44656 * tree-ssa-sccvn.c (vn_reference_lookup_3): Try disambiguation again after value-replacing in the defintions lhs. * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161798 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c69bc6ce812..fb5486576c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-04 Richard Guenther + + PR tree-optimization/44656 + * tree-ssa-sccvn.c (vn_reference_lookup_3): Try disambiguation + again after value-replacing in the defintions lhs. + 2010-07-04 Ira Rosen Revital Eres diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ae6c6ebe4f..fe74d60b4ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-04 Richard Guenther + + PR tree-optimization/44656 + * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL. + 2010-07-04 Ira Rosen Revital Eres diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c index 4b8239e4531..242727d260f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c @@ -73,8 +73,7 @@ main (void) return 0; } -/* See PR44656. The last elimination is only done by PRE. */ -/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 2 "pre" } } */ +/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ /* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */ /* { dg-final { cleanup-tree-dump "pre" } } */ diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index cc667207ee0..cca1941f7b3 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1212,6 +1212,23 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_) tree base; HOST_WIDE_INT offset, maxsize; + /* First try to disambiguate after value-replacing in the definitions LHS. */ + if (is_gimple_assign (def_stmt)) + { + tree lhs = gimple_assign_lhs (def_stmt); + ao_ref ref1; + VEC (vn_reference_op_s, heap) *operands = NULL; + bool res; + copy_reference_ops_from_ref (lhs, &operands); + operands = valueize_refs (operands); + ao_ref_init_from_vn_reference (&ref1, get_alias_set (lhs), + TREE_TYPE (lhs), operands); + res = refs_may_alias_p_1 (ref, &ref1, true); + VEC_free (vn_reference_op_s, heap, operands); + if (!res) + return NULL; + } + base = ao_ref_base (ref); offset = ref->offset; maxsize = ref->max_size;