diff options
author | Richard Guenther <rguenther@suse.de> | 2010-07-04 10:52:43 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-07-04 10:52:43 +0000 |
commit | 4fa4929ea861d9d61f9121f6fe1023b1edaaa538 (patch) | |
tree | b94daf9d7c0a50945bc7fa49b7d1a0f9ecff3c77 /gcc | |
parent | 720f52395d60fe525773c89d5ef5af1a9d9f8775 (diff) | |
download | gcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.zip gcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.tar.gz gcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.tar.bz2 |
re PR tree-optimization/44656 (VN should value-replace operands during alias-oracle walk)
2010-07-04 Richard Guenther <rguenther@suse.de>
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.
From-SVN: r161798
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 17 |
4 files changed, 30 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c69bc6c..fb54865 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-04 Richard Guenther <rguenther@suse.de> + + 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 <irar@il.ibm.com> Revital Eres <eres@il.ibm.com> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ae6c6e..fe74d60 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-04 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44656 + * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL. + 2010-07-04 Ira Rosen <irar@il.ibm.com> Revital Eres <eres@il.ibm.com> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c index 4b8239e..242727d 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 cc66720..cca1941 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; |