And now with patch!

On 11/4/19 11:15 PM, Aldy Hernandez wrote:
There's no need to special case pointers when converting suitable VR_ANTI_RANGE's into VR_RANGE's now that vrp_val*{min, max} handle pointers by default.

OK?
commit 2a8a783d542158405d2b90b5361669a8aa56ea83
Author: Aldy Hernandez <al...@redhat.com>
Date:   Mon Nov 4 21:19:36 2019 +0100

    Do not special case pointers in value_range_base::set.

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32af8bb3e9a..6fbbf87e294 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2019-11-04  Aldy Hernandez  <al...@redhat.com>
+
+	* tree-vrp.c (value_range_base::set): Do not special case pointers.
+
 2019-11-04  Aldy Hernandez  <al...@redhat.com>
 
 	* tree-vrp.h (vrp_val_min): Remove handle_pointers argument.
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 0a0d7d760a7..452895bfc24 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -793,10 +793,8 @@ value_range_base::set (enum value_range_kind kind, tree min, tree max)
     {
       /* For -fstrict-enums we may receive out-of-range ranges so consider
          values < -INF and values > INF as -INF/INF as well.  */
-      bool is_min = (INTEGRAL_TYPE_P (type)
-		     && tree_int_cst_compare (min, TYPE_MIN_VALUE (type)) <= 0);
-      bool is_max = (INTEGRAL_TYPE_P (type)
-		     && tree_int_cst_compare (max, TYPE_MAX_VALUE (type)) >= 0);
+      bool is_min = vrp_val_is_min (min);
+      bool is_max = vrp_val_is_max (max);
 
       if (is_min && is_max)
 	{
@@ -816,10 +814,7 @@ value_range_base::set (enum value_range_kind kind, tree min, tree max)
 	    min = max = vrp_val_min (TREE_TYPE (min));
 	  kind = VR_RANGE;
 	}
-      else if (is_min
-	       /* Allow non-zero pointers to be normalized to [1,MAX].  */
-	       || (POINTER_TYPE_P (TREE_TYPE (min))
-		   && integer_zerop (min)))
+      else if (is_min)
         {
 	  tree one = build_int_cst (TREE_TYPE (max), 1);
 	  min = int_const_binop (PLUS_EXPR, max, one);

Reply via email to