aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2012-09-15 21:00:38 +0000
committerTom de Vries <vries@gcc.gnu.org>2012-09-15 21:00:38 +0000
commitc7e04bd6bee064373551293f46e455ff29ba89dc (patch)
tree976cd4460ac3a7e4f80a676be4927518900b6fb4
parentb25d9e22e47f47935cd28c5df552d7bea4a45581 (diff)
downloadgcc-c7e04bd6bee064373551293f46e455ff29ba89dc.zip
gcc-c7e04bd6bee064373551293f46e455ff29ba89dc.tar.gz
gcc-c7e04bd6bee064373551293f46e455ff29ba89dc.tar.bz2
vrp82.c: New test.
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
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp82.c57
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp83.c60
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp84.c21
4 files changed, 144 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2cc9263..6ae6458 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,11 @@
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 ...
* gcc.dg/tree-ssa/vrp81.c: ... this.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp82.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp82.c
new file mode 100644
index 0000000..8f9b2ff
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp82.c
@@ -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
index 0000000..6237adf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp83.c
@@ -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
index 0000000..8f8dc0d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp84.c
@@ -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" } } */