http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60438
--- Comment #18 from linzj <manjian2006 at gmail dot com> --- (In reply to Richard Henderson from comment #17) > The REG_ARGS_SIZE notes are a red-herring. > > The bug is that > > (insn:TI 66 61 31 4 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) > (reg:SI 0 ax [orig:85 D.1918 ] [85])) z.c:21 66 {*pushsi2} > (nil)) > > as noted above created by split2, is not processed by the dwarf2cfi > code at all, and so its stack adjustment is lost entirely. Thus when > we remove its adjustment later, we wind up with the wrong answer and > that leads directly to the abort. Hi rth, you are right,I have been distracted.And I have tried to fix this in i386.c ix86_force_to_memory& ix86_free_from_memory,but fail. The split is defined as follow: (define_split [(set (match_operand 0 "register_operand") (match_operator 3 "binary_fp_operator" [(float (match_operand:SWI24 1 "register_operand")) (match_operand 2 "register_operand")]))] "reload_completed && X87_FLOAT_MODE_P (GET_MODE (operands[0])) && X87_ENABLE_FLOAT (GET_MODE (operands[0]), GET_MODE (operands[1]))" [(const_int 0)] { operands[4] = ix86_force_to_memory (GET_MODE (operands[1]), operands[1]); operands[4] = gen_rtx_FLOAT (GET_MODE (operands[0]), operands[4]); emit_insn (gen_rtx_SET (VOIDmode, operands[0], gen_rtx_fmt_ee (GET_CODE (operands[3]), GET_MODE (operands[3]), operands[4], operands[2]))); ix86_free_from_memory (GET_MODE (operands[1])); DONE; }) in i386.md:13640