From: Uros Bizjak Date: Tue, 17 Mar 2009 18:55:40 +0000 (+0100) Subject: re PR target/39482 (ICE in inline_secondary_memory_needed, at config/i386/i386.c... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9ade279bf6d2c79adaf3ffbcafeeed2712eed7d8;p=gcc.git re PR target/39482 (ICE in inline_secondary_memory_needed, at config/i386/i386.c:25478) 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e5fa32928d..4af4b4f7d45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2009-03-17 Uros Bizjak + + 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 * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow @@ -44,14 +53,12 @@ 2009-03-17 H.J. Lu 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 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 @@ -105,7 +112,7 @@ 2008-03-13 Catherine Moore - * 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 @@ -124,8 +131,7 @@ 2009-03-12 H.J. Lu 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 @@ -138,8 +144,7 @@ 2009-03-12 H.J. Lu 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 @@ -162,8 +167,7 @@ 2009-03-11 Jakub Jelinek 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 @@ -205,8 +209,7 @@ Nathan Froyd 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 @@ -248,8 +251,7 @@ 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 @@ -480,8 +482,7 @@ 2009-03-01 Ralf Wildenhues * 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. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 023f2e19f98..39e62fbe6bd 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4458,35 +4458,33 @@ (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) @@ -4494,14 +4492,12 @@ 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" @@ -4552,31 +4548,31 @@ }) (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 "truncxf2_i387_noop" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5c34253363e..31651843422 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-03-17 Uros Bizjak + + PR target/39482 + * gcc.target/i386/pr39482.c: New test. + 2009-03-17 Jakub Jelinek 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 index 00000000000..4e2dfa724a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr39482.c @@ -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); +}