This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Try harder for conditional evaluation in VRP
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 27 May 2014 12:27:14 +0200 (CEST)
- Subject: [PATCH] Try harder for conditional evaluation in VRP
- Authentication-results: sourceware.org; auth=none
Especially for ops with symbolic ranges it may be preferable
to compare one range with an op such as in
[x + 1, x + 1] < x instead of expanding the range of x on
the rhs to sth unrelated.
So, try harder.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2014-05-27 Richard Biener <rguenther@suse.de>
* tree-vrp.c (vrp_evaluate_conditional_warnv_with_ops_using_ranges):
Try using literal operands when comparing value-ranges failed.
Index: gcc/tree-vrp.c
===================================================================
--- gcc/tree-vrp.c (revision 210931)
+++ gcc/tree-vrp.c (working copy)
@@ -6919,14 +6919,15 @@ vrp_evaluate_conditional_warnv_with_ops_
vr0 = (TREE_CODE (op0) == SSA_NAME) ? get_value_range (op0) : NULL;
vr1 = (TREE_CODE (op1) == SSA_NAME) ? get_value_range (op1) : NULL;
+ tree res = NULL_TREE;
if (vr0 && vr1)
- return compare_ranges (code, vr0, vr1, strict_overflow_p);
- else if (vr0 && vr1 == NULL)
- return compare_range_with_value (code, vr0, op1, strict_overflow_p);
- else if (vr0 == NULL && vr1)
- return (compare_range_with_value
+ res = compare_ranges (code, vr0, vr1, strict_overflow_p);
+ if (!res && vr0)
+ res = compare_range_with_value (code, vr0, op1, strict_overflow_p);
+ if (!res && vr1)
+ res = (compare_range_with_value
(swap_tree_comparison (code), vr1, op0, strict_overflow_p));
- return NULL;
+ return res;
}
/* Helper function for vrp_evaluate_conditional_warnv. */