[PATCH] Perform constant folding of math builtins

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Mon Aug 26 09:29:00 GMT 2002


 > From: Roger Sayle
 > 
 > On Mon, 26 Aug 2002, Kaveh R. Ghazi wrote:
 > >  > From: Roger Sayle <roger at eyesopen dot com>
 > >  > The following patch implements the following optimizations:
 > >  >
 > >  >     sqrt(0.0) = 0.0
 > >  >     sqrt(1.0) = 1.0
 > >  >     log(1.0) = 0.0
 > >  >     exp(0.0) = 1.0
 > >
 > > Why just these cases, can't you fold all calls where the argument is
 > > constant?  (Ditto for the trig functions?)
 > 
 > Hi Kaveh,
 > 
 > I'd love to be able to perform constant folding for all values and
 > also for the trigonometric functions.  There are two issues.  The
 > first is that "cc1" is not currently linked against -lm, so the host
 > libm functions aren't available to the compiler.

Well that's not a showstopper, you can add it if need be.


 >   The second is that
 > these values need to be calculated in the precision required for the
 > target, so shouldn't use the host functions anyway.

Why not?  Aren't we talking about "unsafe" math opts?

Perhaps you could lower the risk by checking that HOST_FLOAT_FORMAT ==
TARGET_FLOAT_FORMAT, or check if we're doing a cross-compile.


 > Of course, I could also add "cos(0.0) = 1.0" and "sin(0.0) = 0.0" with
 > the existing infrastructure.

Certainly, but I was hoping we could catch all math funcs with
constant parameters.

		--Kaveh

PS: Leaving constants aside, aren't there some mathematically
equivalent trigonometric simplifications one could do like the log/exp
ones in your original patch?

--
Kaveh R. Ghazi			Director of Systems Architecture
ghazi@caip.rutgers.edu		Qwest Solutions



More information about the Gcc-patches mailing list