This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: patch to reduce register pressure from strength reduction


Joern,

> > I've made the following patch, which I am currently testing:
> >
> > Wed Jan 27 23:39:53 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
> >
> >       * loop.c (recombine_givs): Don't try to derive givs that have combined.

> P.S.: It just went past the stage2 genrecog invokation.

Yes, I managed to complete the build here too.

However, here's a Fortran source that causes f771 to segfault in
unroll.c:

(gdb) run  b.f -quiet -dumpbase b.f -malign-double -g -O2 -Wall
-Wsurprising -version -fversion -ffast-math -fomit-frame-pointer
-funroll-loops -fu
nix-intrinsics-hide -o /tmp/ccGavIGV.s
Starting program:
/usr/snp/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.93.03/f771 b.f -quiet
-dumpbase b.f -malign-double -g -O2 -Wall -Wsurprising -version
-fversion -ffast-math -fomit-frame-pointer -funroll-loops
-funix-intrinsics-hide -o /tmp/ccGavIGV.s
GNU F77 version egcs-2.93.03 19990128 (gcc2 ss-980929 experimental)
(i686-pc-linux-gnu) compiled by GNU C version egcs-2.93.03 19990128
(gcc2 ss-980929 experimental).
GNU Fortran Front End version 0.5.24-19980804

Program received signal SIGSEGV, Segmentation fault.
copy_loop_body (copy_start=0x82e40d4, copy_end=0x82e4144,
map=0xbfff423c, exit_label=0x83304a8, last_iteration=0,
unroll_type=UNROLL_MODULO, 
    start_label=0x82e410c, loop_end=0x82e4e80, insert_before=0x82e4190,
copy_notes_from=0x82e4190) at ../../egcs/gcc/unroll.c:1733

