mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
88617fe425
commit
959cef7434
|
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
* gcc.dg/tree-ssa/scev-15.c: New.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
/* { 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)
|
|||
limit_vr = (TREE_CODE (limit) == SSA_NAME) ? get_value_range (limit) : NULL;
|
||||
|
||||
/* LIMIT's range is only interesting if it has any useful information. */
|
||||
if (limit_vr
|
||||
&& (limit_vr->type == VR_UNDEFINED
|
||||
|| limit_vr->type == VR_VARYING
|
||||
|| symbolic_range_p (limit_vr)))
|
||||
if (! limit_vr
|
||||
|| limit_vr->type == VR_UNDEFINED
|
||||
|| limit_vr->type == VR_VARYING
|
||||
|| (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;
|
||||
|
||||
/* Initially, the new range has the same set of equivalences of
|
||||
|
|
|
|||
Loading…
Reference in New Issue