]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/65676 (ICE: in extract_insn, at recog.c:2343 (unrecognizable insn) with...
authorKirill Yukhin <kirill.yukhin@intel.com>
Thu, 16 Apr 2015 14:24:51 +0000 (14:24 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Thu, 16 Apr 2015 14:24:51 +0000 (14:24 +0000)
gcc/
PR target/65676
* config/i386/i386.c (fixup_modeless_constant): New.
(ix86_expand_args_builtin): Fixup modeless constant operand.
(ix86_expand_round_builtin): Ditto.
(ix86_expand_special_args_builtin): Ditto.
(ix86_expand_builtin): Ditto.
gcc/testsuite/
PR target/65676
* gcc.target/i386/sse-25.c: New.

From-SVN: r222149

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/sse-25.c [new file with mode: 0644]

index e0c65b6c91f67918304e8a6b46689848690ca9db..8c5b3ebff2e58b400bcdd34815c755a9adbc1284 100644 (file)
@@ -1,3 +1,12 @@
+2015-04-16  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       PR target/65676
+       * config/i386/i386.c (fixup_modeless_constant): New.
+       (ix86_expand_args_builtin): Fixup modeless constant operand.
+       (ix86_expand_round_builtin): Ditto.
+       (ix86_expand_special_args_builtin): Ditto.
+       (ix86_expand_builtin): Ditto.
+
 2015-04-10  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR target/65710
index 2c7c965fbd2450ab5d5bd9d5b6d55b11de41db9c..8d33655c2276fdb5be9d683cca4a133e98e66a60 100644 (file)
@@ -32748,6 +32748,15 @@ safe_vector_operand (rtx x, enum machine_mode mode)
   return x;
 }
 
+/* Fixup modeless constants to fit required mode.  */
+static rtx
+fixup_modeless_constant (rtx x, machine_mode mode)
+{
+  if (GET_MODE (x) == VOIDmode)
+    x = convert_to_mode (mode, x, 1);
+  return x;
+}
+
 /* Subroutine of ix86_expand_builtin to take care of binop insns.  */
 
 static rtx
@@ -34108,6 +34117,8 @@ ix86_expand_args_builtin (const struct builtin_description *d,
          if (memory_operand (op, mode))
            num_memory++;
 
+         op = fixup_modeless_constant (op, mode);
+
          if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
            {
              if (optimize || !match || num_memory > 1)
@@ -34475,6 +34486,8 @@ ix86_expand_round_builtin (const struct builtin_description *d,
          if (VECTOR_MODE_P (mode))
            op = safe_vector_operand (op, mode);
 
+         op = fixup_modeless_constant (op, mode);
+
          if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
            {
              if (optimize || !match)
@@ -34821,6 +34834,8 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
              if (VECTOR_MODE_P (mode))
                op = safe_vector_operand (op, mode);
 
+             op = fixup_modeless_constant (op, mode);
+
              if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
                op = copy_to_mode_reg (mode, op);
              else
@@ -35847,6 +35862,9 @@ addcarryx:
        op1 = copy_to_mode_reg (Pmode, op1);
       if (!insn_data[icode].operand[3].predicate (op2, mode2))
        op2 = copy_to_mode_reg (mode2, op2);
+
+      op3 = fixup_modeless_constant (op3, mode3);
+
       if (GET_MODE (op3) == mode3 || GET_MODE (op3) == VOIDmode)
        {
          if (!insn_data[icode].operand[4].predicate (op3, mode3))
@@ -35988,6 +36006,8 @@ addcarryx:
       if (!insn_data[icode].operand[0].predicate (op0, Pmode))
        op0 = copy_to_mode_reg (Pmode, op0);
 
+      op1 = fixup_modeless_constant (op1, mode1);
+
       if (GET_MODE (op1) == mode1 || GET_MODE (op1) == VOIDmode)
        {
          if (!insn_data[icode].operand[1].predicate (op1, mode1))
@@ -36034,6 +36054,8 @@ addcarryx:
       mode3 = insn_data[icode].operand[3].mode;
       mode4 = insn_data[icode].operand[4].mode;
 
+      op0 = fixup_modeless_constant (op0, mode0);
+
       if (GET_MODE (op0) == mode0
          || (GET_MODE (op0) == VOIDmode && op0 != constm1_rtx))
        {
index 8b9d88bc390648656cad384caf274d316614e79d..7e6273e2998f562b15d68ff7685bdad56ad30160 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-16  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       PR target/65676
+       * gcc.target/i386/sse-25.c: New.
+
 2015-04-14  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/56674
diff --git a/gcc/testsuite/gcc.target/i386/sse-25.c b/gcc/testsuite/gcc.target/i386/sse-25.c
new file mode 100644 (file)
index 0000000..c4b334c
--- /dev/null
@@ -0,0 +1,6 @@
+/* PR target/65676 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -funsigned-char" } */
+/* { dg-add-options bind_pic_locally } */
+
+#include "sse-23.c"