[Bug tree-optimization/57492] New: Optimize 2.0**i to ldexp(1.0,i)

tkoenig at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri May 31 20:51:00 GMT 2013


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



More information about the Gcc-bugs mailing list