Here's the code:

      SUBROUTINE ERRDDR(
     > ELEVEL  ,IFDR    ,IDIR    ,ISRR    ,ASRR    ,IMDR    ,AMDR    )
                             I M P L I C I T
     1 INTEGER(H),LOGICAL(L),CHARACTER*8 (Y)

      DIMENSION ELEVEL(NELEV)
      DIMENSION IFDR(*)

      COMMON/COMANA/
     L LVERIF,   LDIAGN,
     I NANDAT,   NANTIM,   NANCDY,   NANMIN,
     R OBNLAT,   OBSLAT,   OBWLON,   OBELON,
     R EXNLAT,   EXSLAT,   EXWLON,   EXELON,
     R ALATNB,   ALATSB,   ALONWB,   ALONEB,
     L LSYNOP,   LAIRCF,   LSATOB,   LDRIBU,   LTEMP,    LPILOT,
     L LSATEM,   LPAOB,
     L LMASSW,   LHUMID,   LSURFA,
     L LSNOW,    LSSTOB,   LSSTFL,   LT2M,     LRH2M,    LPRECP,
     L LSOILW,   LSNWFG,   L2MFIL,
     L LCD011,   LCD014,   LCD021,   LCD022,   LCD023,   LCD024,
     L LCD041,   LCD141,   LCD241,
     L LCD144,   LCD037,   LCD145,   LCD034,
     L LCD088,   LCD188,
     L LCD063,   LCD064,   LCD165,   LCD160,   LPERS1,
     L LCD035,   LCD036,   LCD135,   LCD039,   LCD040,
     L LCD032,   LCD033,
     L LCD086,   LCD186,
     L LCD180


      COMMON /COMFCO/
     I NFROWS,   NFLON,    NFLEN,    NFDDLN,
     I NFVAR,    NFPARS(15),         NBTVAR,   NBTPAR(10),
     I NRZVAR,   NRZPAR(10),         NRUVAR,   NRUPAR(10),
     I NSFVAR,   NSFPAR(10),
     R FLATN,    FLATS,    FLONW,    FLONE,
     R FLONP,    FLATP,    OENOR,    OESOU,
     R RESERR,
     I NOERW,    NOELO


      COMMON/COMERR/
     I NEDDLN,   NERLON,   NELEV,    NEVAR,    NEROW1,   MEROW,
     I MERWOS,   NFES,     NEMS,     NCLFGS,
     R DTAERR,   DTRAEX,   DTRATR,   EXELAT,   TRELAT,   DERLAT,
     R DERLON,   SMCFER,   WTERRN,   AEMIN,
     L LAECL


      COMMON/COMIOD/
     I NIN,       NOUT,      NSPECI,    NG3I,      NG3PI,     NCLIMI
     I,NLEGI,     NLEGD,     NAOF,      NGPFG,     NRETRV,    NPAIO(7)
     I,NCFIO,     NGPAN,     NSPECO,    NG3O,      NG3A,      NDQF
     I,NBLHFI,    NBLHFO
     I,NFWORK,    NWRDIA,    NAERR,     NEVAER,    NCLERR
     I,NFCOUN,    NFBTUN,    NORZUN,    NORUUN,    NOSFUN
     I,NACOUN,    NMTTUN(4), NSUPUN,    NOUTTA,    NSAVOU
     I,NMCSL5,    NMCSL2,    NMSTIO,    NECSLI,    NFDSIO(3)

      DIMENSION IDIR(NEDDLN)
      DIMENSION ISRR(NEDDLN)
      DIMENSION ASRR(NEDDLN)
      DIMENSION IMDR(NEDDLN)
      DIMENSION AMDR(NEDDLN)
      CHARACTER*8 YDATE
      CHARACTER*6 YTIME
      ITYPE=1
      ILEND=512
 110  CONTINUE
      IFDR(1)=512
      ILEN=30
      IFDR(2)=ILEN
      IFDR(3)=512
      IFDR(4)=1
      IFDR(5)=3
      IFDR(6)=ILEN+1
 120  CONTINUE
      CALL VDATE (YDATE)
      READ(YDATE,'(I8)') IFDR(8)
      CALL VCLOCK (YTIME)
      READ(YTIME,'(I6)') IFDR(7)
 130  CONTINUE
       IFDR(9)=NANTIM
      IFDR(10)=NANDAT
      IFDR(11)=NANTIM
      IFDR(12)=NANDAT
 140  CONTINUE
      IFDR(13)=1
      IFDR(14)=1
      IFDR(15)=4
      IFDR(16)=NFROWS
      IFDR(17)=512
      IFDR(18)=NERLON*NELEV*NEVAR
      DO 145 J=19,30
 145  IFDR(J)=0
 150  CONTINUE
      WRITE(NEVAER,FMT='(I4,I3,I4,2I2,I3,3(I7,I9),3I2,2I4,I6,/,A)',
     ,   IOSTAT=IOS) (IFDR(J),J=1,18),'ANALYSIS ERRORS '
      IF(IOS.NE.0)THEN
         WRITE(NOUT,'(A,I3,A,I4)')
     +        'ERRDDR: UNIT',NEVAER,' FDR1 WRITE ERROR:',IOS
         CALL ENDRUN
      ENDIF
 210  CONTINUE
      ISRR(1)=512
      IPVAL=2
      ILEN=40+NEVAR*IPVAL+NFROWS
      ISRR(2)=ILEN
      ISRR(3)=512
      ISRR(4)=2
      ISRR(5)=1
      ISRR(6)=3
      ISRR(7)=ILEN+1
      ICHAR=ILEN+NFROWS*3+NELEV+1
      ISRR(8)=ICHAR
      ISRR(9)=0
      ISRR(10)=0
      ISRR(11)=1
      ISRR(12)=1
      ISRR(13)=1
      ISRR(14)=132
      ISRR(15)=4
       ISRR(16)=0
      ISRR(17)=0
      ISRR(18)=0
      ISRR(19)=0
      ISRR(20)=0
      ISRR(21)=NFROWS
      ISRR(22)=NEVAR
      ISRR(23)=IPVAL
      ISRR(24)=41
      ISRR(25)=NFROWS
      IWHOR=41+NEVAR*IPVAL
      ISRR(26)=IWHOR
      ILL=3
      ISRR(27)=ILL
      IWLTLN=IWHOR+NFROWS
      ISRR(28)=IWLTLN
      ISRR(29)=0
      ISRR(30)=0
      ISRR(31)=NELEV
      ISRR(32)=1
      ISRR(33)=0
      ISRR(34)=NELEV
      ISRR(35)=1
      ISRR(36)=0
      IWVCT=IWLTLN+ILL*NFROWS
      ISRR(37)=IWVCT
      ISRR(38)=0
      ISRR(39)=0
      ISRR(40)=0
 220  CONTINUE
      ISRR(41)=3
      ISRR(42)=NELEV
      ISRR(43)=4
      ISRR(44)=NELEV
      ISRR(45)=28
      ISRR(46)=NELEV
 230  CONTINUE
      DO 235 J=1,NFROWS
      ISRR(IWHOR+J-1)=NERLON
 235  CONTINUE
 240  CONTINUE
      ZLAT=FLATN
      DO 245 J=1,NFROWS
      ASRR(IWLTLN-3+J*3)=ZLAT
      ASRR(IWLTLN-2+J*3)=FLONW
      ASRR(IWLTLN-1+J*3)=FLONE
      ZLAT=ZLAT-DERLAT
 245  CONTINUE
 250  CONTINUE
      DO 255 J=1,NELEV
      ASRR(IWVCT-1+J)=ELEVEL(J)
 255  CONTINUE
      DO J=ICHAR,512
         call char2int('    ',isrr(j), 4)
      enddo
      WRITE(NEVAER,FMT='(3I4,3I2,2I4,5I2,I4,6I2,I4,2I2,I3,2I4,I2,I4,I2,
     ,   I3,2I2,I3,2I2,I4,3I2)',IOSTAT=IOS)(ISRR(J),J=1,40)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(25I3)',IOSTAT=IOS)
     ,   (ISRR(J),J=ISRR(24),ISRR(24)+2*ISRR(22)-1)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(20I4)',IOSTAT=IOS)
     ,   (ISRR(J),J=ISRR(26),ISRR(26)+  ISRR(21)-1)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(4E20.12)',IOSTAT=IOS)
     ,   (ASRR(J),J=ISRR(28),ISRR(28)+3*ISRR(21)-1)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(4E20.12)',IOSTAT=IOS)
     ,   (ASRR(J),J=ISRR(37),ISRR(37)+  ISRR(31)-1)
      IF(IOS.NE.0)THEN
         WRITE(NOUT,'(A,I3,A,I4)')
     +         'ERRDDR: UNIT',NEVAER,' SRR WRITE ERROR:',IOS
         CALL ENDRUN
      ENDIF
 310  CONTINUE
      IMDR(1)=512
      ILEN=46+NFROWS
      IMDR(2)=ILEN
      IMDR(3)=512
      IMDR(4)=2
      IMDR(5)=1
      IMDR(6)=3
      IMDR(7)=ILEN+1
      ICHAR=ILEN+3*NFROWS+NELEV+1
      IMDR(8)=ICHAR
      IMDR(9)=0
      IMDR(10)=0
      IMDR(11)=1
      IMDR(12)=NFROWS
      IMDR(13)=1
      IMDR(14)=1
      IWLONS=47
      IMDR(15)=IWLONS
      IWLTLN=IWLONS+NFROWS
      IMDR(16)=IWLTLN
      DO 315 J=17,36
      IMDR(J)=0
  315  CONTINUE
      IMDR(37)=NELEV
      IMDR(38)=1
      IMDR(39)=NELEV
      IMDR(40)=1
      IMDR(41)=0
      IWVCT=IWLTLN+3*NFROWS
      IMDR(42)=IWVCT
      IMDR(43)=0
      IMDR(44)=0
      IMDR(45)=0
      IMDR(46)=0
 320  CONTINUE
      DO 325 J=1,NFROWS
      IMDR(IWLONS-1+J)=NERLON
 325  CONTINUE
 330  CONTINUE
      ZLAT=FLATN
      DO 335 J=1,NFROWS
      AMDR(IWLTLN-3+J*3)=ZLAT
      AMDR(IWLTLN-2+J*3)=FLONW
      AMDR(IWLTLN-1+J*3)=FLONE
      ZLAT=ZLAT-DERLAT
 335  CONTINUE
 340  CONTINUE
      DO 345 J=1,NELEV
      AMDR(IWVCT-1+J)=ELEVEL(J)
 345  CONTINUE
      DO J=ICHAR,512
         call char2int('    ',imdr(j), 4)
      enddo
      WRITE(NEVAER,FMT='(3I4,3I2,2I4,3I2,I4,2I2,I3,I4,20I2,I3,I2,I3,2I2,
     ,   I4,4I2)',IOSTAT=IOS)(IMDR(J),J=1,46)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(20I4)',IOSTAT=IOS)
     ,   (IMDR(J),J=IMDR(15),IMDR(15)+  IMDR(12)-1)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(4E20.12)',IOSTAT=IOS)
     ,   (AMDR(J),J=IMDR(16),IMDR(16)+3*IMDR(12)-1)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(4E20.12)',IOSTAT=IOS)
     ,   (AMDR(J),J=IMDR(42),IMDR(42)+  IMDR(37)-1)
      IF(IOS.NE.0)THEN
         WRITE(NOUT,'(A,I3,A,I4)')
     +         'ERRDDR: UNIT',NEVAER,' DDR 3 WRITE ERROR:',IOS
         CALL ENDRUN
      ENDIF
 410  CONTINUE
      IDIR(1)=512
      IDIR(2)=512
      DO 415 J=3,10

 415  IDIR(J)=0
      IFDR(11)=NANTIM
      DO 420 J=1,NFROWS
      IDIR(7+4*J)=J
      IDIR(8+4*J)=NERLON*NEVAR*NELEV
      IDIR(9+4*J)=1
      IDIR(10+4*J)=NERLON*NEVAR*NELEV
 420  CONTINUE
      I1=11+4*NFROWS
      DO 425 J=I1,512
      IDIR(J)=0
 425  CONTINUE
      WRITE(NEVAER,FMT='(2I4,8I2)',IOSTAT=IOS)(IDIR(J),J=1,10)
      IF (IOS .EQ. 0)
     ,   WRITE(NEVAER,FMT='(I3,I6,I2,I6)',IOSTAT=IOS)
     ,   (IDIR(J),IDIR(J+1),IDIR(J+2),IDIR(J+3),J=11,10+4*NFROWS,4)
      IF(IOS.NE.0)THEN
         WRITE(NOUT,'(A,I3,A,I4)')
     +         'ERRDDR: UNIT',NEVAER,' DDR 4 WRITE ERROR:',IOS
         CALL ENDRUN
      ENDIF
 430  CONTINUE
      RETURN
      END

-- 
Toon Moene (toon@moene.indiv.nluug.nl)
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
Phone: +31 346 214290; Fax: +31 346 214286
g77 Support: fortran@gnu.org; egcs: egcs-bugs@cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]