Early exit from irange::set for poly ints.
authorAldy Hernandez <aldyh@redhat.com>
Tue, 10 Nov 2020 13:17:52 +0000 (14:17 +0100)
committerAldy Hernandez <aldyh@redhat.com>
Tue, 10 Nov 2020 18:28:47 +0000 (19:28 +0100)
My previous cleanups to irange::set moved the early exit when
VARYING.  This caused poly int varyings to be created with
incorrect min/max.

We can just set varying and exit for all poly ints.

gcc/ChangeLog:

* value-range.cc (irange::set): Early exit for poly ints.

gcc/value-range.cc

index f83a824a982d9da961d5b00ee657e1f4ba98cb2d..b7ccba010e45661a425c10d6e5f268c49713fb19 100644 (file)
@@ -249,9 +249,11 @@ irange::set (tree min, tree max, value_range_kind kind)
       return;
     }
 
-  if (kind != VR_VARYING
-      && (POLY_INT_CST_P (min) || POLY_INT_CST_P (max)))
-    kind = VR_VARYING;
+  if (POLY_INT_CST_P (min) || POLY_INT_CST_P (max))
+    {
+      set_varying (TREE_TYPE (min));
+      return;
+    }
 
   // Nothing to canonicalize for symbolic ranges.
   if (TREE_CODE (min) != INTEGER_CST