------- Comment #22 from dominiq at lps dot ens dot fr 2010-03-09 13:32 ------- The following variant of spectop.f90 is miscompiled with '-fgraphite-identity -O3':
SUBROUTINE SPECTOP(Dr,N) IMPLICIT REAL*8(A-H,o-Z) DIMENSION d1(0:32,0:32) , Dr(0:32,0:32) , x(0:32) REAL*8 Dr ! ! PROGRAM TO COMPUTE THE CHEBYSHEV SPECTRAL OPERATOR ! ang = DBLE(1) s = DBLE(6) o = DBLE(1) t = DBLE(2) pi = t*DASIN(ang) DO i = 0 , N x(i) = DCOS(pi*DBLE(i)/DBLE(N)) ENDDO ! ! IF J=K ! DO j = 1 , N - 1 d1(j,j) = -x(j)/(t*(o-x(j)**2)) ENDDO d1(0,0) = (t*DBLE(N)**2+o)/s d1(N,N) = -d1(0,0) ! ! IF J.NE.K ! fctr = -t DO j = 1 , N-1 d1(0,j) = fctr/(x(0)-x(j)) fctr = -fctr ENDDO d1(0,N) = fctr/(t*(x(0)-x(N))) fctr1 = -1.0D0 DO k = 1 , N-1 d1(k,0) = fctr1/(t*(x(k)-x(0))) fctr = -fctr1 DO j = 1 , N-1 if (j.ne.k) d1(k,j) = fctr/(x(k)-x(j)) fctr = -fctr ENDDO d1(k,N) = fctr/(t*(x(k)-x(N))) fctr1 = -fctr1 ENDDO d1(N,0) = fctr1/(x(N)-x(0)) fctr = -t*fctr1 DO j = 1 , N-1 d1(N,j) = fctr/(x(N)-x(j)) fctr = -fctr ENDDO DO k = 0 , N DO j = 0 , N Dr(k,j) = d1(N-k,N-j) ENDDO ENDDO CONTINUE END but is correctly compiled if DO j = 1 , N-1 if (j.ne.k) d1(k,j) = fctr/(x(k)-x(j)) fctr = -fctr ENDDO is replaced with DO j = 1 , k-1 d1(k,j) = fctr/(x(k)-x(j)) fctr = -fctr ENDDO fctr = -fctr DO j = k+1 , N-1 d1(k,j) = fctr/(x(k)-x(j)) fctr = -fctr ENDDO -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42181