Commit 9ade279b by Uros Bizjak

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
parent df5deb18
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> 2009-03-17 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow
...@@ -44,14 +53,12 @@ ...@@ -44,14 +53,12 @@
2009-03-17 H.J. Lu <hongjiu.lu@intel.com> 2009-03-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/39477 PR target/39477
* doc/extend.texi: Correct register behavior for regparm on * doc/extend.texi: Correct register behavior for regparm on Intel 386.
Intel 386.
2009-03-17 H.J. Lu <hongjiu.lu@intel.com> 2009-03-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/39476 PR target/39476
* config/i386/i386.c (ix86_function_regparm): Rewrite for * config/i386/i386.c (ix86_function_regparm): Rewrite for 64bit.
64bit.
2009-03-17 H.J. Lu <hongjiu.lu@intel.com> 2009-03-17 H.J. Lu <hongjiu.lu@intel.com>
...@@ -105,7 +112,7 @@ ...@@ -105,7 +112,7 @@
2008-03-13 Catherine Moore <clm@codesourcery.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). diagnostic.h with $(DIAGNOSTIC_H).
2008-03-12 Jakub Jelinek <jakub@redhat.com> 2008-03-12 Jakub Jelinek <jakub@redhat.com>
...@@ -124,8 +131,7 @@ ...@@ -124,8 +131,7 @@
2009-03-12 H.J. Lu <hongjiu.lu@intel.com> 2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
PR target/39445 PR target/39445
* config/i386/i386.c (ix86_expand_push): Don't set memory * config/i386/i386.c (ix86_expand_push): Don't set memory alignment.
alignment.
2009-03-12 H.J. Lu <hongjiu.lu@intel.com> 2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
...@@ -138,8 +144,7 @@ ...@@ -138,8 +144,7 @@
2009-03-12 H.J. Lu <hongjiu.lu@intel.com> 2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
PR target/38824 PR target/38824
* config/i386/i386.md: Compare REGNO on the new peephole2 * config/i386/i386.md: Compare REGNO on the new peephole2 patterns.
patterns.
2009-03-12 Vladimir Makarov <vmakarov@redhat.com> 2009-03-12 Vladimir Makarov <vmakarov@redhat.com>
...@@ -162,8 +167,7 @@ ...@@ -162,8 +167,7 @@
2009-03-11 Jakub Jelinek <jakub@redhat.com> 2009-03-11 Jakub Jelinek <jakub@redhat.com>
PR target/39137 PR target/39137
* cfgexpand.c (get_decl_align_unit): Use LOCAL_DECL_ALIGNMENT * cfgexpand.c (get_decl_align_unit): Use LOCAL_DECL_ALIGNMENT macro.
macro.
* defaults.h (LOCAL_DECL_ALIGNMENT): Define if not yet defined. * defaults.h (LOCAL_DECL_ALIGNMENT): Define if not yet defined.
* config/i386/i386.h (LOCAL_DECL_ALIGNMENT): Define. * config/i386/i386.h (LOCAL_DECL_ALIGNMENT): Define.
* config/i386/i386.c (ix86_local_alignment): For * config/i386/i386.c (ix86_local_alignment): For
...@@ -205,8 +209,7 @@ ...@@ -205,8 +209,7 @@
Nathan Froyd <froydnj@codesourcery.com> Nathan Froyd <froydnj@codesourcery.com>
PR middle-end/37850 PR middle-end/37850
* libgcc2.c (__mulMODE3): Use explicit assignments to form the * libgcc2.c (__mulMODE3): Use explicit assignments to form the result.
result.
(__divMODE3): Likewise. (__divMODE3): Likewise.
2009-03-09 Jakub Jelinek <jakub@redhat.com> 2009-03-09 Jakub Jelinek <jakub@redhat.com>
...@@ -248,8 +251,7 @@ ...@@ -248,8 +251,7 @@
of referenced_var_check_and_insert. of referenced_var_check_and_insert.
PR debug/39372 PR debug/39372
* dwarf2out.c (add_abstract_origin_attribute): Return * dwarf2out.c (add_abstract_origin_attribute): Return origin_die.
origin_die.
(gen_variable_die): Emit DW_AT_location on abstract static variable's (gen_variable_die): Emit DW_AT_location on abstract static variable's
DIE, don't emit it if abstract origin already has it. DIE, don't emit it if abstract origin already has it.
* tree-cfg.c (remove_useless_stmts_bind): GIMPLE_BINDs with any * tree-cfg.c (remove_useless_stmts_bind): GIMPLE_BINDs with any
...@@ -480,8 +482,7 @@ ...@@ -480,8 +482,7 @@
2009-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> 2009-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* optc-gen.awk: No need to duplicate option flags twice. * optc-gen.awk: No need to duplicate option flags twice.
Reuse help texts for duplicate options which do not have Reuse help texts for duplicate options which do not have any.
any.
* gcc.c (display_help): Document --version. * gcc.c (display_help): Document --version.
......
...@@ -4458,35 +4458,33 @@ ...@@ -4458,35 +4458,33 @@
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncdfsf_mixed" (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 (float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f ,f ,Y2m"))) (match_operand:DF 1 "nonimmediate_operand" "f ,Y2m,f ,f ,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m ,X"))] (clobber (match_operand:SF 2 "memory_operand" "=X,X ,m ,m ,m"))]
"TARGET_MIX_SSE_I387" "TARGET_MIX_SSE_I387"
{ {
switch (which_alternative) switch (which_alternative)
{ {
case 0: case 0:
return output_387_reg_move (insn, operands); return output_387_reg_move (insn, operands);
case 1: case 1:
return "#";
case 2:
return "%vcvtsd2ss\t{%1, %d0|%d0, %1}"; return "%vcvtsd2ss\t{%1, %d0|%d0, %1}";
default: default:
gcc_unreachable (); return "#";
} }
} }
[(set_attr "type" "fmov,multi,ssecvt") [(set_attr "type" "fmov,ssecvt,multi,multi,multi")
(set_attr "unit" "*,i387,*") (set_attr "unit" "*,*,i387,i387,i387")
(set_attr "prefix" "orig,orig,maybe_vex") (set_attr "prefix" "orig,maybe_vex,orig,orig,orig")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncdfsf_i387" (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 (float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f,f"))) (match_operand:DF 1 "nonimmediate_operand" "f ,f ,f ,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m"))] (clobber (match_operand:SF 2 "memory_operand" "=X,m ,m ,m"))]
"TARGET_80387" "TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -4494,14 +4492,12 @@ ...@@ -4494,14 +4492,12 @@
case 0: case 0:
return output_387_reg_move (insn, operands); return output_387_reg_move (insn, operands);
case 1:
return "#";
default: default:
gcc_unreachable (); return "#";
} }
} }
[(set_attr "type" "fmov,multi") [(set_attr "type" "fmov,multi,multi,multi")
(set_attr "unit" "*,i387") (set_attr "unit" "*,i387,i387,i387")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncdfsf2_i387_1" (define_insn "*truncdfsf2_i387_1"
...@@ -4552,31 +4548,31 @@ ...@@ -4552,31 +4548,31 @@
}) })
(define_insn "*truncxfsf2_mixed" (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 (float_truncate:SF
(match_operand:XF 1 "register_operand" "f,f"))) (match_operand:XF 1 "register_operand" "f ,f ,f ,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m"))] (clobber (match_operand:SF 2 "memory_operand" "=X,m ,m ,m"))]
"TARGET_80387" "TARGET_80387"
{ {
gcc_assert (!which_alternative); gcc_assert (!which_alternative);
return output_387_reg_move (insn, operands); return output_387_reg_move (insn, operands);
} }
[(set_attr "type" "fmov,multi") [(set_attr "type" "fmov,multi,multi,multi")
(set_attr "unit" "*,i387") (set_attr "unit" "*,i387,i387,i387")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncxfdf2_mixed" (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 (float_truncate:DF
(match_operand:XF 1 "register_operand" "f,f"))) (match_operand:XF 1 "register_operand" "f ,f ,f ,f")))
(clobber (match_operand:DF 2 "memory_operand" "=X,m"))] (clobber (match_operand:DF 2 "memory_operand" "=X,m ,m ,m"))]
"TARGET_80387" "TARGET_80387"
{ {
gcc_assert (!which_alternative); gcc_assert (!which_alternative);
return output_387_reg_move (insn, operands); return output_387_reg_move (insn, operands);
} }
[(set_attr "type" "fmov,multi") [(set_attr "type" "fmov,multi,multi,multi")
(set_attr "unit" "*,i387") (set_attr "unit" "*,i387,i387,i387")
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
(define_insn "truncxf<mode>2_i387_noop" (define_insn "truncxf<mode>2_i387_noop"
......
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> 2009-03-17 Jakub Jelinek <jakub@redhat.com>
PR debug/39471 PR debug/39471
......
/* { dg-do compile } */
/* { dg-options "-mno-sse2" } */
extern double log (double __x);
double foo (unsigned long int m_liOutputBufferLen)
{
return log ((double) m_liOutputBufferLen);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment