From: Uros Bizjak Date: Wed, 17 Aug 2005 20:44:01 +0000 (+0200) Subject: re PR target/23268 (ICE using math functions log & rint, -ffast-math, -O1 (,2,3,s)) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=87bb8864f6fa4ca966e8a57aa4828d51b3f9cc72;p=gcc.git re PR target/23268 (ICE using math functions log & rint, -ffast-math, -O1 (,2,3,s)) PR target/23268 * config/i386/i386.md ("*fist2_1"): New pattern. ("lrint2"): Change expander to use "*fist2_1" pattern. From-SVN: r103224 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25c6dfd25b9..6fa630143db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-08-17 Uros Bizjak + + PR target/23268 + * config/i386/i386.md ("*fist2_1"): New pattern. + ("lrint2"): Change expander to use "*fist2_1" pattern. + 2005-08-17 J"orn Rennecke * varasm.c (decode_reg_name): Skip empty aqdditional register names. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 9e7e92ce8e5..88440d66183 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -16477,6 +16477,30 @@ DONE; }) +(define_insn_and_split "*fist2_1" + [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "=m,?r") + (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "f,f")] + UNSPEC_FIST))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations + && !(reload_completed || reload_in_progress)" + "#" + "&& 1" + [(const_int 0)] +{ + if (memory_operand (operands[0], VOIDmode)) + emit_insn (gen_fist2 (operands[0], operands[1])); + else + { + operands[2] = assign_386_stack_local (mode, SLOT_TEMP); + emit_insn (gen_fist2_with_temp (operands[0], operands[1], + operands[2])); + } + DONE; +} + [(set_attr "type" "fpspc") + (set_attr "mode" "")]) + (define_insn "fistdi2" [(set (match_operand:DI 0 "memory_operand" "=m") (unspec:DI [(match_operand:XF 1 "register_operand" "f")] @@ -16566,22 +16590,13 @@ "") (define_expand "lrint2" - [(use (match_operand:X87MODEI 0 "nonimmediate_operand" "")) - (use (match_operand:XF 1 "register_operand" ""))] + [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "") + (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")] + UNSPEC_FIST))] "TARGET_USE_FANCY_MATH_387 && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387) && flag_unsafe_math_optimizations" -{ - if (memory_operand (operands[0], VOIDmode)) - emit_insn (gen_fist2 (operands[0], operands[1])); - else - { - rtx op = assign_386_stack_local (mode, SLOT_TEMP); - emit_insn (gen_fist2_with_temp (operands[0], operands[1], - op)); - } - DONE; -}) + "") ;; Rounding mode control word calculation could clobber FLAGS_REG. (define_insn_and_split "frndintxf2_floor"