summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/g77/19990826-3.f
blob: dba24becb4cb32a8ce9ae360372418f5bbc344e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
c { dg-do compile }
* Date: Thu, 19 Aug 1999 10:02:32 +0200
* From: Frederic Devernay <devernay@istar.fr>
* Organization: ISTAR
* X-Accept-Language: French, fr, en
* To: gcc-bugs@gcc.gnu.org
* Subject: g77 2.95 bug (Internal compiler error in `final_scan_insn')
* X-UIDL: 08443f5c374ffa382a05573281482f4f

* Here's a bug that happens only when I compile with -O (disappears with
* -O2)

* > g77 -v --save-temps -O -c  pcapop.f
* g77 version 2.95 19990728 (release) (from FSF-g77 version 0.5.25
* 19990728 (release))
* Reading specs from
* /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95/specs
* gcc version 2.95 19990728 (release)
*  /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95/f771 pcapop.f -quiet
* -dumpbase pcapop.f -O -version -fversion -o pcapop.s
* GNU F77 version 2.95 19990728 (release) (sparc-sun-solaris2.6) compiled
* by GNU C version 2.95 19990728 (release).
* GNU Fortran Front End version 0.5.25 19990728 (release)
* pcapop.f: In subroutine `pcapop':
* pcapop.f:291: Internal compiler error in `final_scan_insn', at
* final.c:2920
* Please submit a full bug report.
* See <URL:http://egcs.cygnus.com/faq.html#bugreport> for instructions.

C* PCAPOP
      SUBROUTINE PCAPOP(M1,M2,L1,L2,NMEM,N1,N2,IB,IBB,K3,TF,TS,TC,TTO)
      DIMENSION NVA(6),C(6),I(6)
C
C CALCUL DES PARAMETRES OPTIMAUX N1 N2 IB IBB
C
      TACC=.035
      TTRANS=.000004
      RAD=.000001
      RMI=.000001
      RMU=.0000015
      RDI=.000003
      RTE=.000003
      REQ=.000005
      VY1=3*RTE+RDI+8*REQ+3*(RAD+RMI+RMU)
      VY2=REQ+2*RAD
      AR2=M2*(2*(REQ+RMI)+3*RMU+M1*(2*RAD+REQ))
C     VARIATION DE L1,L2,
C
      TTOTOP=1.E+10
      N1CO=0
      N2CO=0
      IBCO=0
      IBBCO=0
      K3CO=0
      TESOP=0.
      TCOP=0.
      TFOP=0.
      INUN=7
      INDE=7
      IF(M1.LT.128)INUN=6
      IF(M1.LT.64)INUN=5
      IF(M1.LT.32)INUN=4
      IF(M2.LT.128)INDE=6
      IF(M2.LT.64)INDE=5
      IF(M2.LT.32)INDE=4
      DO 3 NUN =3,INUN
      DO 3 NDE=3,INDE
      N10=2**NUN
      N20=2**NDE
      NDIF=(N10-N20)
      NDIF=IABS(NDIF)
C POUR AVOIR CES RESULTATS FAIRE TOURNER LE PROGRAMME VEFFT1
      TCFFTU=0.
      IF(N10.EQ.128.AND.N20.EQ.128)TCFFTU=3.35
      IF(N10.EQ.64.AND.N20.EQ.64)TCFFTU=.70
      IF(N10.EQ.32.AND.N20.EQ.32)TCFFTU=.138
      IF(N10.EQ.16.AND.N20.EQ.16)TCFFTU=.0332
      IF(N10.EQ.8.AND.N20.EQ.8)TCFFTU=.00688
      IF(NDIF.EQ.64)TCFFTU=1.566
      IF(NDIF.EQ.96)TCFFTU=.709
      IF(NDIF.EQ.112)TCFFTU=.349
      IF(NDIF.EQ.120)TCFFTU=.160
      IF(NDIF.EQ.32)TCFFTU=.315
      IF(NDIF.EQ.48)TCFFTU=.154
      IF(NDIF.EQ.56)TCFFTU=.07
      IF(NDIF.EQ.16)TCFFTU=.067
      IF(NDIF.EQ.24)TCFFTU=.030
      IF(NDIF.EQ.8)TCFFTU=.016
      N30=N10-L1+1
      N40=N20-L2+1
      WW=VY1+N30*VY2
      NDOU=2*N10*N20
      IF((N10.LT.L1).OR.(N20.LT.L2)) GOTO 3
      NB=NMEM-NDOU-N20*(L1-1)
      NVC=2*N10*(N20-1)+M1
      IF(NB.LT.(NVC)) GOTO 3
      CALL VALENT(M1,N30,K1)
      CALL VALENT(M2,N40,K2)
      IS=K1/2
      IF((2*IS).NE.K1)K1=K1+1
      TFF=TCFFTU*K1*K2
      CALL VALENT(M2,N40,JOFI)
      IF(NB.GE.(K1*N20*N30+2*N20*(L1-1))) GOTO 4
      TIOOP=1.E+10
      IC=1
18    IB1=2*IC
      MAX=(NB-2*N20*(L1-1))/(N20*N30)
      IN=MAX/2
      IF(MAX.NE.2*IN) MAX=MAX-1
      K3=K1/IB1
      IBB1=K1-K3*IB1
      IOFI=M1/(IB1*N30)
      IRZ=0
      IF(IOFI*IB1*N30.EQ.M1) GOTO1234
      IRZ=1
      IOFI=IOFI+1
      IF(IBB1.EQ.0) GOTO 1234
      IF(M1.EQ.((IOFI-1)*IB1*N30+IBB1*N30)) GOTO 1233
      IRZ=2
      GOTO 1234
1233  IRZ=3
1234  IBX1=IBB1
      IF(IBX1.EQ.0)IBX1=IB1
      AR1=M2*(2*(RAD+RMI+RMU+REQ)+(M1-(IOFI-1)*IB1*N30)*2*(REQ+RAD))
     %+M2*(3*(REQ+RMU+RAD)+4*RMI+(M1-(IOFI-1)*IB1*N30)*(2*RAD+REQ)
     %+(IOFI-1)*IB1*N30*(2*RMI+REQ+RAD))
      AR5=(JOFI-1)*(N20-L2)*(M1-(IOFI-1)*IB1*N30)*(2*(RAD+RMU)+REQ)
     %*IOFI+(M2-(JOFI-1)*N40+L2-2)*(M1-(IOFI-1)*IB1*N30)*(2*(RAD+RMU
     %)+REQ)*IOFI
      WQ=((IOFI-1)*IB1+IBX1)*JOFI*WW
      AT1=N20*WQ
      AT2=N40*WQ
      QW=JOFI*(VY1+VY2*IB1*N30)
      AT3=IOFI*N40*QW
      AT4=(IOFI-1)*N40*QW
      AT5=JOFI*((IOFI-1)*N40*(IB1/IBX1)*(VY1+IBX1*N30*VY2)
     %+N40*((IB1/IBX1)*(IOFI-1)+1)*(VY1+IBX1*N30*VY2))
      AT6=JOFI*((IOFI-1)*N40*(IB1/2)*(VY1+2*N30*VY2)+N40*(
     %IB1*(IOFI-1)/2+IBX1/2)*(VY1+2*N30*VY2))
      T1=JOFI*N20*(L1-1)*REQ
      T2=M1*(L2-1)*REQ
      T3=JOFI*N20*IBX1*N30*(RAD+REQ)
      T4=JOFI*((IOFI-1)*IB1*N30*N20*(2*RMI+REQ)+IBX1*N30*N20*(2*RMI+R
     %EQ))
      T5=JOFI*((IOFI-1)*IB1/2+IBX1/2)*N20*N30*(2*RAD+REQ)
      T6=2*JOFI*(((IOFI-1)*IB1+IBX1)*N20)*((5*(RMI+RMU)+4*RAD
     %)+(L1-1)*(2*RAD+REQ)+N30*(2*RAD+REQ))
      T7=JOFI*2*((IOFI-1)*IB1+IBX1)*(L1-1)*(2*RAD+REQ)
      T8=JOFI*N10*N20*((IOFI-1)*IB1/2+IBX1/2)*(3*REQ+9*RAD+4*RMU+RMI)
      T9=N10*N20*JOFI*((IOFI-1)*IB1/2+IBX1/2)*(REQ+RMI)+M1*M2*(REQ+R
     %DI+2*RAD)
      T10=JOFI*((IOFI-1)*IB1/2+IBX1/2)*2*(3*RMU+2*(RMI+RAD)+N40*(3*RMI
     %+4*RMU+3*(RAD+REQ)+N30*(2*RAD+REQ)))
      POI=JOFI
      IF(POI.LE.2)POI=2
      TNRAN=(N40+(POI-2)*N20+(M2-(JOFI-1)*N40+L2-1))*(RMI+RMU+RAD
     %+REQ+N30*(2*RAD+2*REQ)*(IB1*(IOFI-1)+IBX1))
      IF(TNRAN.LT.0.)TNRAN=0.
      TCPU=T1+T2+T3+T4+T5+T6+T7+T8+T9+T10+TNRAN
      NVA(1)=N40
      NVA(2)=N40
      NVA(3)=N20
      NVA(4)=N20
      NVA(5)=M2-(JOFI-1)*N40
      NVA(6)=NVA(5)
      C(1)=FLOAT(IB1*N30)/FLOAT(M1)
      C(2)=FLOAT(M1-(IOFI-1)*IB1*N30)/FLOAT(M1)
      C(3)=C(1)
      C(4)=C(2)
      C(5)=C(1)
      C(6)=C(2)
      K=1
      P1=FLOAT(NB)/FLOAT(M1)
10    IP1=P1
      I(K)=1
      IF(IP1.GE.NVA(K)) GOTO 7
      P2=P1
      IP2=P2
8     P2=P2-FLOAT(IP2)*C(K)
      IP2=P2
      IF(IP2.EQ.0) GOTO 3
      IP1=IP1+IP2
      I(K)=I(K)+1
      IF(IP1.GE.NVA(K))GOTO 7
      GOTO 8
7     IF(K.EQ.6) GOTO 11
      K=K+1
      GOTO 10
11    IP1=0
      IP2=0
      IP3=0
      POFI=JOFI
      IF(POFI.LE.2)POFI=2
      TIOL=(I(2)+(IOFI-1)*I(1)+(POFI-2)*(IOFI-1)*I(3)+(POFI-
     %2)*I(4)+(IOFI-1)*I(5)+I(6))*TACC+(IOFI*M1*N40+(POFI-2)*IOFI*
     %M1*N20+(M2-(JOFI-1)*N40+L2-1)*M1*IOFI)*TTRANS
      IF(IBB1.EQ.0) GOTO 33
      IF(IB1.EQ.IBB1) GOTO 33
      IF(IBB1.EQ.2)GOTO 34
      IP3=1
      INL=NMEM/((IOFI-1)*IB1*N30+IBB1*N30)
55    IF(INL.GT.N40)INL=N40
      GOTO 35
33    IF(IB1.GT.2) GOTO 36
      IF((M1-(IOFI-1)*IB1*N30).GE.N30) GOTO 36
34    IP1=1
      INL=NMEM/(2*M1-(IOFI-1)*IB1*N30)
      GOTO 55
36    IP2=1
      INL=NMEM/(IOFI*IB1*N30)
      IF(INL.GT.N40)INL=N40
35    CALL VALENT(N40,INL,KN1)
      CALL VALENT(M2-(JOFI-1)*N40,INL,KN2)
      CALL VALENT(INL*IBB1,IB1,KN3)
      CALL VALENT((N40-(KN1-1)*INL)*IBB1,IB1,KN4)
      IF((IP1+IP2+IP3).NE.1) CALL ERMESF(14)
      TIO1=0.
      IF(IP3.EQ.1)TIO1=N30*M2*TTRANS*(IB1*(IOFI-1)+IBB1)
      IF(IP1.EQ.1)TIO1=M1*M2*TTRANS
      IF(IP2.EQ.1) TIO1=(IB1*N30*M2*IOFI*TTRANS)
      TTIO=2.*TIO1+(KN1*IOFI*(JOFI-1)+KN2*IOFI+(KN1-1)*(
     %JOFI-1)+IOFI*(JOFI-1)+KN2-1.+IOFI+(KN1*(JOFI-1)+KN2))*TACC
     %+M1*M2*TTRANS+TIOL
      IF((IP1.EQ.1).AND.(IRZ.EQ.0))TCPU=TCPU+AT1+AT2+AT3
      IF((IP1.EQ.1).AND.(IRZ.NE.0))TCPU=TCPU+AT1+AT2+AT4+AR1
      IF((IP2.EQ.1).AND.(IRZ.EQ.0))TCPU=TCPU+AT1+AT2+AT3
      IF((IP2.EQ.1).AND.(IRZ.NE.0))TCPU=TCPU+AT1+AT2+AT3+AR2
      IFOIS=IB1/IBX1
      IF((IP3.EQ.1).AND.(IFOIS*IBX1.EQ.IB1))TCPU=TCPU+AT1+AT2+AT5+AR2
      IF((IP3.EQ.1).AND.(IFOIS*IBX1.NE.IB1))TCPU=TCPU+AT1+AT2+AT6+AR2
      IF((IP1.EQ.1).AND.(IRZ.EQ.1))TCPU=TCPU+AR5
      IF((IP1.EQ.1).AND.(IRZ.EQ.2))TCPU=TCPU+AR5
      TTIOG=TTIO+TCPU
      IF(TTIOG.LE.0.) GOTO 99
      IF(TTIOG.GE.TIOOP) GOTO 99
      IBOP=IB1
      IBBOP=IBB1
      K3OP=K3
      TIOOP=TTIOG
      TIOOP1=TTIO
      TIOOP2=TCPU
99    IF(IB1.GE.MAX)GOTO17
      IC=IC+1
      GOTO 18
4     T1=JOFI*N20*(L1-1)*REQ
      T2=M1*(L2-1)*REQ
      T3=JOFI*N20*N30*(RAD+REQ)*K1
      T4=JOFI*(K1*N30*N20*(2*RMI+REQ))
      T5=JOFI*N20*N30*(2*RAD+REQ)*K1/2
      T6=2*JOFI*(K1*N20)*((5*RMI+RMU)+4*RAD+(L1-1)*(2*RAD+REQ)+N30*2*
     %RAD+REQ)
      T7=JOFI*2*K1*(L1-1)*(2*RAD+REQ)
      T9=JOFI*N10*N20*K1*(REQ+RMI)/2+M1*M2*(REQ+RDI+2*RAD)
      T8=JOFI*N10*N20*K1*(3*REQ+9*RAD+4*RMU+RMI)/2
      T10=JOFI*K1*(3*RMU+2*(RMI+RAD)+N40*(3*RMI
     %+4*RMU+3*(RAD+REQ)+N30*(2*RAD+REQ)))
      PIO=JOFI
      IF(PIO.LE.2)PIO=2
      TNR=(N40+(PIO-2)*N20+(M2-(JOFI-1)*N40+L2-1))*(RMU+RMI+RAD+REQ+
     %N30*(2*RAD+2*REQ)*K1)
      IF(TNR.LE.0.)TNR=0.
      BT1=JOFI*N20*WW*K1
      BT2=JOFI*N40*WW*K1
      BT3=JOFI*N40*(VY1+K1*N30*VY2)
      BR1=M2*(2*(RAD+RMI+RMU+REQ)+(M1*2*(REQ+RAD)))+M2*(3*(
     $REQ+RAD+RMU)+4*(RMI)+M1*(2*(RAD)+REQ))
      BR2=M2*(2*(REQ+RMI)+3*RMU+M1*(2*RAD+REQ))
      TCPU=T1+T2+T3+T4+T5+T6+T7+T8+T9+T10
      TCPU=TCPU+TNR+BT1+BT2
      LIOF=M1/(N30)
      IRZ=0
      IF(LIOF*N30.EQ.M1) GOTO 2344
      IRZ=1
2344  IF(IRZ.EQ.0)TCPU=TCPU+BT3
      IF(IRZ.NE.0)TCPU=TCPU+BT3+BR2
      TIOOP=2.*FLOAT(M1)*FLOAT(M2)*TTRANS+2.*FLOAT(K2)*TACC+TCPU
      IBOP=1
      IBBOP=0
      K3OP=1
      TIOOP2=TCPU
      TIOOP1=TIOOP-TCPU
17    TTOT=TIOOP+TFF
      IF(TTOT.LE.0.) GOTO 3
      IF(TTOT.GE.TTOTOP)GOTO3
      N1CO=N10
      N2CO=N20
      IBCO=IBOP
      IBBCO=IBBOP
      K3CO=K3OP
      TTOTOP=TTOT
      TESOP=TIOOP1
      TCOP=TIOOP2
      TFOP=TFF
3     CONTINUE
 
      N1=N1CO
      N2=N2CO
      TTO=TTOTOP
      IB=IBCO
      IBB=IBBCO
      K3=K3CO
      TC=TCOP
      TS=TESOP
      TF=TFOP
      TT=TCOP+TFOP
      TWER=TTO-TT
      IF(N1.EQ.0.OR.N2.EQ.0) CALL OUTSTR(0,'PAS DE PLACE MEMOIRE SUFFISA
     $NTE POUR UNE MISE EN OEUVRE PAR BLOCS$')
      IF(IB.NE.1)RETURN
      IHJ=(M1/(N1-L1+1))
      IF(IHJ*(N1-L1+1).NE.M1)IHJ=IHJ+1
      IHJ1=IHJ/2
      IF(IHJ1*2.NE.IHJ)GOTO7778
      IB=IHJ
      IBB=0
      RETURN
7778  IB=IHJ+1
      IBB=0
      RETURN
      END