This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Bug optimization/12612] [3.4 Regression] ICE when using log function with -O3 -ffast-math
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: pinskia at gcc dot gnu dot org <gcc-bugzilla at gcc dot gnu dot org>,gcc-patches at gcc dot gnu dot org
- Date: Sun, 19 Oct 2003 01:17:15 +0200
- Subject: Re: [Bug optimization/12612] [3.4 Regression] ICE when using log function with -O3 -ffast-math
- References: <20031014075139.12612.martin@mpa-garching.mpg.de> <20031018184404.982.qmail@sources.redhat.com> <20031018212905.GN6212@kam.mff.cuni.cz>
> > PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
> >
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12612
> >
> >
> >
> > ------- Additional Comments From pinskia at gcc dot gnu dot org 2003-10-18 18:44 -------
> > Yep it is a machine description problem just like PR 12630 was.
> > The idea is to use match_scratch: instead of match_dup.
> Right,
> This is patch I made for that yesterday.
> OK?
> Sat Oct 18 23:14:37 CEST 2003 Jan Hubicka <jh@suse.cz>
> PR optimization/12612
> * i386.md (fyl2x patterns and expanders): Use match_scratch instead of match_dup.
It is actually more than that. Several other patterns uses same scheme.
Additionally they use bogus extra parallel that confuses genrecog
handling of clobbers and finally reg-stack needs to be updated to
produce insns that still match.
I am still testing the attached patch, OK assuming it pass?
Honza
2003-10-19 Jan Hubicka <jh@suse.cz>
* reg-stack.c (subst_stack_regs_pat): Use st(1) for clobbers.
* i386.md (fpatan, fyl2x, fscale patterns and expanders): Use
match_scratch; avoid bogus paralles.
Index: reg-stack.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/reg-stack.c,v
retrieving revision 1.134
diff -c -3 -p -r1.134 reg-stack.c
*** reg-stack.c 5 Oct 2003 19:50:55 -0000 1.134
--- reg-stack.c 18 Oct 2003 23:12:35 -0000
*************** subst_stack_regs_pat (rtx insn, stack re
*** 1430,1436 ****
abort ();
}
remove_note (insn, note);
! replace_reg (dest, LAST_STACK_REG);
}
else
{
--- 1430,1436 ----
abort ();
}
remove_note (insn, note);
! replace_reg (dest, FIRST_STACK_REG + 1);
}
else
{
Index: config/i386/i386.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v
retrieving revision 1.485
diff -c -3 -p -r1.485 i386.md
*** config/i386/i386.md 18 Oct 2003 07:24:59 -0000 1.485
--- config/i386/i386.md 18 Oct 2003 23:12:38 -0000
***************
*** 15619,15629 ****
(set_attr "mode" "XF")])
(define_insn "atan2df3_1"
! [(parallel [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand:DF 2 "register_operand" "0")
! (match_operand:DF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
"fpatan"
--- 15619,15629 ----
(set_attr "mode" "XF")])
(define_insn "atan2df3_1"
! [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand:DF 2 "register_operand" "0")
! (match_operand:DF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_scratch:DF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
"fpatan"
***************
*** 15644,15654 ****
})
(define_insn "atan2sf3_1"
! [(parallel [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand:SF 2 "register_operand" "0")
! (match_operand:SF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
"fpatan"
--- 15644,15654 ----
})
(define_insn "atan2sf3_1"
! [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand:SF 2 "register_operand" "0")
! (match_operand:SF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_scratch:SF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
"fpatan"
***************
*** 15669,15679 ****
})
(define_insn "atan2xf3_1"
! [(parallel [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && ! TARGET_128BIT_LONG_DOUBLE"
"fpatan"
--- 15669,15679 ----
})
(define_insn "atan2xf3_1"
! [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_scratch:XF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && ! TARGET_128BIT_LONG_DOUBLE"
"fpatan"
***************
*** 15694,15704 ****
})
(define_insn "atan2tf3_1"
! [(parallel [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fpatan"
--- 15694,15704 ----
})
(define_insn "atan2tf3_1"
! [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
! UNSPEC_FPATAN))
! (clobber (match_scratch:TF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fpatan"
***************
*** 15719,15729 ****
})
(define_insn "*fyl2x_sfxf3"
! [(parallel [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand:SF 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)"
--- 15719,15729 ----
})
(define_insn "*fyl2x_sfxf3"
! [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand:SF 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_scratch:SF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)"
***************
*** 15732,15742 ****
(set_attr "mode" "SF")])
(define_insn "*fyl2x_dfxf3"
! [(parallel [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand:DF 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)"
--- 15732,15742 ----
(set_attr "mode" "SF")])
(define_insn "*fyl2x_dfxf3"
! [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand:DF 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_scratch:DF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)"
***************
*** 15745,15755 ****
(set_attr "mode" "DF")])
(define_insn "*fyl2x_xf3"
! [(parallel [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FYL2X))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
--- 15745,15755 ----
(set_attr "mode" "DF")])
(define_insn "*fyl2x_xf3"
! [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FYL2X))
! (clobber (match_scratch:XF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
***************
*** 15757,15767 ****
(set_attr "mode" "XF")])
(define_insn "*fyl2x_tfxf3"
! [(parallel [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
--- 15757,15767 ----
(set_attr "mode" "XF")])
(define_insn "*fyl2x_tfxf3"
! [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
UNSPEC_FYL2X))
! (clobber (match_scratch:TF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
***************
*** 15772,15778 ****
[(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_operand:SF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
--- 15772,15778 ----
[(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_operand:SF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_scratch:SF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
***************
*** 15787,15793 ****
[(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_operand:DF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
--- 15787,15793 ----
[(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_operand:DF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_scratch:DF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
***************
*** 15802,15808 ****
[(parallel [(set (match_operand:XF 0 "register_operand" "")
(unspec:XF [(match_operand:XF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
--- 15802,15808 ----
[(parallel [(set (match_operand:XF 0 "register_operand" "")
(unspec:XF [(match_operand:XF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_scratch:XF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
***************
*** 15817,15823 ****
[(parallel [(set (match_operand:TF 0 "register_operand" "")
(unspec:TF [(match_operand:TF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
--- 15817,15823 ----
[(parallel [(set (match_operand:TF 0 "register_operand" "")
(unspec:TF [(match_operand:TF 1 "register_operand" "")
(match_dup 2)] UNSPEC_FYL2X))
! (clobber (match_scratch:TF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
***************
*** 15829,15839 ****
})
(define_insn "*fscale_sfxf3"
! [(parallel [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)
--- 15829,15839 ----
})
(define_insn "*fscale_sfxf3"
! [(set (match_operand:SF 0 "register_operand" "=f")
! (unspec:SF [(match_operand 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
! (clobber (match_scratch:SF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)
***************
*** 15843,15853 ****
(set_attr "mode" "SF")])
(define_insn "*fscale_dfxf3"
! [(parallel [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)
--- 15843,15853 ----
(set_attr "mode" "SF")])
(define_insn "*fscale_dfxf3"
! [(set (match_operand:DF 0 "register_operand" "=f")
! (unspec:DF [(match_operand 2 "register_operand" "0")
! (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
! (clobber (match_scratch:DF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations
&& GET_MODE (operands[1]) == (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode)
***************
*** 15857,15867 ****
(set_attr "mode" "DF")])
(define_insn "*fscale_xf3"
! [(parallel [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FSCALE))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fscale\;fstp\t%y1"
--- 15857,15867 ----
(set_attr "mode" "DF")])
(define_insn "*fscale_xf3"
! [(set (match_operand:XF 0 "register_operand" "=f")
! (unspec:XF [(match_operand:XF 2 "register_operand" "0")
! (match_operand:XF 1 "register_operand" "u")]
! UNSPEC_FSCALE))
! (clobber (match_scratch:XF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fscale\;fstp\t%y1"
***************
*** 15869,15879 ****
(set_attr "mode" "XF")])
(define_insn "*fscale_tf3"
! [(parallel [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
! UNSPEC_FSCALE))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fscale\;fstp\t%y1"
--- 15869,15879 ----
(set_attr "mode" "XF")])
(define_insn "*fscale_tf3"
! [(set (match_operand:TF 0 "register_operand" "=f")
! (unspec:TF [(match_operand:TF 2 "register_operand" "0")
! (match_operand:TF 1 "register_operand" "u")]
! UNSPEC_FSCALE))
! (clobber (match_scratch:TF 3 "=1"))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fscale\;fstp\t%y1"
***************
*** 15930,15936 ****
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_dup 5))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
--- 15930,15936 ----
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_scratch:SF 5 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
***************
*** 15960,15966 ****
(set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_dup 5))])]
""
{
rtx temp;
--- 15960,15966 ----
(set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_scratch:SF 5 ""))])]
""
{
rtx temp;
***************
*** 15983,15989 ****
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_dup 5))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
--- 15983,15989 ----
(set (match_dup 9) (plus:XF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_scratch:DF 5 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
***************
*** 16014,16020 ****
(set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_dup 5))])]
""
{
rtx temp;
--- 16014,16020 ----
(set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
! (clobber (match_scratch:DF 5 ""))])]
""
{
rtx temp;
***************
*** 16036,16042 ****
(set (match_dup 8) (plus:XF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:XF 0 "register_operand" "")
(unspec:XF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
! (clobber (match_dup 4))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
--- 16036,16042 ----
(set (match_dup 8) (plus:XF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:XF 0 "register_operand" "")
(unspec:XF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
! (clobber (match_scratch:XF 5 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
***************
*** 16072,16078 ****
(set (match_dup 8) (plus:TF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:TF 0 "register_operand" "")
(unspec:TF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
! (clobber (match_dup 4))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
--- 16072,16078 ----
(set (match_dup 8) (plus:TF (match_dup 6) (match_dup 7)))
(parallel [(set (match_operand:TF 0 "register_operand" "")
(unspec:TF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
! (clobber (match_scratch:TF 5 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
***************
*** 16091,16097 ****
(unspec:DF [(match_dup 2)
(match_operand:DF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
--- 16091,16097 ----
(unspec:DF [(match_dup 2)
(match_operand:DF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_scratch:DF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations"
{
***************
*** 16104,16110 ****
(unspec:XF [(match_dup 2)
(match_operand:XF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
--- 16104,16110 ----
(unspec:XF [(match_dup 2)
(match_operand:XF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_scratch:XF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
***************
*** 16117,16123 ****
(unspec:TF [(match_dup 2)
(match_operand:TF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
--- 16117,16123 ----
(unspec:TF [(match_dup 2)
(match_operand:TF 1 "register_operand" "")]
UNSPEC_FPATAN))
! (clobber (match_scratch:TF 3 ""))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
Index: config/pa/pa.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/pa/pa.md,v
retrieving revision 1.132
diff -c -3 -p -r1.132 pa.md
*** config/pa/pa.md 17 Oct 2003 03:32:21 -0000 1.132
--- config/pa/pa.md 18 Oct 2003 23:12:39 -0000
***************
*** 3016,3025 ****
--- 3016,3032 ----
;; therefore it is forced to operand 2. If the count is compile-time
;; determined, we need two scratch registers for the unrolled code.
(define_insn "movstrsi_internal"
+ <<<<<<< pa.md
+ [(set (mem:BLK (match_operand:SI 0 "register_operand" "r,r"))
+ (mem:BLK (match_operand:SI 1 "register_operand" "r,r")))
+ (clobber (match_scratch:SI 7 "=0,0")))
+ (clobber (match_scratch:SI 8 "=1,1"))
+ =======
[(set (mem:BLK (match_operand:SI 0 "register_operand" "r,r"))
(mem:BLK (match_operand:SI 1 "register_operand" "r,r")))
(clobber (match_scratch:SI 7 "=0,0"))
(clobber (match_scratch:SI 8 "=1,1"))
+ >>>>>>> 1.132
(clobber (match_operand:SI 2 "register_operand" "=r,r")) ;loop cnt/tmp
(clobber (match_operand:SI 3 "register_operand" "=&r,&r")) ;item tmp
(clobber (match_operand:SI 6 "register_operand" "=&r,&r")) ;item tmp2
Index: doc/invoke.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v
retrieving revision 1.349
diff -c -3 -p -r1.349 invoke.texi
*** doc/invoke.texi 18 Oct 2003 00:22:22 -0000 1.349
--- doc/invoke.texi 18 Oct 2003 23:12:40 -0000
*************** larger binaries. Very high values are n
*** 4773,4794 ****
binaries may adversely affect runtime performance.
The default value is 200.
- @item max-inline-slope
- After exceeding the maximum number of inlined instructions by repeated
- inlining, a linear function is used to decrease the allowable size
- for single functions. The slope of that function is the negative
- reciprocal of the number specified here.
- This parameter is ignored when @option{-funit-at-a-time} is used.
- The default value is 32.
-
- @item min-inline-insns
- The repeated inlining is throttled more and more by the linear function
- after exceeding the limit. To avoid too much throttling, a minimum for
- this function is specified here to allow repeated inlining for very small
- functions even when a lot of repeated inlining already has been done.
- This parameter is ignored when @option{-funit-at-a-time} is used.
- The default value is 10.
-
@item large-function-insns
The limit specifying really large functions. For functions greater than this
limit inlining is constrained by @option{--param large-function-growth}.
--- 4773,4778 ----
Index: testsuite/g++.dg/opt/inline4.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.dg/opt/inline4.C,v
retrieving revision 1.2
diff -c -3 -p -r1.2 inline4.C
*** testsuite/g++.dg/opt/inline4.C 23 Jul 2003 16:45:15 -0000 1.2
--- testsuite/g++.dg/opt/inline4.C 18 Oct 2003 23:12:40 -0000
***************
*** 1,4 ****
! // { dg-options "-O2 -ftemplate-depth-20000 --param min-inline-insns=100 --param max-inline-insns=3" }
template <int I>
inline void g() { g<I-1>(); return; }
--- 1,4 ----
! // { dg-options "-O2 -ftemplate-depth-20000" }
template <int I>
inline void g() { g<I-1>(); return; }
Index: testsuite/gcc.dg/inline-2.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/inline-2.c,v
retrieving revision 1.4
diff -c -3 -p -r1.4 inline-2.c
*** testsuite/gcc.dg/inline-2.c 14 Mar 2003 17:49:12 -0000 1.4
--- testsuite/gcc.dg/inline-2.c 18 Oct 2003 23:12:42 -0000
*************** static int foo(void)
*** 11,17 ****
int bar(void)
{
! return foo() + 1;
}
/* { dg-final { scan-assembler-not "jsr" { target alpha*-*-* } } } */
--- 11,18 ----
int bar(void)
{
! /* Call twice to avoid bypassing the limit for functions called once. */
! return foo() + foo() + 1;
}
/* { dg-final { scan-assembler-not "jsr" { target alpha*-*-* } } } */