This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Make the _gfortran_pow* const
- From: Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- To: Andrew Pinski <pinskia at gmail dot com>
- Cc: Tobias Schl?ter <tobias dot schlueter at physik dot uni-muenchen dot de>, gcc-patches at gcc dot gnu dot org, fortran at gcc dot gnu dot org
- Date: Sat, 9 Dec 2006 09:44:29 -0800
- Subject: Re: [PATCH] Make the _gfortran_pow* const
- References: <1164516466.19849.152.camel@celery.andrew.com> <20061126093837.1svbfyb9ws0gc44o@webmail.physik.uni-muenchen.de> <1164530540.19849.158.camel@celery.andrew.com>
On Sun, Nov 26, 2006 at 12:42:20AM -0800, Andrew Pinski wrote:
> On Sun, 2006-11-26 at 09:38 +0100, Tobias Schl??ter wrote:
> > Andrew Pinski <pinskia@gmail.com> wrote on Sun, 26 Nov 2006:
> > > This patch makes the _gfortran_pow* function constant functions as the
> > > return value is only dependent on those values and they don't have any
> > > special side effects.
> > >
> > > This patch speeds up my father's code by about 10% where he has a couple
> > > of rd**3.
> >
> > Why are they not compiled as rd*rd*rd? We have code which should do
> > just that.
>
> >From trans-expr.c (gfc_conv_cst_int_power):
> if (((FLOAT_TYPE_P (type) && !flag_unsafe_math_optimizations) || optimize_size)
> && (n > 2 || n < -1))
> return 0;
>
> Because rd is a floating point value and n > 2.
>
> There was also some rd**-3 in the source also.
>
Yes, I'm trying to catch up with my inbox. The construct
rd**-3 is invalid code; although most compilers accept it.
You need rd**(-3).
--
Steve