http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51285

             Bug #: 51285
           Summary: [4.7 Regression] internal compiler error: in
                    check_loop_closed_ssa_use, at tree-ssa-loop-manip.c
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: joost.vandevond...@mat.ethz.ch


gcc trunk (4.7.0 20111122) fails on the testcase below with

gfortran -O3 bug.f90 
bug.f90: In function ‘tiny_find’:
bug.f90:25:0: internal compiler error: in check_loop_closed_ssa_use, at
tree-ssa-loop-manip.c:422

> cat bug.f90 
   SUBROUTINE smm_dnn_4_10_10_1_1_2_1(A,B,C)
      REAL(KIND=KIND(0.0D0))   :: C(4,10), B(10,10), A(4,10)
      DO j=           1 ,          10 ,           2
      DO i=           1 ,           4 ,           1
      DO l=           1 ,          10 ,           1
        C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+0)*B(l+0,j+0)
        C(i+0,j+1)=C(i+0,j+1)+A(i+0,l+0)*B(l+0,j+1)
      ENDDO 
      ENDDO 
      ENDDO 
    END SUBROUTINE
   SUBROUTINE smm_dnn_4_10_10_6_4_1_1(A,B,C)
      REAL(KIND=KIND(0.0D0))   :: C(4,10), B(10,10), A(4,10)
      DO l=           1 ,          10 ,           1
      DO j=           1 ,          10 ,           1
        C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+0)*B(l+0,j+0)
      ENDDO 
      ENDDO 
    END SUBROUTINE
 FUNCTION TEST(X,A,B,C,N) RESULT(res)
    DO i=1,N
       CALL X(A,B,C)
    ENDDO
 END FUNCTION
  PROGRAM tiny_find
    INTEGER, PARAMETER :: M=4,N=10,K=10,Nmin=2
     REAL         :: timing(6,M,N,K), best_time, test
     INTERFACE
       SUBROUTINE X(A,B,C)
       END SUBROUTINE
     END INTERFACE
   PROCEDURE(X) :: smm_dnn_4_10_10_1_1_2_1
   PROCEDURE(X) :: smm_dnn_4_10_10_6_4_1_1
     Niter=MAX(1,CEILING(MIN(100000000.0D0,1*gflop/flops)))
     DO imin=1,Nmin
       timing(1,1,2,1)=        MIN(timing(1,1,2,1),&
             TEST(smm_dnn_4_10_10_1_1_2_1,A,B,C,Niter))
       timing(6,4,1,1)=        MIN(timing(6,4,1,1),&
             TEST(smm_dnn_4_10_10_6_4_1_1,A,B,C,Niter))
       write(6,'(4I4,F12.6,F12.3)') &
         6,4,5,1,flops*Niter/gflop/timing(6,4,5,1)
     DO i=1,M
     DO j=1,N
     DO l=1,K
        IF (timing(iloop,i,j,l)< best_time) THEN
        ENDIF
     ENDDO
     ENDDO
     ENDDO
     ENDDO
 END PROGRAM tiny_find

Reply via email to