1 C Test profile-directed block ordering with various Fortran 77 constructs
2 C to catch basic regressions in the functionality.
8 integer lpall
, ieall
, gtall
9 integer lpval
, ieval
, gtval
14 if ((lpval
.ne
. 1) .or
. (ieval
.ne
. 1) .or
. (gtval
.ne
. 1)) then
20 C Pass a value through a function to thwart optimization.
21 integer function foo
(i
)
27 C Test various flavors of GOTO and compare results against expected values.
28 integer function gtall
()
30 integer gt1
, gt2
, gt3
, gt4
, gt5
35 gtval
= gtval
+ gt1
(0)
36 gtval
= gtval
+ gt1
(1)
37 if (gtval
.ne
. 3) then
38 print
*,"gtall part 1: ", gtval
, 3
43 gtval
= gtval
+ gt2
(3)
44 gtval
= gtval
+ gt2
(30)
45 if (gtval
.ne
. 12) then
46 print
*,"gtall part 2: ", gtval
, 12
51 gtval
= gtval
+ gt3
(0)
52 gtval
= gtval
+ gt3
(3)
53 if (gtval
.ne
. 48) then
54 print
*,"gtall part 3: ", gtval
, 48
59 gtval
= gtval
+ gt4
(1)
60 gtval
= gtval
+ gt4
(2)
61 gtval
= gtval
+ gt4
(3)
62 if (gtval
.ne
. 14) then
63 print
*,"gtall part 4: ", gtval
, 14
68 gtval
= gtval
+ gt5
(0)
69 gtval
= gtval
+ gt5
(-1)
70 gtval
= gtval
+ gt5
(5)
71 if (gtval
.ne
. 14) then
72 print
*,"gtall part 5: ", gtval
, 14
78 integer function gt1
(f
)
81 if (f
.ne
. 0) goto 100
88 C Test simple GOTO again, this time out of a DO loop.
89 integer function gt2
(f
)
94 if (i
.eq
. f
) goto 100
102 C Test computed GOTO.
103 integer function gt3
(i
)
107 goto (101, 102, 103, 104), i
120 C Test assigned GOTO.
121 integer function gt4
(i
)
126 if (i
.eq
. 2) assign
102 to label
127 if (i
.eq
. 3) assign
103 to label
128 goto label
, (101, 102, 103)
137 C Test arithmetic IF (bundled with the GOTO variants).
138 integer function gt5
(i
)
151 C Run all of the loop tests and check results against expected values.
152 integer function lpall
()
159 loopval
= loopval
+ loop1
(1,0)
160 loopval
= loopval
+ loop1
(1,2)
161 loopval
= loopval
+ loop1
(1,7)
162 if (loopval
.ne
. 12) then
163 print
*,"lpall part 1: ", loopval
, 12
168 loopval
= loopval
+ loop2
(1,0,0,0)
169 loopval
= loopval
+ loop2
(1,1,0,0)
170 loopval
= loopval
+ loop2
(1,1,3,0)
171 loopval
= loopval
+ loop2
(1,1,3,1)
172 loopval
= loopval
+ loop2
(1,3,1,5)
173 loopval
= loopval
+ loop2
(1,3,7,3)
174 if (loopval
.ne
. 87) then
175 print
*,"lpall part 2: ", loopval
, 87
180 C Test a simple DO loop.
181 integer function loop1
(r
,n
)
191 C Test nested DO loops.
192 integer function loop2
(r
, l
, m
, n
)
206 C Test various combinations of IF-THEN-ELSE and check results against
208 integer function ieall
()
210 integer ie1
, ie2
, ie3
215 ieval
= ieval
+ ie1
(0,2)
216 ieval
= ieval
+ ie1
(0,0)
217 ieval
= ieval
+ ie1
(1,2)
218 ieval
= ieval
+ ie1
(10,2)
219 ieval
= ieval
+ ie1
(11,11)
220 if (ieval
.ne
. 31) then
221 print
*,"ieall part 1: ", ieval
, 31
226 ieval
= ieval
+ ie2
(0)
227 ieval
= ieval
+ ie2
(2)
228 ieval
= ieval
+ ie2
(2)
229 ieval
= ieval
+ ie2
(2)
230 ieval
= ieval
+ ie2
(3)
231 ieval
= ieval
+ ie2
(3)
232 if (ieval
.ne
. 23) then
233 print
*,"ieall part 2: ", ieval
, 23
238 ieval
= ieval
+ ie3
(11,19)
239 ieval
= ieval
+ ie3
(25,27)
240 ieval
= ieval
+ ie3
(11,22)
241 ieval
= ieval
+ ie3
(11,10)
242 ieval
= ieval
+ ie3
(21,32)
243 ieval
= ieval
+ ie3
(21,20)
244 ieval
= ieval
+ ie3
(1,2)
245 ieval
= ieval
+ ie3
(32,31)
246 ieval
= ieval
+ ie3
(3,0)
247 ieval
= ieval
+ ie3
(0,47)
248 ieval
= ieval
+ ie3
(65,65)
249 if (ieval
.ne
. 246) then
250 print
*,"ieall part 3: ", ieval
, 246
256 integer function ie1
(i
,j
)
285 C Test a series of simple IF-THEN statements.
286 integer function ie2
(i
)
310 C Test nested IF statements and IF with compound expressions.
311 integer function ie3
(i
,j
)
317 if ((i
.gt
. 10) .and
. (j
.gt
. i
) .and
. (j
.lt
. 20)) then
327 if ((i
.eq
. 3) .or
. (j
.eq
. 47) .or
. (i
.eq
.j
)) then