tree-vrp.c (compare_ranges): Return false for EQ_EXPR if VR0 is less than VR1 or...
authorJames A. Morrison <phython@gcc.gnu.org>
Sun, 20 Nov 2005 05:33:00 +0000 (05:33 +0000)
committerJames A. Morrison <phython@gcc.gnu.org>
Sun, 20 Nov 2005 05:33:00 +0000 (05:33 +0000)
2005-11-19  James A. Morrison  <phython@gcc.gnu.org>

        * tree-vrp.c (compare_ranges): Return false for EQ_EXPR if VR0 is less
        than VR1 or vice-versa.

From-SVN: r107243

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/vrp22.c [new file with mode: 0644]
gcc/tree-vrp.c

index a06adad06cae3bedd56eac7473c5ab02985dcff8..7cc52812c117fff59beb3ec1de74d80d7aa835ad 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-19  James A. Morrison  <phython@gcc.gnu.org>
+
+        * tree-vrp.c (compare_ranges): Return false for EQ_EXPR if VR0 is less
+        than VR1 or vice-versa.
+
 2005-11-19  Hans-Peter Nilsson  <hp@axis.com>
 
        PR middle-end/24912
index 89fdbeb9cb9bf3a291e48f6fba82c68899fb9625..edc8723f0204ab57d69ee2f82b2d7f1eac5672f4 100644 (file)
@@ -1,3 +1,7 @@
+2005-11-19  James A. Morrison  <phython@gcc.gnu.org>
+
+       * gcc.dg/tree-ssa/vrp22.c: New test.
+
 2005-11-19  Hans-Peter Nilsson  <hp@axis.com>
 
        PR middle-end/24912
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp22.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp22.c
new file mode 100644 (file)
index 0000000..1bb312a
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-vrp -fdump-tree-vrp" } */
+
+extern void link_error ();
+
+void test02(unsigned int a, unsigned int b)
+{
+  unsigned int x = 0x80000000;
+  if (a > x)
+    if (b < x)
+      if (a == b)
+        link_error ();
+}
+
+/* { dg-final { scan-tree-dump-times "link_error" 0 "vrp" } } */
+/* { dg-final { cleanup-tree-dump "vrp" } } */
index f88b23e1aeb59f3af7bd34ba002a171e5ffe57ee..af632e6f6e2dfd6ab2e0a1c1bdca9bd5a1e48f8d 100644 (file)
@@ -1878,6 +1878,10 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
          else if (cmp_min != -2 && cmp_max != -2)
            return boolean_false_node;
        }
+      /* If [V0_MIN, V1_MAX] < [V1_MIN, V1_MAX] then V0 != V1.  */
+      else if (compare_values (vr0->min, vr1->max) == 1
+              || compare_values (vr1->min, vr0->max) == 1)
+       return boolean_false_node;
 
       return NULL_TREE;
     }