http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57492
Bug ID: 57492 Summary: Optimize 2.0**i to ldexp(1.0,i) Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: tkoenig at gcc dot gnu.org Similar to PR 57073, subject says allm ldexp* is much faster. Small benchmark: #include <stdio.h> float pow2(int); int main() { int i,j; float x; x = 0.0; for (j=1;j<10000000;j++) for (i=-4;i<4;i++) x += pow2(i); printf("%f",x); } ig25@linux-fd1f:~/Krempel/P6> cat pow.c #include <math.h> float pow2(int i) { return ldexpf(1.0,i); } ig25@linux-fd1f:~/Krempel/P6> gcc -O main.c pow.c -lm ig25@linux-fd1f:~/Krempel/P6> time ./a.out 134217728.000000 real 0m1.100s user 0m1.098s sys 0m0.002s ig25@linux-fd1f:~/Krempel/P6> cat pow2.c #include <math.h> float pow2(int i) { return powf(2.0,i); } ig25@linux-fd1f:~/Krempel/P6> gcc -O main.c pow2.c -lm ig25@linux-fd1f:~/Krempel/P6> time ./a.out 134217728.000000 real 0m6.231s user 0m6.227s sys 0m0.000s