This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: caller-save and i386
- To: Jan Hubicka <jh at suse dot cz>
- Subject: Re: caller-save and i386
- From: Toon Moene <toon at moene dot indiv dot nluug dot nl>
- Date: Wed, 28 Feb 2001 21:15:28 +0100
- CC: rth at cygnus dot com, gcc-patches at gcc dot gnu dot org, patches at x86-64 dot org
- Organization: Moene Computational Physics, Maartensdijk, The Netherlands
- References: <20010224013958.I7388@atrey.karlin.mff.cuni.cz>
Jan Hubicka wrote:
> Mon Jul 14 15:16:33 CEST 2014 Jan Hubicka <jh@suse.cz>
>
> * caller-save.c (reg_save_code, reg_restore_code): Index by mode, not
> NREGS.
> (insert_save, insert_restore): New parameter save_mode.
> (init_caller_save): Update initialization of reg_save_code
> and reg_restore_code.
> (save_call_clobbered_regs): Compute save_modes and update calls to
> reg_save_code and reg_restore_code.
> (insert_restore): Unsignetize numbers; use save_modes to choose mode
> of spill; update use of reg_restore_code.
> (insert_save): Likewise.
> * i386.h (HARD_REGNO_CALLER_SAVE_MODE): Update.
> * regs.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise.
Could this be the cause for the following failure:
/usr/snp/bin/g77 -g -O2 -mieee -c slasd3.f
slasd3.f: In subroutine `slasd3':
slasd3.f:162: Internal compiler error in save_call_clobbered_regs, at
caller-save.c:414
Please submit a full bug report, with preprocessed source if
appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
while compiling LAPACK on alphaev6-unknown-linux-gnu with a recent
snapshot from the trunk ?
Here's the `offending' Fortran source:
SUBROUTINE SLASD3( NL, NR, SQRE, K, D, Q, LDQ, DSIGMA, U, LDU, U2,
$ LDU2, VT, LDVT, VT2, LDVT2, IDXC, CTOT, Z,
$ INFO )
INTEGER INFO, K, LDQ, LDU, LDU2, LDVT, LDVT2, NL, NR,
$ SQRE
INTEGER CTOT( * ), IDXC( * )
REAL D( * ), DSIGMA( * ), Q( LDQ, * ), U( LDU, * ),
$ U2( LDU2, * ), VT( LDVT, * ), VT2( LDVT2, * ),
$ Z( * )
REAL ONE, ZERO, NEGONE
PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0,
$ NEGONE = -1.0E+0 )
INTEGER CTEMP, I, J, JC, KTEMP, M, N, NLP1, NLP2, NRP1
REAL RHO, TEMP
REAL SLAMC3, SNRM2
EXTERNAL SLAMC3, SNRM2
EXTERNAL SCOPY, SGEMM, SLACPY, SLASCL, SLASD4, XERBLA
INTRINSIC ABS, SIGN, SQRT
INFO = 0
IF( NL.LT.1 ) THEN
INFO = -1
ELSE IF( NR.LT.1 ) THEN
INFO = -2
ELSE IF( ( SQRE.NE.1 ) .AND. ( SQRE.NE.0 ) ) THEN
INFO = -3
END IF
N = NL + NR + 1
M = N + SQRE
NLP1 = NL + 1
NLP2 = NL + 2
IF( ( K.LT.1 ) .OR. ( K.GT.N ) ) THEN
INFO = -4
ELSE IF( LDQ.LT.K ) THEN
INFO = -7
ELSE IF( LDU.LT.N ) THEN
INFO = -10
ELSE IF( LDU2.LT.N ) THEN
INFO = -12
ELSE IF( LDVT.LT.M ) THEN
INFO = -14
ELSE IF( LDVT2.LT.M ) THEN
INFO = -16
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'SLASD3', -INFO )
RETURN
END IF
IF( K.EQ.1 ) THEN
D( 1 ) = ABS( Z( 1 ) )
CALL SCOPY( M, VT2( 1, 1 ), LDVT2, VT( 1, 1 ), LDVT )
IF( Z( 1 ).GT.ZERO ) THEN
CALL SCOPY( N, U2( 1, 1 ), 1, U( 1, 1 ), 1 )
ELSE
DO 10 I = 1, N
U( I, 1 ) = -U2( I, 1 )
10 CONTINUE
END IF
RETURN
END IF
DO 20 I = 1, K
DSIGMA( I ) = SLAMC3( DSIGMA( I ), DSIGMA( I ) ) - DSIGMA( I )
20 CONTINUE
CALL SCOPY( K, Z, 1, Q, 1 )
RHO = SNRM2( K, Z, 1 )
CALL SLASCL( 'G', 0, 0, RHO, ONE, K, 1, Z, K, INFO )
RHO = RHO*RHO
DO 30 J = 1, K
CALL SLASD4( K, J, DSIGMA, Z, U( 1, J ), RHO, D( J ),
$ VT( 1, J ), INFO )
IF( INFO.NE.0 ) THEN
RETURN
END IF
30 CONTINUE
DO 60 I = 1, K
Z( I ) = U( I, K )*VT( I, K )
DO 40 J = 1, I - 1
Z( I ) = Z( I )*( U( I, J )*VT( I, J ) /
$ ( DSIGMA( I )-DSIGMA( J ) ) /
$ ( DSIGMA( I )+DSIGMA( J ) ) )
40 CONTINUE
DO 50 J = I, K - 1
Z( I ) = Z( I )*( U( I, J )*VT( I, J ) /
$ ( DSIGMA( I )-DSIGMA( J+1 ) ) /
$ ( DSIGMA( I )+DSIGMA( J+1 ) ) )
50 CONTINUE
Z( I ) = SIGN( SQRT( ABS( Z( I ) ) ), Q( I, 1 ) )
60 CONTINUE
DO 90 I = 1, K
VT( 1, I ) = Z( 1 ) / U( 1, I ) / VT( 1, I )
U( 1, I ) = NEGONE
DO 70 J = 2, K
VT( J, I ) = Z( J ) / U( J, I ) / VT( J, I )
U( J, I ) = DSIGMA( J )*VT( J, I )
70 CONTINUE
TEMP = SNRM2( K, U( 1, I ), 1 )
Q( 1, I ) = U( 1, I ) / TEMP
DO 80 J = 2, K
JC = IDXC( J )
Q( J, I ) = U( JC, I ) / TEMP
80 CONTINUE
90 CONTINUE
IF( K.EQ.2 ) THEN
CALL SGEMM( 'N', 'N', N, K, K, ONE, U2, LDU2, Q, LDQ, ZERO, U,
$ LDU )
GO TO 100
END IF
IF( CTOT( 1 ).GT.0 ) THEN
CALL SGEMM( 'N', 'N', NL, K, CTOT( 1 ), ONE, U2( 1, 2 ), LDU2,
$ Q( 2, 1 ), LDQ, ZERO, U( 1, 1 ), LDU )
IF( CTOT( 3 ).GT.0 ) THEN
KTEMP = 2 + CTOT( 1 ) + CTOT( 2 )
CALL SGEMM( 'N', 'N', NL, K, CTOT( 3 ), ONE, U2( 1, KTEMP ),
$ LDU2, Q( KTEMP, 1 ), LDQ, ONE, U( 1, 1 ), LDU )
END IF
ELSE IF( CTOT( 3 ).GT.0 ) THEN
KTEMP = 2 + CTOT( 1 ) + CTOT( 2 )
CALL SGEMM( 'N', 'N', NL, K, CTOT( 3 ), ONE, U2( 1, KTEMP ),
$ LDU2, Q( KTEMP, 1 ), LDQ, ZERO, U( 1, 1 ), LDU )
ELSE
CALL SLACPY( 'F', NL, K, U2, LDU2, U, LDU )
END IF
CALL SCOPY( K, Q( 1, 1 ), LDQ, U( NLP1, 1 ), LDU )
KTEMP = 2 + CTOT( 1 )
CTEMP = CTOT( 2 ) + CTOT( 3 )
CALL SGEMM( 'N', 'N', NR, K, CTEMP, ONE, U2( NLP2, KTEMP ), LDU2,
$ Q( KTEMP, 1 ), LDQ, ZERO, U( NLP2, 1 ), LDU )
100 CONTINUE
DO 120 I = 1, K
TEMP = SNRM2( K, VT( 1, I ), 1 )
Q( I, 1 ) = VT( 1, I ) / TEMP
DO 110 J = 2, K
JC = IDXC( J )
Q( I, J ) = VT( JC, I ) / TEMP
110 CONTINUE
120 CONTINUE
IF( K.EQ.2 ) THEN
CALL SGEMM( 'N', 'N', K, M, K, ONE, Q, LDQ, VT2, LDVT2, ZERO,
$ VT, LDVT )
RETURN
END IF
KTEMP = 1 + CTOT( 1 )
CALL SGEMM( 'N', 'N', K, NLP1, KTEMP, ONE, Q( 1, 1 ), LDQ,
$ VT2( 1, 1 ), LDVT2, ZERO, VT( 1, 1 ), LDVT )
KTEMP = 2 + CTOT( 1 ) + CTOT( 2 )
IF( KTEMP.LE.LDVT2 )
$ CALL SGEMM( 'N', 'N', K, NLP1, CTOT( 3 ), ONE, Q( 1, KTEMP ),
$ LDQ, VT2( KTEMP, 1 ), LDVT2, ONE, VT( 1, 1 ),
$ LDVT )
KTEMP = CTOT( 1 ) + 1
NRP1 = NR + SQRE
IF( KTEMP.GT.1 ) THEN
DO 130 I = 1, K
Q( I, KTEMP ) = Q( I, 1 )
130 CONTINUE
DO 140 I = NLP2, M
VT2( KTEMP, I ) = VT2( 1, I )
140 CONTINUE
END IF
CTEMP = 1 + CTOT( 2 ) + CTOT( 3 )
CALL SGEMM( 'N', 'N', K, NRP1, CTEMP, ONE, Q( 1, KTEMP ), LDQ,
$ VT2( KTEMP, NLP2 ), LDVT2, ZERO, VT( 1, NLP2 ), LDVT )
RETURN
END
Please, reconsider ...
--
Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290
Saturnushof 14, 3738 XG Maartensdijk, The Netherlands
Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction)