re PR target/39482 (ICE in inline_secondary_memory_needed, at config/i386/i386.c...
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 17 Mar 2009 18:55:40 +0000 (19:55 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 17 Mar 2009 18:55:40 +0000 (19:55 +0100)
PR target/39482
* config/i386/i386.md (*truncdfsf_mixed): Avoid combining registers
from different units in a single alternative.
(*truncdfsf_i387): Ditto.
(*truncxfsf2_mixed): Ditto.
(*truncxfdf2_mixed): Ditto.

testsuite/ChangeLog:

PR target/39482
* gcc.target/i386/pr39482.c: New test.

From-SVN: r144915

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

index 8e5fa32928d27f65c3af3cb8a3d3ab9bde860ff5..4af4b4f7d456e332f7a61a606352d82ddfd41531 100644 (file)
@@ -1,3 +1,12 @@
+2009-03-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/39482
+       * config/i386/i386.md (*truncdfsf_mixed): Avoid combining registers
+       from different units in a single alternative.
+       (*truncdfsf_i387): Ditto.
+       (*truncxfsf2_mixed): Ditto.
+       (*truncxfdf2_mixed): Ditto.
+
 2009-03-17  Jakub Jelinek  <jakub@redhat.com>
 
        * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow
 2009-03-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/39477
-       * doc/extend.texi: Correct register behavior for regparm on
-       Intel 386.
+       * doc/extend.texi: Correct register behavior for regparm on Intel 386.
 
 2009-03-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/39476
-       * config/i386/i386.c (ix86_function_regparm): Rewrite for
-       64bit.
+       * config/i386/i386.c (ix86_function_regparm): Rewrite for 64bit.
 
 2009-03-17  H.J. Lu  <hongjiu.lu@intel.com>
 
 
 2008-03-13  Catherine Moore  <clm@codesourcery.com>
 
-       *  gcc/config/i386/x-mingw32 (host-mingw32.o): Replace
+       * gcc/config/i386/x-mingw32 (host-mingw32.o): Replace
        diagnostic.h with $(DIAGNOSTIC_H).
 
 2008-03-12  Jakub Jelinek  <jakub@redhat.com>
 2009-03-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/39445
-       * config/i386/i386.c (ix86_expand_push): Don't set memory
-       alignment.
+       * config/i386/i386.c (ix86_expand_push): Don't set memory alignment.
 
 2009-03-12  H.J. Lu  <hongjiu.lu@intel.com>
 
 2009-03-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/38824
-       * config/i386/i386.md: Compare REGNO on the new peephole2
-       patterns.
+       * config/i386/i386.md: Compare REGNO on the new peephole2 patterns.
 
 2009-03-12  Vladimir Makarov  <vmakarov@redhat.com>
 
 2009-03-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/39137
-       * cfgexpand.c (get_decl_align_unit): Use LOCAL_DECL_ALIGNMENT
-       macro.
+       * cfgexpand.c (get_decl_align_unit): Use LOCAL_DECL_ALIGNMENT macro.
        * defaults.h (LOCAL_DECL_ALIGNMENT): Define if not yet defined.
        * config/i386/i386.h (LOCAL_DECL_ALIGNMENT): Define.
        * config/i386/i386.c (ix86_local_alignment): For
            Nathan Froyd  <froydnj@codesourcery.com>
 
        PR middle-end/37850
-       * libgcc2.c (__mulMODE3): Use explicit assignments to form the
-       result.
+       * libgcc2.c (__mulMODE3): Use explicit assignments to form the result.
        (__divMODE3): Likewise.
 
 2009-03-09  Jakub Jelinek  <jakub@redhat.com>
        of referenced_var_check_and_insert.
 
        PR debug/39372
-       * dwarf2out.c (add_abstract_origin_attribute): Return
-       origin_die.
+       * dwarf2out.c (add_abstract_origin_attribute): Return origin_die.
        (gen_variable_die): Emit DW_AT_location on abstract static variable's
        DIE, don't emit it if abstract origin already has it.
        * tree-cfg.c (remove_useless_stmts_bind): GIMPLE_BINDs with any
 2009-03-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * optc-gen.awk: No need to duplicate option flags twice.
-       Reuse help texts for duplicate options which do not have
-       any.
+       Reuse help texts for duplicate options which do not have any.
 
        * gcc.c (display_help): Document --version.
 
index 023f2e19f9817004456817daadd1745dc9106f0e..39e62fbe6bd44323614aa73d85926298f2c6d29c 100644 (file)
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?fx*r,Y2")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,Y2 ,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:DF 1 "nonimmediate_operand" "f ,f    ,Y2m")))
-   (clobber (match_operand:SF 2 "memory_operand"     "=X,m    ,X"))]
+         (match_operand:DF 1 "nonimmediate_operand" "f ,Y2m,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"     "=X,X  ,m ,m ,m"))]
   "TARGET_MIX_SSE_I387"
 {
   switch (which_alternative)
     {
     case 0:
       return output_387_reg_move (insn, operands);
-
     case 1:
-      return "#";
-    case 2:
       return "%vcvtsd2ss\t{%1, %d0|%d0, %1}";
+
     default:
-      gcc_unreachable ();
+      return "#";
     }
 }
-  [(set_attr "type" "fmov,multi,ssecvt")
-   (set_attr "unit" "*,i387,*")
-   (set_attr "prefix" "orig,orig,maybe_vex")
+  [(set_attr "type" "fmov,ssecvt,multi,multi,multi")
+   (set_attr "unit" "*,*,i387,i387,i387")
+   (set_attr "prefix" "orig,maybe_vex,orig,orig,orig")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_i387"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:DF 1 "nonimmediate_operand" "f,f")))
-   (clobber (match_operand:SF 2 "memory_operand" "=X,m"))]
+         (match_operand:DF 1 "nonimmediate_operand" "f ,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"     "=X,m ,m ,m"))]
   "TARGET_80387"
 {
   switch (which_alternative)
     case 0:
       return output_387_reg_move (insn, operands);
 
-    case 1:
-      return "#";
     default:
-      gcc_unreachable ();
+      return "#";
     }
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf2_i387_1"
 })
 
 (define_insn "*truncxfsf2_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:XF 1 "register_operand" "f,f")))
-   (clobber (match_operand:SF 2 "memory_operand" "=X,m"))]
+         (match_operand:XF 1 "register_operand"   "f ,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"   "=X,m ,m ,m"))]
   "TARGET_80387"
 {
   gcc_assert (!which_alternative);
   return output_387_reg_move (insn, operands);
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncxfdf2_mixed"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?fY2*r")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f,?Y2,?*r")
        (float_truncate:DF
-         (match_operand:XF 1 "register_operand" "f,f")))
-   (clobber (match_operand:DF 2 "memory_operand" "=X,m"))]
+         (match_operand:XF 1 "register_operand"   "f ,f ,f  ,f")))
+   (clobber (match_operand:DF 2 "memory_operand"   "=X,m ,m  ,m"))]
   "TARGET_80387"
 {
   gcc_assert (!which_alternative);
   return output_387_reg_move (insn, operands);
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "DF")])
 
 (define_insn "truncxf<mode>2_i387_noop"
index 5c34253363ee199b33437aafd0e3adfed10e7d16..31651843422fd163e0cd06629e27aba8d975e069 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/39482
+       * gcc.target/i386/pr39482.c: New test.
+
 2009-03-17  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/39471
diff --git a/gcc/testsuite/gcc.target/i386/pr39482.c b/gcc/testsuite/gcc.target/i386/pr39482.c
new file mode 100644 (file)
index 0000000..4e2dfa7
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-mno-sse2" } */
+
+extern double log (double __x);
+
+double foo (unsigned long int m_liOutputBufferLen)
+{
+  return log ((double) m_liOutputBufferLen);
+}