aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2013-02-04 22:43:47 +0000
committerOleg Endo <olegendo@gcc.gnu.org>2013-02-04 22:43:47 +0000
commit3503fff112a2af447bb8a85832355e21d662ea69 (patch)
tree5d17bf1706f6a82e65a1168ac1e1c312ebe7442b /gcc
parent951eb5c7e26d4f976cf8bc841aa1268be5f49a06 (diff)
downloadgcc-3503fff112a2af447bb8a85832355e21d662ea69.zip
gcc-3503fff112a2af447bb8a85832355e21d662ea69.tar.gz
gcc-3503fff112a2af447bb8a85832355e21d662ea69.tar.bz2
re PR target/55146 (jumptables with byte entries produce wrong code with -Os/-O2 for SH-1)
PR target/55146 * gcc.target/sh/pr55146.c: New. From-SVN: r195743
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.target/sh/pr55146.c50
2 files changed, 56 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 29f0281..acdad16 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..11dd49f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr55146.c
@@ -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;
+}