This patch simplifies pow (C, x) into exp (x * C1), where C1 = log (C). Do this only for fast-math as accuracy is reduced. This is much faster since pow is more complex than exp - with a current GLIBC the speedup is more than 7 times for this transformation.
ChangeLog: 2017-08-04 Wilco Dijkstra <wdijk...@arm.com> * match.pd: Add pow (C, x) simplification. -- diff --git a/gcc/match.pd b/gcc/match.pd index e98db52af84946cf579c6434e06d450713a47162..96486aa1f512fe32d85a1de95c46523263ea1b6d 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3548,6 +3548,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (logs (pows @0 @1)) (mult @1 (logs @0)))) + /* pow(C,x) -> exp(log(C)*x). */ + (for pows (POW) + exps (EXP) + logs (LOG) + (simplify + (pows REAL_CST@0 @1) + (exps (mult (logs @0) @1)))) + (for sqrts (SQRT) cbrts (CBRT) pows (POW)