re PR target/58475 (SH4 insn swapb does not satisfy its constraints:)
authorChristian Bruel <chrbr@gcc.gnu.org>
Mon, 23 Sep 2013 08:30:00 +0000 (10:30 +0200)
committerChristian Bruel <chrbr@gcc.gnu.org>
Mon, 23 Sep 2013 08:30:00 +0000 (10:30 +0200)
2013-09-23  Christian Bruel  <christian.bruel@st.com>

        PR target/58475
        * config/sh/sh.md (movsf_ie): Allow fpul_operand.
        * config/sh/predicate.md (arith_reg_operand): Disallow FPUL_REG.

From-SVN: r202825

gcc/ChangeLog
gcc/config/sh/predicates.md
gcc/config/sh/sh.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sh/torture/pr58475.c [new file with mode: 0644]

index 1d9c5a9c3e9a7d1ab622c14b4fb197f49f9f8c54..15369d6bbe979beb47faa9fef0288ba2b7240759 100644 (file)
@@ -1,3 +1,9 @@
+2013-09-23  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/58475
+       * config/sh/sh.md (movsf_ie): Allow fpul_operand.
+       * config/sh/predicate.md (arith_reg_operand): Disallow FPUL_REG.
+
 2013-09-23  James Greenhalgh  <james.greenhalgh@arm.com>
 
        Revert r202780:
@@ -7,6 +13,7 @@
        (aarch64_expand_epilogue): Likewise.
        (aarch64_legitimize_reload_address): Likewise.
 
+>>>>>>> .r202824
 2013-09-22  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gimplify.c (gimplify_asm_expr): Reset the TREE_CHAIN of clobbers to
index 998ba7300ad2e9798e9d4514c3d0001cd70f6429..10d741abc46df24a52704f8dfb15c33b37ed8c4f 100644 (file)
 
       return (regno != T_REG && regno != PR_REG
              && ! TARGET_REGISTER_P (regno)
-             && (regno != FPUL_REG || TARGET_SH4)
+             && regno != FPUL_REG
              && regno != MACH_REG && regno != MACL_REG);
     }
   /* Allow a no-op sign extension - compare LOAD_EXTEND_OP.
index 2c20d3868a45c60a0c55fa66df4f0eb7fc67e86c..db6c0b6fb1c276d223a7d621b4ada391554a1a55 100644 (file)
@@ -8203,15 +8203,9 @@ label:
    (use (match_operand:PSI 2 "fpscr_operand" "c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c"))
    (clobber (match_scratch:SI 3 "=X,X,Bsc,Bsc,&z,X,X,X,X,X,X,X,X,y,X,X,X,X,X"))]
   "TARGET_SH2E
-   && (arith_reg_operand (operands[0], SFmode)
-       || arith_reg_operand (operands[1], SFmode)
-       || arith_reg_operand (operands[3], SImode)
-       || (fpul_operand (operands[0], SFmode)
-          && memory_operand (operands[1], SFmode)
-          && GET_CODE (XEXP (operands[1], 0)) == POST_INC)
-       || (fpul_operand (operands[1], SFmode)
-          && memory_operand (operands[0], SFmode)
-          && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC))"
+   && (arith_reg_operand (operands[0], SFmode) || fpul_operand (operands[0], SFmode)
+       || arith_reg_operand (operands[1], SFmode) || fpul_operand (operands[1], SFmode)
+       || arith_reg_operand (operands[3], SImode))"
   "@
        fmov    %1,%0
        mov     %1,%0
index e17d519ffc7232111a9d5b6f2ddc67e2812aaf5e..330bb1cc86a6df378708df1b2091b78a53e0e1b8 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-23  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/58475
+       * gcc.target/sh/torture/pr58475.c: New test.
+
 2013-09-23  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/58355
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr58475.c b/gcc/testsuite/gcc.target/sh/torture/pr58475.c
new file mode 100644 (file)
index 0000000..a1153da
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile { target "sh*-*-*" } } */
+
+int
+kerninfo(int __bsx, double tscale)
+{
+ return (
+        (int)(__extension__
+              ({
+                ((((__bsx) & 0xff000000u) >> 24)
+                 | (((__bsx) & 0x00ff0000) >> 8)
+                 | (((__bsx) & 0x0000ff00) << 8)
+                 | (((__bsx) & 0x000000ff) << 24)
+                 ); }))
+              * tscale);
+}