vrp82.c: New test.
authorTom de Vries <tom@codesourcery.com>
Sat, 15 Sep 2012 21:00:38 +0000 (21:00 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Sat, 15 Sep 2012 21:00:38 +0000 (21:00 +0000)
2012-09-15  Tom de Vries  <tom@codesourcery.com>

* gcc.dg/tree-ssa/vrp82.c: New test.
* gcc.dg/tree-ssa/vrp83.c: Same.
* gcc.dg/tree-ssa/vrp84.c: Same.

From-SVN: r191352

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/vrp82.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/vrp83.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/vrp84.c [new file with mode: 0644]

index 2cc9263ca0180c519a23c4555c90679eed9a7ce0..6ae64584dc41e9351bfbfc6243eeb3249a378d85 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-15  Tom de Vries  <tom@codesourcery.com>
+
+       * gcc.dg/tree-ssa/vrp82.c: New test.
+       * gcc.dg/tree-ssa/vrp83.c: Same.
+       * gcc.dg/tree-ssa/vrp84.c: Same.
+
 2012-09-15  Tom de Vries  <tom@codesourcery.com>
 
        * gcc.dg/tree-ssa/vrp80-2.c: Rename to ...
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp82.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp82.c
new file mode 100644 (file)
index 0000000..8f9b2ff
--- /dev/null
@@ -0,0 +1,57 @@
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+
+extern void link_error (void);
+
+void
+f2 (int c, int b)
+{
+  int s = 0;
+  if (c == 0)
+    s += 1;
+  else if (c < 1)
+    s -= 1;
+  /* s in [-1, 1].   */
+  b = (b & 1) + 1;
+  /* b in range [1, 2].  */
+  b = s << b;
+  /* b in range [-4, 4].  */
+  if (b == -5 || b == 5)
+    link_error ();
+}
+
+void
+f3 (int s, int b)
+{
+  if (s >> 3 == -2)
+    {
+      /* s in range [-16, -9].  */
+      b = (b & 1) + 1;
+      /* b in range [1, 2].  */
+      b = s << b;
+      /* b in range [bmin << smax, bmax << smin],
+                    == [-16 << 2, -9 << 1]
+                    == [-64, -18].  */
+      if (b == -65 || b == -17)
+       link_error ();
+    }
+}
+
+void
+f4 (unsigned int s, unsigned int b)
+{
+  s |= ~0xffU;
+  /* s in [0xffffff00, 0xffffffff].  */
+  b = (b & 1) + 1;
+  /* b in [1, 2].  */
+  b = s << b;
+  /* s in [0xfffffc00, 0xfffffffe].  */
+  if (b == ~0x3ffU - 1 || b == ~0x1U + 1)
+    link_error ();
+}
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp83.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp83.c
new file mode 100644 (file)
index 0000000..6237adf
--- /dev/null
@@ -0,0 +1,60 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+extern void vrp_keep (void);
+
+void
+f2 (int c, int b)
+{
+  int s = 0;
+  if (c == 0)
+    s += 1;
+  else if (c < 1)
+    s -= 1;
+  /* s in [-1, 1].   */
+  b = (b & 1) + 1;
+  /* b in range [1, 2].  */
+  b = s << b;
+  /* b in range [-4, 4].  */
+  if (b == -4)
+    vrp_keep ();
+  if (b == 4)
+    vrp_keep ();
+}
+
+void
+f3 (int s, int b)
+{
+  if (s >> 3 == -2)
+    {
+      /* s in range [-16, -9].  */
+      b = (b & 1) + 1;
+      /* b in range [1, 2].  */
+      b =  s << b;
+      /* b in range [bmin << smax, bmax << smin],
+                    == [-16 << 2, -9 << 1]
+                    == [-64, -18].  */
+      if (b == -64)
+       vrp_keep ();
+      if (b == -18)
+       vrp_keep ();
+    }
+}
+
+void
+f4 (unsigned int s, unsigned int b)
+{
+  s |= ~(0xffU);
+  /* s in [0xffffff00, 0xffffffff].  */
+  b = (b & 1) + 1;
+  /* b in [1, 2].  */
+  b = s << b;
+  /* s in [0xfffffc00, 0xfffffffe].  */
+  if (b == ~0x3ffU)
+    vrp_keep ();
+  if (b == ~0x1U)
+    vrp_keep ();
+}
+
+/* { dg-final { scan-tree-dump-times "vrp_keep \\(" 6 "vrp1"} } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp84.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp84.c
new file mode 100644 (file)
index 0000000..8f8dc0d
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+extern void vrp_keep (void);
+
+void
+f2 (int s, int b)
+{
+  if (s > 1)
+    s = 1;
+  /* s in [minint, 1].   */
+  b = (b & 1) + 1;
+  /* b in range [1, 2].  */
+  b = s << b;
+  /* b in range [minint+4, maxint-3].  */
+  if (b == -2)
+    vrp_keep ();
+}
+
+/* { dg-final { scan-tree-dump-times "vrp_keep \\(" 1 "vrp1"} } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */