[PATCH] Yet more constant folding of pow.

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Sat Apr 5 22:42:00 GMT 2003

 > This patch implements the following optimizations:
 > sqrt(x)*sqrt(x) = x
 > pow(x,y)*pow(z,y) = pow(x*z,y)
 > pow(x,y)*pow(x,z) = pow(x,y+z)
 > x/pow(y,z) = x*pow(y,-z)

Excellent, thanks Roger.  However I was wondering something.  Correct
me if I'm wrong, but it seems that when we combine multiple folds
using your patch(es) we would get these extra transformations for

	pow(x, 0.5) * sqrt(y) -> sqrt(x*y)
	sqrt(x) * pow(y, 0.5) -> sqrt(x*y)
	sqrt(x) / pow(y, -0.5) -> sqrt(x*y)

I noticed that by combining opts #4 and #3 above you'd get this for
free too:

	pow(x,y) / pow(x,z) -> pow(x, y-z)

And with #4 and #2 you get:

	pow(x,y) / pow(z,-y) -> pow(x*z, y)

Perhaps you could add all the above to the testcase?

But I don't see that you could necessarily get this one:

	pow(x,z) / pow(y,z) -> pow(x/y, z)

Do your transformations figure this last one out?

(Sorry to be such a pain, I can't resist this topic.)

Kaveh R. Ghazi			ghazi@caip.rutgers.edu

More information about the Gcc-patches mailing list