re PR target/12598 (Invalid size optimization on volatile memory reference)
authorHans-Peter Nilsson <hp@axis.com>
Wed, 15 Oct 2003 14:03:15 +0000 (14:03 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Wed, 15 Oct 2003 14:03:15 +0000 (14:03 +0000)
PR target/12598
* gcc.dg/torture/cris-volatile-1.c: New test.

From-SVN: r72520

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/cris-volatile-1.c [new file with mode: 0644]

index dd5b191..a983444 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-15  Hans-Peter Nilsson  <hp@axis.com>
+
+       PR target/12598
+       * gcc.dg/torture/cris-volatile-1.c: New test.
+
 2003-10-14  Roger Sayle  <roger@eyesopen.com>
 
        PR optimization/9325
diff --git a/gcc/testsuite/gcc.dg/torture/cris-volatile-1.c b/gcc/testsuite/gcc.dg/torture/cris-volatile-1.c
new file mode 100644 (file)
index 0000000..7f613c4
--- /dev/null
@@ -0,0 +1,72 @@
+/* Copyright (C) 2003  Free Software Foundation.
+   Check that size-optimizations for move insns (specifically peephole
+   optimizations) aren't applied to volatile objects in the CRIS port.
+   Origin: Hans-Peter Nilsson.  */
+/* { dg-do compile { target cris-*-* } } */
+/* { dg-final { scan-assembler-not {movu\...\[} } } */
+/* { dg-final { scan-assembler-not {move\.[^d].\[} } } */
+/* { dg-final { scan-assembler-not {and\.[^d].\[} } } */
+/* { dg-final { scan-assembler-not {or\.[^d].\[} } } */
+
+static const unsigned long c = 0x0000FF00;
+unsigned long
+a1 (void)
+{
+  unsigned long m;
+  m = *(volatile unsigned long*) 0xb00000c8;
+  m &= c;
+  return m;
+}
+extern volatile unsigned long xx;
+unsigned long
+a2 (void)
+{
+  unsigned long m;
+  m = xx;
+  m &= c;
+  return m;
+}
+extern volatile unsigned long yy[];
+unsigned long
+a3 (void)
+{
+  unsigned long m;
+  m = yy[3];
+  m &= 0xfe00;
+  return m;
+}
+unsigned long
+ac1 (void)
+{
+  unsigned long m;
+  m = *(volatile unsigned long*) 0xb00000c8;
+  m &= 0xfe00;
+  return m;
+}
+extern volatile unsigned long xx;
+unsigned long
+ac2 (void)
+{
+  unsigned long m;
+  m = xx;
+  m &= 0xfe00;
+  return m;
+}
+extern volatile unsigned long yy[];
+unsigned long
+ac3 (void)
+{
+  unsigned long m;
+  m = yy[3];
+  m &= 0xfe00;
+  return m;
+}
+extern volatile unsigned long yy[];
+unsigned long
+oc3 (void)
+{
+  unsigned long m;
+  m = yy[3];
+  m |= ~0xf;
+  return m;
+}