re PR target/55146 (jumptables with byte entries produce wrong code with -Os/-O2...
authorOleg Endo <olegendo@gcc.gnu.org>
Mon, 4 Feb 2013 22:43:47 +0000 (22:43 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Mon, 4 Feb 2013 22:43:47 +0000 (22:43 +0000)
PR target/55146
* gcc.target/sh/pr55146.c: New.

From-SVN: r195743

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sh/pr55146.c [new file with mode: 0644]

index 29f0281b47633fa7fe0f679e473b093b8b790392..acdad16e5ebdf380419a7df546e6c08b62227fda 100644 (file)
@@ -1,4 +1,9 @@
-2012-02-04  Oleg Endo  <olegendo@gcc.gnu.org>
+2013-02-04  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/55146
+       * gcc.target/sh/pr55146.c: New.
+
+2013-02-04  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR tree-optimization/54386
        * gcc.target/sh/pr54386.c: New.
diff --git a/gcc/testsuite/gcc.target/sh/pr55146.c b/gcc/testsuite/gcc.target/sh/pr55146.c
new file mode 100644 (file)
index 0000000..11dd49f
--- /dev/null
@@ -0,0 +1,50 @@
+/* Check that the 'extu.b' instruction is generated for short jump tables.  */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-Os" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } }  */
+/* { dg-final { scan-assembler "extu.b" } } */
+
+int
+test (int arg)
+{
+  int rc;
+  switch (arg)
+    {
+    case 0:
+      asm ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "mov r4,%0"
+          : "=r" (rc)
+          : "r" (arg));
+      break;
+    case 1:
+      asm ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "mov r5,%0"
+          : "=r" (rc)
+          : "r" (arg));
+      break;
+    case 2:
+      asm ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "mov r6,%0"
+          : "=r" (rc)
+          : "r" (arg));
+      break;
+    case 3:
+      asm ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "mov r7,%0"
+          : "=r" (rc)
+          : "r" (arg));
+      break;
+    case 4:
+      asm ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\t"
+          "mov r8,%0"
+          : "=r" (rc)
+          : "r" (arg));
+      break;
+    }
+  return rc;
+}