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