Commit 959cef74 by Richard Biener Committed by Richard Biener

re PR tree-optimization/71947 (x ^ y not folded to 0 if x == y by DOM)

2016-07-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71947
	* tree-vrp.c (extract_range_from_assert): Singleton symbolic
	ranges have useful limit_vr information.

	* gcc.dg/tree-ssa/vrp102.c: New testcase.

From-SVN: r238591
parent 88617fe4
2016-07-21 Richard Biener <rguenther@suse.de> 2016-07-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/71947
* tree-vrp.c (extract_range_from_assert): Singleton symbolic
ranges have useful limit_vr information.
2016-07-21 Richard Biener <rguenther@suse.de>
* function-tests.c (build_trivial_generic_function): Set * function-tests.c (build_trivial_generic_function): Set
BLOCK_SUPERCONTEXT of DECL_INITIAL. BLOCK_SUPERCONTEXT of DECL_INITIAL.
* omp-low.c (create_omp_child_function): Likewise. * omp-low.c (create_omp_child_function): Likewise.
......
2016-07-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/71947
* gcc.dg/tree-ssa/vrp102.c: New testcase.
2016-07-21 Bin Cheng <bin.cheng@arm.com> 2016-07-21 Bin Cheng <bin.cheng@arm.com>
* gcc.dg/tree-ssa/scev-15.c: New. * gcc.dg/tree-ssa/scev-15.c: New.
......
/* { dg-do compile } */
/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1" } */
int f(int x, int y)
{
int ret;
if (x == y)
ret = x ^ y;
else
ret = 1;
return ret;
}
/* We should have computed x ^ y as zero and propagated the result into the
PHI feeding the result. */
/* { dg-final { scan-tree-dump "ret_\[0-9\]+ = PHI <\[01\]\\\(\[0-9\]+\\\), \[01\]\\\(\[0-9\]+\\\)>" "vrp1" } } */
...@@ -1513,10 +1513,13 @@ extract_range_from_assert (value_range *vr_p, tree expr) ...@@ -1513,10 +1513,13 @@ extract_range_from_assert (value_range *vr_p, tree expr)
limit_vr = (TREE_CODE (limit) == SSA_NAME) ? get_value_range (limit) : NULL; limit_vr = (TREE_CODE (limit) == SSA_NAME) ? get_value_range (limit) : NULL;
/* LIMIT's range is only interesting if it has any useful information. */ /* LIMIT's range is only interesting if it has any useful information. */
if (limit_vr if (! limit_vr
&& (limit_vr->type == VR_UNDEFINED || limit_vr->type == VR_UNDEFINED
|| limit_vr->type == VR_VARYING || limit_vr->type == VR_VARYING
|| symbolic_range_p (limit_vr))) || (symbolic_range_p (limit_vr)
&& ! (limit_vr->type == VR_RANGE
&& (limit_vr->min == limit_vr->max
|| operand_equal_p (limit_vr->min, limit_vr->max, 0)))))
limit_vr = NULL; limit_vr = NULL;
/* Initially, the new range has the same set of equivalences of /* Initially, the new range has the same set of equivalences of
......
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