[tree-ssa] Complex overlaping expressions.

Paul Brook paul@nowt.org
Mon Oct 20 16:07:00 GMT 2003


I'm currently seeing failures in certain fortran 95 programs which use 
complex numbers. GCC doesn't seem to be correctly handling complex 
expressions with overlapping source and destination.

Ie. expressions of the form A = A * B, where A and B are complex.

What seems to be happening is that the real component of A is overwritten 
before the complex component of A*B is calculated.

When I write an equivalent C program, the .t05.gimple tree dump shows a 
temporary has been inserted. I.e. the above has been transformed to 
tmp = A; A = tmp * B;

With gfortran this doesn't seem to be happening. Am I missing something, or 
is this a bug in the gimplifier/optimizers? I remember seeing various bits 
of code in g77 to deal with this, so maybe it's not a new thing.

Simple cases (like the one above) seem to work ok, probably by chance. 
However we sometimes generate code of the form
complex z, a;
for (i = 1; i < n; i++)
	z = z * a;

Where both z and a are compiler generated temporary variables. This results 
in broken code as described above.

Paul



More information about the Gcc mailing list