This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: patch to reduce register pressure from strength reduction
- To: Joern Rennecke <amylaar at cygnus dot co dot uk>, egcs-patches at cygnus dot com
- Subject: Re: patch to reduce register pressure from strength reduction
- From: Toon Moene <toon at moene dot indiv dot nluug dot nl>
- Date: Fri, 29 Jan 1999 12:41:04 +0100
- Organization: Moene Computational Physics, Maartensdijk, The Netherlands
- References: <199901282326.XAA10078@phal.cygnus.co.uk>
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