------- 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

Reply via email to