aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2007-02-05 21:20:36 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2007-02-05 21:20:36 +0000
commitb81aec1b9dea6f3f0ee8a82a5aa873ce660468b6 (patch)
treee735580523ab7adc8f5db8a6f479fcdd8ca55052 /gcc
parent9e006df67f9d95371e7074bacd72625bba0fc0cd (diff)
downloadgcc-b81aec1b9dea6f3f0ee8a82a5aa873ce660468b6.zip
gcc-b81aec1b9dea6f3f0ee8a82a5aa873ce660468b6.tar.gz
gcc-b81aec1b9dea6f3f0ee8a82a5aa873ce660468b6.tar.bz2
re PR target/30665 (peephole2 misapplied on postinc mem)
PR target/30665 * gcc.dg/torture/pr30665-1.c, gcc.dg/torture/pr30665-2.c: New tests. From-SVN: r121611
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr30665-1.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr30665-2.c57
3 files changed, 86 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index da8fdb0..d6f14ca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-02-05 Hans-Peter Nilsson <hp@axis.com>
+
+ PR target/30665
+ * gcc.dg/torture/pr30665-1.c, gcc.dg/torture/pr30665-2.c: New tests.
+
2007-02-04 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/30611
diff --git a/gcc/testsuite/gcc.dg/torture/pr30665-1.c b/gcc/testsuite/gcc.dg/torture/pr30665-1.c
new file mode 100644
index 0000000..4650408
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr30665-1.c
@@ -0,0 +1,24 @@
+/* PR target/30665: bug in cris.md peephole2 condition.
+ Testcase for trunk. */
+/* { dg-do run } */
+
+extern void abort (void);
+extern void exit (int);
+
+int __attribute__ ((__noinline__)) f (unsigned *p, int *x)
+{
+ int y = *p++ & 0xfff;
+ *x++ = y;
+ *x = *p;
+ return y;
+}
+
+int main (void)
+{
+ unsigned u[2] = { 0x3aad, 0x5ad1 };
+ int x[2] = {17689, 23456};
+
+ if (f (u, x) != 0xaad || x[0] != 0xaad || x[1] != 0x5ad1)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr30665-2.c b/gcc/testsuite/gcc.dg/torture/pr30665-2.c
new file mode 100644
index 0000000..a2cbf02
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr30665-2.c
@@ -0,0 +1,57 @@
+/* PR target/30665: bug in cris.md peephole2 condition.
+ Original reduced testcase (fails on 3.2.1 derivate, not on trunk). */
+/* { dg-do run } */
+
+extern void abort (void);
+extern void exit (int);
+
+struct t
+{
+ unsigned int a : 12;
+ unsigned int b : 12;
+ unsigned int dummy1 : 8;
+};
+
+struct area
+{
+ int xa;
+ int xb;
+};
+
+struct c
+{
+ struct area ii;
+};
+
+static struct c c;
+
+void __attribute__ ((__noinline__)) g(int a)
+{
+ if (a != 79)
+ abort ();
+}
+
+void __attribute__ ((__noinline__)) h(struct t tt)
+{
+ if (tt.a != 20 || tt.b != 79)
+ abort ();
+}
+
+void __attribute__ ((__noinline__)) s(void);
+
+int main(int argc, char **argv)
+{
+ c.ii.xa = 20;
+ c.ii.xb = 79;
+
+ s();
+
+ exit (0);
+}
+
+void __attribute__ ((__noinline__)) s(void)
+{
+ struct t ii_x = { .a = c.ii.xa, .b = c.ii.xb };
+ g(c.ii.xb);
+ h(ii_x);
+}