From 03991bd8288adbc93c672d20fc0267dbc95cb7bb Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 23 Mar 2009 12:19:41 +0100 Subject: [PATCH] backport: re PR target/39482 (ICE in inline_secondary_memory_needed, at config/i386/i386.c:25478) Backport from mainline: 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. testsuite/ChangLog: Backport from mainline: 2009-03-17 Uros Bizjak PR target/39482 * gcc.target/i386/pr39482.c: New test. From-SVN: r145005 --- gcc/ChangeLog | 15 +++++++- gcc/config/i386/i386.md | 50 ++++++++++++------------- gcc/testsuite/ChangeLog | 8 ++++ gcc/testsuite/gcc.target/i386/pr39482.c | 9 +++++ 4 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr39482.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f756219bcc02..ee5cf1861d88 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,11 +1,22 @@ +2009-03-23 Uros Bizjak + + Backport from mainline: + 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 H.J. Lu Backport from mainline: 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-12 H.J. Lu diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 6e588ebb8694..69630d209942 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4180,34 +4180,32 @@ (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 "cvtsd2ss\t{%1, %0|%0, %1}"; + default: - gcc_unreachable (); + return "#"; } } - [(set_attr "type" "fmov,multi,ssecvt") - (set_attr "unit" "*,i387,*") + [(set_attr "type" "fmov,ssecvt,multi,multi,multi") + (set_attr "unit" "*,*,i387,i387,i387") (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) @@ -4215,14 +4213,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" @@ -4273,31 +4269,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 5c9b6fa93c63..902f8b1d38cb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2009-03-23 Uros Bizjak + + Backport from mainline: + 2009-03-17 Uros Bizjak + + PR target/39482 + * gcc.target/i386/pr39482.c: New test. + 2009-03-18 H.J. Lu Backport from mainline: diff --git a/gcc/testsuite/gcc.target/i386/pr39482.c b/gcc/testsuite/gcc.target/i386/pr39482.c new file mode 100644 index 000000000000..4e2dfa724a97 --- /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); +} -- 2.47.2