Commit 4fa4929e by Richard Guenther Committed by Richard Biener

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
parent 720f5239
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>
......
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>
......
......@@ -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" } } */
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment