From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22498 invoked by alias); 10 Jul 2003 21:16:59 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 22489 invoked by uid 48); 10 Jul 2003 21:16:58 -0000 Date: Thu, 10 Jul 2003 21:16:00 -0000 From: "Remigius dot Mommsen at cern dot ch" To: gcc-bugs@gcc.gnu.org Message-ID: <20030710211654.11496.Remigius.Mommsen@cern.ch> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug fortran/11496] New: error in flow_loops_find when -funroll-loops active X-Bugzilla-Reason: CC X-SW-Source: 2003-07/txt/msg01144.txt.bz2 List-Id: PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11496 Summary: error in flow_loops_find when -funroll-loops active Product: gcc Version: 3.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Remigius dot Mommsen at cern dot ch CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: Mac OS X 10.2 Compiling attached Fortran code crashes g77 v.3.3 if (and only if) -funroll-loops is active. The error: g77 -v -save-temps -c -O -funroll-loops -o muller.o muller.F Reading specs from /sw/lib/gcc-lib/powerpc-apple-darwin6.6/3.3/specs Configured with: ../gcc-3.3/configure --prefix=/sw --enable-languages=f77 --infodir=${prefix}/ share/info Thread model: single gcc version 3.3 /sw/lib/gcc-lib/powerpc-apple-darwin6.6/3.3/cc1 -E -traditional-cpp -D_LANGUAGE_FORTRAN -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=0 -D__DYNAMIC__ muller.F -fPIC -funroll-loops -O /var/tmp//ccHGL0ww.f ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/sw/powerpc-apple-darwin6.6/include" #include "..." search starts here: #include <...> search starts here: /sw/include /sw/lib/gcc-lib/powerpc-apple-darwin6.6/3.3/include /usr/include End of search list. /sw/lib/gcc-lib/powerpc-apple-darwin6.6/3.3/f771 /var/tmp//ccHGL0ww.f -fPIC -quiet - dumpbase muller.F -auxbase-strip muller.o -O -version -funroll-loops -o muller.s GNU F77 version 3.3 (powerpc-apple-darwin6.6) compiled by GNU C version 3.3. GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 muller.F: In subroutine `muller': muller.F:185: internal compiler error: in flow_loops_find, at cfgloop.c:830 The fortran file which produces the error: * * $Id: muller.F,v 1.1.1.1 1996/02/15 17:48:47 mclareni Exp $ * * $Log: muller.F,v $ * Revision 1.1.1.1 1996/02/15 17:48:47 mclareni * Kernlib * * SUBROUTINE MULLER (A,N,C) C C MODIFIED TO ELIMINATE STOP AND AVOID COMPILER DIAGNOSTICS C DUE TO ASSIGNED GOTO INTO DO 17. H.LIPPS, 30.6.1982. C C-----COMPUTES ROOTS OF POLYNOMIAL A(1)*X**N+...A(N)*X+A(N+1) = 0. C BY METHOD OF D.E.MULLER,M.T.A.C.,VOL 10, P208-215 (1956). C DURING EXECUTION THE ARRAY C CONTAINS SCALED,COMPLEX POLYNOMIAL C COEFFICIENTS.AFTER EXECUTION IT CONTAINS COMPLEX ROOTS. C THE FOLLOWING ARE DUMMY ARRAY DIMENSIONS DIMENSION A(9),C(9) COMPLEX C,DX,X,X3,Y1,Y2,Y,TE1,TE2,TE3,TE4,TE5,TE6,TE7 LOGICAL MFLAG, RFLAG DATA ETA1/1.E-6/,ETA2/1.E-3/ SUMABS(X)=ABS(REAL(X))+ABS(AIMAG(X)) IF(N .LT. 1) THEN CALL KERMTR('C204.1',LGFILE,MFLAG,RFLAG) IF(MFLAG) THEN IF(LGFILE .EQ. 0) THEN WRITE(*,1000) N ELSE WRITE(LGFILE,1000) N ENDIF ENDIF IF(.NOT. RFLAG) CALL ABEND RETURN ENDIF IF(A(1).EQ.0.) GO TO 105 C C-----EXTRACT ALL ZERO ROOTS N1=N 2 IF(N1.EQ.1) GO TO 3 IF(A(N1+1).NE.0.) GO TO 5 C(N1)=0. N1=N1-1 GO TO 2 3 C(1)=-A(2)/A(1) RETURN C C-----NORMALIZE AND SCALE DOWN POLYNOMIAL TO MAKE COEFF.C(0)=C(N1)= 1. 5 B=1./FLOAT(N1) SCALE=ABS(A(N1+1))**B/ABS(A(1))**B B=A(1) DO 6 I=1,N1 B=B*SCALE 6 C(I)=A(I+1)/B IF(N1.EQ.2) GO TO 104 C C-----STARTING VALUES AT X1=+1, X2=-1, X=0. 10 ASSIGN 20 TO L Y1=C(1)+1. Y2=C(1)-1. DO 11 I=2,N1 Y1=C(I)+Y1 11 Y2=C(I)-Y2 Y=C(N1) X=0. DX=1. C C-----MULLER"S ITERATION TE1=-2. 12 TE2=Y2/Y TE3=(Y1-Y2)/(Y*TE1) DO 17 ITER=1,2000 TE4=TE2-1. TE5=(TE4-TE3)/(TE1+1.) TE6=(TE5+TE4)*.5 TE7=SQRT(TE6*TE6+TE5) TE1=TE6+TE7 TE7=TE6-TE7 B=REAL(TE7)**2+AIMAG(TE7)**2 IF(REAL(TE1)**2+AIMAG(TE1)**2.GT.B) GO TO 13 IF(B.EQ.0.) TE7=.9 TE1=TE7 13 DX=DX/TE1 X=DX+X EPSI=SUMABS(X)*ETA1 IF(SUMABS(DX).GE.EPSI) GO TO 14 IF(SUMABS(Y).LT.2.E-3) GO TO 18 14 Y2=Y GO TO 199 C 15 IF(YA.LT.100.*SUMABS(Y2)) GO TO 16 IF(SUMABS(DX).LT.EPSI) GO TO 16 C C-----REDUCE EXCESSIVE STEP SIZE DX,PREVENT OVERFLOW IN POLYN.EVALUATION TE1=TE1+TE1 DX=.5*DX X=X-DX C C-----EVALUATE POLYNOMIAL AND TEST ZERO. 199 Y=X+C(1) DO 200 I=2,N1 200 Y=Y*X+C(I) YA=SUMABS(Y) IF(YA.EQ.0.) GO TO 18 GOTO 15 C 16 TE2=Y2/Y 17 TE3=TE2/TE1*TE4 C-----SCALE DEFLATED POLYNOMIAL CN=CABS(C(N1)) IF (ABS(CN-1.).LT.0.1) GO TO 35 S=CN**(1./FLOAT(N1)) SCALE=SCALE*S B=1. DO 30 I=1,N1 B=B/S 30 C(I)=C(I)*B GO TO 10 C-----IF ROOT CANNOT BE FOUND IN 2000 ITERATIONS PRINT ERROR MESSAGE 35 IMIN=N1+1 DO 40 I=1,N1 40 C(I)=1.E20 IMAX=N+1 CALL KERMTR('C204.3',LGFILE,MFLAG,RFLAG) IF(MFLAG) THEN IF(LGFILE .EQ. 0) THEN WRITE(*,1003) (A(I),I=1,IMAX) IF(N1 .LT. N) WRITE(*,1004) (C(I),I=IMIN,N) ELSE WRITE(LGFILE,1003) (A(I),I=1,IMAX) IF(N1 .LT. N) WRITE(LGFILE,1004) (C(I),I=IMIN,N) ENDIF ENDIF IF(.NOT. RFLAG) CALL ABEND RETURN C C-----IF ROOT IS COMPLEX,START ITERATION NEAR CONJUGATE ROOT(HIGH PREC.) 20 IF(ABS(AIMAG(X)).LT.ABS(REAL(X))*ETA2) GO TO 10 ASSIGN 10 TO L X3=CONJG(X) DX=CONJG(DX) TE1=CONJG(TE1) X=X3-DX ASSIGN 21 TO M GO TO 99 21 Y2=Y X=X-DX*TE1 ASSIGN 22 TO M GO TO 99 22 Y1=Y X=X3 ASSIGN 12 TO M GO TO 99 C C-----EVALUATE POLYNOMIAL AND TEST ZERO. 99 Y=X+C(1) DO 100 I=2,N1 100 Y=Y*X+C(I) YA=SUMABS(Y) IF(YA.NE.0.) GO TO M,(12,21,22) C C-----IF A ROOT IS FOUND REDUCE DEGREE OF POLYNOMIAL(DEFLATION) 18 C(N1)=X*SCALE N1=N1-1 C(1)=X+C(1) DO 19 I=2,N1 19 C(I)=C(I-1)*X+C(I) IF(N1.GT.2) GO TO L,(10,20) C C-----SOLVE QUADRATIC EQUATION AND RETURN 104 TE6=.5*C(1) C(2)=(CSQRT(TE6*TE6-C(2))-TE6)*SCALE C(1)=-C(1)*SCALE-C(2) RETURN 105 IMAX=N+1 CALL KERMTR('C204.2',LGFILE,MFLAG,RFLAG) IF(MFLAG) THEN IF(LGFILE .EQ. 0) THEN WRITE(*,1001) (A(I),I=1,IMAX) ELSE WRITE(LGFILE,1001) (A(I),I=1,IMAX) ENDIF ENDIF IF(.NOT. RFLAG) CALL ABEND RETURN C 1000 FORMAT( 7X, 'SUBROUTINE MULLER ... THE DEGREE N OF THE ', + 'POLYNOMIAL =', I6, ' IS LESS THAN 1.') 1001 FORMAT( 7X, 'SUBROUTINE MULLER ...'/' THE POLYNOMIAL ', 1'CANNOT HAVE N ROOTS BECAUSE THE COEFFICIENT OF Z**N (FIRST ', 2'COEFFICIENT ) IS ZERO. THE COEFFICIENTS ARE'/(1H0,8G14.6)) 1003 FORMAT( 7X, 'SUBROUTINE MULLER ... ',' ROOT CANNOT BE FOUND ', 1'WITH 2000 ITERATIONS'/' REVERSE THE SEQUENCE OF COEFFICIENTS ', 2' A(N+1)...A(1) AND CALL MULLER AGAIN TO COMPUTE 1/ROOT.' / 3 ' THE COEFFICIENTS ARE' //(1H0,8G14.6)) 1004 FORMAT(41H0ONLY THE FOLLOWING ROOTS HAVE BEEN FOUND//(2H (,E20.13, 11H, ,3X,E20.13,1H) )) END The error does not occure - if you ommit the -funroll-loops or -O - if you use g77 3.1