gcc/
authorolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Feb 2015 19:16:34 +0000 (19:16 +0000)
committerolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Feb 2015 19:16:34 +0000 (19:16 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220916 138bc75d-0d04-0410-961f-82ee72b054a4

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

index d986bbc..5a652bc 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 94a01af..3461edb 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 403bd5e..4c894b6 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;
+}