re PR tree-optimization/55936 (Missed VRP optimization)
2016-03-03 Richard Biener <rguenther@suse.de> PR tree-optimization/55936 * tree-vrp.c (compare_name_with_value): Add use_equiv_p parameter and guard unsafe equivalence use. (vrp_evaluate_conditional_warnv_with_ops): Always use safe equivalences but not via the quadratic compare_names helper. * gcc.dg/tree-ssa/vrp06.c: Remove XFAIL. From-SVN: r233928
This commit is contained in:
parent
0a67ef4c4d
commit
a75f5e30cc
4 changed files with 36 additions and 20 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2016-03-03 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/55936
|
||||||
|
* tree-vrp.c (compare_name_with_value): Add use_equiv_p
|
||||||
|
parameter and guard unsafe equivalence use.
|
||||||
|
(vrp_evaluate_conditional_warnv_with_ops): Always use
|
||||||
|
safe equivalences but not via the quadratic compare_names
|
||||||
|
helper.
|
||||||
|
|
||||||
2016-03-03 Michael Collison <michael.collison@linaro.org>
|
2016-03-03 Michael Collison <michael.collison@linaro.org>
|
||||||
|
|
||||||
PR target/70014
|
PR target/70014
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-03-03 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/55936
|
||||||
|
* gcc.dg/tree-ssa/vrp06.c: Remove XFAIL.
|
||||||
|
|
||||||
2016-03-02 Jeff Law <law@redhat.com>
|
2016-03-02 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
PR rtl-optimization/69942
|
PR rtl-optimization/69942
|
||||||
|
|
|
@ -30,4 +30,4 @@ foo (int i, int j, int a)
|
||||||
|
|
||||||
/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9\]+.*0 to 0" 1 "vrp1" } } */
|
/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9\]+.*0 to 0" 1 "vrp1" } } */
|
||||||
/* { dg-final { scan-tree-dump-times "Folding predicate j_\[0-9\]+.*0 to 1" 1 "vrp1" } } */
|
/* { dg-final { scan-tree-dump-times "Folding predicate j_\[0-9\]+.*0 to 1" 1 "vrp1" } } */
|
||||||
/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" { xfail *-*-* } } } */
|
/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" } } */
|
||||||
|
|
|
@ -7161,7 +7161,7 @@ get_vr_for_comparison (int i)
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
compare_name_with_value (enum tree_code comp, tree var, tree val,
|
compare_name_with_value (enum tree_code comp, tree var, tree val,
|
||||||
bool *strict_overflow_p)
|
bool *strict_overflow_p, bool use_equiv_p)
|
||||||
{
|
{
|
||||||
bitmap_iterator bi;
|
bitmap_iterator bi;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
@ -7196,6 +7196,11 @@ compare_name_with_value (enum tree_code comp, tree var, tree val,
|
||||||
|
|
||||||
EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
|
EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
|
||||||
{
|
{
|
||||||
|
if (! use_equiv_p
|
||||||
|
&& ! SSA_NAME_IS_DEFAULT_DEF (ssa_name (i))
|
||||||
|
&& prop_simulate_again_p (SSA_NAME_DEF_STMT (ssa_name (i))))
|
||||||
|
continue;
|
||||||
|
|
||||||
equiv_vr = get_vr_for_comparison (i);
|
equiv_vr = get_vr_for_comparison (i);
|
||||||
sop = false;
|
sop = false;
|
||||||
t = compare_range_with_value (comp, &equiv_vr, val, &sop);
|
t = compare_range_with_value (comp, &equiv_vr, val, &sop);
|
||||||
|
@ -7381,24 +7386,21 @@ vrp_evaluate_conditional_warnv_with_ops (enum tree_code code, tree op0,
|
||||||
&& !POINTER_TYPE_P (TREE_TYPE (op0)))
|
&& !POINTER_TYPE_P (TREE_TYPE (op0)))
|
||||||
return NULL_TREE;
|
return NULL_TREE;
|
||||||
|
|
||||||
if (use_equiv_p)
|
if ((ret = vrp_evaluate_conditional_warnv_with_ops_using_ranges
|
||||||
{
|
(code, op0, op1, strict_overflow_p)))
|
||||||
if (only_ranges
|
return ret;
|
||||||
&& (ret = vrp_evaluate_conditional_warnv_with_ops_using_ranges
|
if (only_ranges)
|
||||||
(code, op0, op1, strict_overflow_p)))
|
*only_ranges = false;
|
||||||
return ret;
|
/* Do not use compare_names during propagation, it's quadratic. */
|
||||||
*only_ranges = false;
|
if (TREE_CODE (op0) == SSA_NAME && TREE_CODE (op1) == SSA_NAME
|
||||||
if (TREE_CODE (op0) == SSA_NAME && TREE_CODE (op1) == SSA_NAME)
|
&& use_equiv_p)
|
||||||
return compare_names (code, op0, op1, strict_overflow_p);
|
return compare_names (code, op0, op1, strict_overflow_p);
|
||||||
else if (TREE_CODE (op0) == SSA_NAME)
|
else if (TREE_CODE (op0) == SSA_NAME)
|
||||||
return compare_name_with_value (code, op0, op1, strict_overflow_p);
|
return compare_name_with_value (code, op0, op1,
|
||||||
else if (TREE_CODE (op1) == SSA_NAME)
|
strict_overflow_p, use_equiv_p);
|
||||||
return (compare_name_with_value
|
else if (TREE_CODE (op1) == SSA_NAME)
|
||||||
(swap_tree_comparison (code), op1, op0, strict_overflow_p));
|
return compare_name_with_value (swap_tree_comparison (code), op1, op0,
|
||||||
}
|
strict_overflow_p, use_equiv_p);
|
||||||
else
|
|
||||||
return vrp_evaluate_conditional_warnv_with_ops_using_ranges (code, op0, op1,
|
|
||||||
strict_overflow_p);
|
|
||||||
return NULL_TREE;
|
return NULL_TREE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue