diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-04 10:52:43 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-04 10:52:43 +0000 |
commit | 180572f4ef6d778575bd3f3acb2d41a33e37a670 (patch) | |
tree | b94daf9d7c0a50945bc7fa49b7d1a0f9ecff3c77 /gcc/tree-ssa-sccvn.c | |
parent | 0822b158e9f917b79d48c9866ca15e6eb6179ff1 (diff) | |
download | gcc-180572f4ef6d778575bd3f3acb2d41a33e37a670.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161798 138bc75d-0d04-0410-961f-82ee72b054a4
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 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; |