[Bug middle-end/31249] pseudo-optimzation with sincos/cexpi
dominiq at lps dot ens dot fr
gcc-bugzilla@gcc.gnu.org
Wed Mar 21 15:36:00 GMT 2007
------- Comment #16 from dominiq at lps dot ens dot fr 2007-03-21 15:36 -------
> The recommended way is to post a message to gcc@gcc.gnu.org or
> gcc-patches@gcc.gnu.org
I'll follow your advice, but before I'ld like some feedback about what follows.
I have applied the following patch
--- gcc-4.3-20070316/gcc/tree-ssa-math-opts.c Thu Mar 8 20:02:51 2007
+++ gcc-4.3-20070317/gcc/tree-ssa-math-opts.c Tue Mar 20 17:21:16 2007
@@ -704,9 +704,7 @@
gate_cse_sincos (void)
{
/* Make sure we have either sincos or cexp. */
- return (TARGET_HAS_SINCOS
- || TARGET_C99_FUNCTIONS)
- && optimize;
+ return TARGET_HAS_SINCOS && optimize;
}
struct tree_opt_pass pass_cse_sincos =
I have regtested it with no change in the reports for gcc, g++, gfortran,
and objc. The timings before and after are
before after
-O0 -O1 % -O0 -O1 %
g++-4 sincos_o.c 6.2 9.6 +55 6.3 5.6 -11
gfc sincos_o.f90 6.3 9.6 +52 6.4 5.5 -14
for the following C and Fotran tests:
[karma] bug/timing% cat sincos_o.c
#include <math.h>
#include <stdio.h>
int main()
{
long n = 1000000;
long i;
double mo = -1.0;
double pi = acos(mo);
double sc = 0.0;
double ss = 0.0;
double t = 0.0;
double dt = pi/n;
printf("%.17g \n", pi);
printf("%.17g \n", dt);
for (i=0; i< 40*n; i++) {
sc += cos(t);
ss += sin(t);
t += dt;
}
printf("%.17g %.17g \n", sc, ss);
}
[karma] bug/timing% cat sincos_o.f90
integer, parameter :: n=1000000
integer :: i
real(8) :: pi, ss, sc, t, dt
pi = acos(-1.0d0)
dt=pi/n
sc=0
ss=0
t=0
do i= 1, 40*n
sc = sc + cos(t)
ss = ss + sin(t)
t = t+dt
end do
print *, sc, ss
end
So from the PPC Darwin point of view, everything is working as expected.
I have done a search on the regtest list based on
FAIL: gcc.dg/builtins-59.c scan-tree-dump __builtin_cexpi
assuming that platforms that do not pass it, are likely to have not
__builtin_cexpi, thus are exposed to the same bad optimization.
I have found the following list tested on a regular basis:
powerpc-apple-darwin8.5.0
hppa2.0w-hp-hpux11.11
v850-unknown-elf
sparc-unknown-elf
sh-unknown-elf
powerpc-unknown-eabisim
mips-unknown-elf
m32r-unknown-elf
m32c-unknown-elf
avr-unknown-none
frv-unknown-elf
arm-unknown-elf
cris-axis-elf
arm-none-eabi
As far as I can tell, only the first two are tested against g++ and
gfortran.
Note that the list does not include powerpc64-apple-darwin8.8.0.
So it seems that it has __builtin_cexpi.
I don't know what will be the final decision about the proposed patch,
but there is no "emergency" since I can use it for my coming weekly builds.
I would prefer to have some feedback from the listed platforms before
seeing the patch applied.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31249
More information about the Gcc-bugs
mailing list