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/tree-ssa-sccvn.c | |
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/tree-ssa-sccvn.c')
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 17 |
1 files changed, 17 insertions, 0 deletions
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; |