re PR target/46883 (GCC ICE with error: unrecognizable insn)
authorChung-Lin Tang <cltang@codesourcery.com>
Thu, 16 Dec 2010 05:10:18 +0000 (05:10 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Thu, 16 Dec 2010 05:10:18 +0000 (05:10 +0000)
2010-12-16  Chung-Lin Tang  <cltang@codesourcery.com>

PR target/46883
* config/arm/arm.md
(zero_extendhisi2 for register input splitter): Change
"register_operand" to "s_register_operand".
(zero_extendqisi2 for register input splitter): Same.

testsuite/
* gcc.target/arm/pr46883.c: New testcase.

From-SVN: r167900

gcc/ChangeLog
gcc/config/arm/arm.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr46883.c [new file with mode: 0644]

index 57de984bcc2bb0b539fd6d6fb9dcb70b111c7eee..d9238215dfad2cceae97fa4d77ab433aaabc83e2 100644 (file)
@@ -1,3 +1,11 @@
+2010-12-16  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR target/46883
+       * config/arm/arm.md
+       (zero_extendhisi2 for register input splitter): Change
+       "register_operand" to "s_register_operand".
+       (zero_extendqisi2 for register input splitter): Same.
+
 2010-12-16  Jan Hubicka  <jh@suse.cz>
 
        PR middle-end/46939
index 889b86ff76407b75822bc4c724e2240b344a3a01..20431d30103c025de453f835854ac588a9dc1121 100644 (file)
 })
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "")
-       (zero_extend:SI (match_operand:HI 1 "register_operand" "")))]
+  [(set (match_operand:SI 0 "s_register_operand" "")
+       (zero_extend:SI (match_operand:HI 1 "s_register_operand" "")))]
   "!TARGET_THUMB2 && !arm_arch6"
   [(set (match_dup 0) (ashift:SI (match_dup 2) (const_int 16)))
    (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 16)))]
 })
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "")
-       (zero_extend:SI (match_operand:QI 1 "register_operand" "")))]
+  [(set (match_operand:SI 0 "s_register_operand" "")
+       (zero_extend:SI (match_operand:QI 1 "s_register_operand" "")))]
   "!arm_arch6"
   [(set (match_dup 0) (ashift:SI (match_dup 2) (const_int 24)))
    (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 24)))]
index 18e3107dff97ada219cda7cdb3bfa76ba6ff08ea..d13adc36e511413ebc8c9b1b810fa982ec00c927 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-16  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR target/46883
+       * gcc.target/arm/pr46883.c: New testcase.
+
 2010-12-16  Jan Hubicka  <jh@suse.cz>
 
        PR lto/46976
diff --git a/gcc/testsuite/gcc.target/arm/pr46883.c b/gcc/testsuite/gcc.target/arm/pr46883.c
new file mode 100644 (file)
index 0000000..c85b902
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -march=armv5te" } */
+
+void bar (unsigned char *q, unsigned short *data16s, int len)
+{
+  int i;
+
+  for (i = 0; i < len; i++)
+    {
+      q[2 * i] =
+        (((data16s[i] & 0xFF) << 8) | ((data16s[i] >> 8) & 0xFF)) & 0xFF;
+      q[2 * i + 1] =
+        ((unsigned short)
+         (((data16s[i] & 0xFF) << 8) | ((data16s[i] >> 8) & 0xFF))) >> 8;
+    }
+}