re PR target/65163 ([SH] ICE in decompose at rtl.h:2007)
authorOleg Endo <olegendo@gcc.gnu.org>
Mon, 23 Feb 2015 19:16:34 +0000 (19:16 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Mon, 23 Feb 2015 19:16:34 +0000 (19:16 +0000)
gcc/
PR target/65163
* config/sh/sh.md (swapbsi2, related peephole2): Use const_int -65536
instead of const_int 4294901760.

gcc/testsuite/
PR target/65163
* gcc.c-torture/compile/pr65163.c: New.

From-SVN: r220916

gcc/ChangeLog
gcc/config/sh/sh.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr65163.c [new file with mode: 0644]

index d986bbc0da362a1518ec5eab3c94a24719cbd675..5a652bce77ff1a8f714b24d42d196bf7c07ed714 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/65163
+       * config/sh/sh.md (swapbsi2, related peephole2): Use const_int -65536
+       instead of const_int 4294901760.
+
 2015-02-23  Georg-Johann Lay  <avr@gjlay.de>
 
        * config/avr/t-avr: Fix typo in comment.
index 94a01af6ba01ab6cc3c041d093e9a11c3daa59ea..3461edbc1246dabad7dd5b63236d894f8ac2f8ef 100644 (file)
@@ -6218,7 +6218,7 @@ label:
 (define_insn "swapbsi2"
   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "r")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
@@ -6286,7 +6286,7 @@ label:
 (define_peephole2
   [(set (match_operand:SI 0 "arith_reg_dest" "")
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
@@ -6296,7 +6296,7 @@ label:
   "TARGET_SH1 && peep2_reg_dead_p (2, operands[0])"
   [(set (match_dup 2)
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
index 403bd5ee538c7b6f0b36f20c557620d7459e08f7..4c894b6f564e9a96ef3db1899c399534a5ec660f 100644 (file)
@@ -1,3 +1,8 @@
+2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/65163
+       * gcc.c-torture/compile/pr65163.c: New.
+
 2015-02-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
        * gcc.dg/hoist-register-pressure-1.c: Make S/390 target check work
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr65163.c b/gcc/testsuite/gcc.c-torture/compile/pr65163.c
new file mode 100644 (file)
index 0000000..3a6b288
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/65163  */
+
+typedef unsigned int uint32_t;
+typedef unsigned short uint16_t;
+union unaligned_32 { uint32_t l; } __attribute__((packed));
+union unaligned_16 { uint16_t l; } __attribute__((packed));
+
+int
+test_00 (unsigned char* buf, int bits_per_component)
+{
+  (((union unaligned_32*)(buf))->l) =
+    __builtin_bswap32 (bits_per_component == 10 ? 1 : 0);
+  return 0;
+}
+
+int
+test_01 (unsigned char* buf, int bits_per_component)
+{
+  (((union unaligned_16*)(buf))->l) =
+    __builtin_bswap16 (bits_per_component == 10 ? 1 : 0);
+  return 0;
+}