public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/11496] New: error in flow_loops_find when -funroll-loops active
@ 2003-07-10 21:16 Remigius dot Mommsen at cern dot ch
  2003-07-10 23:52 ` [Bug fortran/11496] " pinskia at physics dot uc dot edu
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Remigius dot Mommsen at cern dot ch @ 2003-07-10 21:16 UTC (permalink / raw)
  To: gcc-bugs

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


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2003-12-09 11:31 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-07-10 21:16 [Bug fortran/11496] New: error in flow_loops_find when -funroll-loops active Remigius dot Mommsen at cern dot ch
2003-07-10 23:52 ` [Bug fortran/11496] " pinskia at physics dot uc dot edu
2003-07-10 23:52 ` pinskia at physics dot uc dot edu
2003-07-11  0:00 ` pinskia at physics dot uc dot edu
2003-07-17 17:24 ` [Bug fortran/11496] [3.3 only] " pinskia at physics dot uc dot edu
2003-07-18 21:21 ` pinskia at physics dot uc dot edu
2003-07-18 21:33 ` [Bug optimization/11496] [3.3 Regression] " pinskia at physics dot uc dot edu
2003-08-05 18:09 ` janis187 at us dot ibm dot com
2003-10-16 17:09 ` mmitchel at gcc dot gnu dot org
2003-12-08 20:08 ` janis187 at us dot ibm dot com
2003-12-09 11:31 ` roger at eyesopen dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).