subroutine test1(x,z,a,b,c,xx,yy,a3,b3,c3,a2,c2,s,abc,bcd,n,jj) dimension x(100,100),z(100,100),a(100),b(100),c(100),d(100),e(100) dimension xx(100), yy(100), zz(100), l(100) dimension a3(100,100,100) dimension b3(100,100,100) dimension c3(100,100,100) dimension a2(100,100),c2(100,100) dimension u1(100,100,100) dimension u2(100,100,100) dimension u3(100,100,100) dimension abc1(100),abc2(100),bcd1(100) c c example in paper c do 10 i= 2,n xx(i) = b(i) + c(i) c(i-1) = xx(i) + e(i) yy(i) = a(i) * c(i) d(i) = (yy(i) + 1.0)** 2 a(i+1) = c(i) -1.0 10 continue write(unit=6,fmt=12) a(n) c c loop selection c do 1120 i = 1,100 do 190 j = 1,100 do 180 k = 1,100 c3(i,j,k) = a3(i,j,k) 180 continue 190 continue 1120 continue write(unit=6,fmt=12) c3(n,n,n) c c loop switching c do 110 i = 1,100 do 100 j = 1,100 z(i,j+1) = z(i,j) * x(i,j) 100 continue 110 continue write(unit=6,fmt=12) z(n,n) c c statement reordering c do 400 i = 1,100 a(i) = b(i-1) b(i) = c(i) * 3 400 continue write(unit=6,fmt=12) a(n) c c node splitting c do 500 i = 1,100 abc = abc + 1 bcd = abc ** 2 a(i) = bcd + d(i) abc = b(i+1) + b(i-1) b(i) = c(i) + 1 c(i+1) = b(i) + 1 500 continue write(unit=6,fmt=12) c(n) write(unit=6,fmt=12) b(n) c c node splitting c do 510 i = 1,100 abc1(i-1) = abc2(i-1) + 1 bcd1(i-1) = abc1(i-1) ** 2 a(i) = bcd1(i-1) + d(i) abc2(i) = b(i+1) + b(i-1) b(i) = c(i) + 1 c(i+1) = b(i) + 1 510 continue write(unit=6,fmt=12) c(n) write(unit=6,fmt=12) b(n) c c node splitting c t2 = 0 do 700 i = 1,100 a(i) = a(i-1) + b(i) + c(i) + d(i) + t1 + t2 700 continue write(unit=6,fmt=12) a(n) c c node splitting c t2 = 0 do 800 i = 1,100 a(i) = a(i-1) + t1 + t2 + b(i) + c(i) + d(i) 800 continue write(unit=6,fmt=12) a(n) c c loop distribution and fusion c do 120 i = 1,100 do 90 j = 1,100 do 80 k = 1,100 c3(i,j,k) = a3(i,j,k) b3(i,j,k) = a3(i,j,k) c3(i+1,j,k) = a3(i,j,k) 80 continue 90 continue 120 continue write(unit=6,fmt=12) c3(n,n,n) c c multi level vectorization c do 301 i = 1,100 xx(i) = yy(i) + 10 do 201 j = 1,100 b(j) = a2(j,n) do 101 k = 1,100 a2(j+1,k) = b(j) + c2(j,k) 101 continue yy(i+j) = a2(j+1,n) 201 continue 301 continue write(unit=6,fmt=12) yy(n) c c constant propagation helps c nl1 = 1 nl2 = 2 do 81 kx = 2,3 do 91 ky = 2,21 u1(kx,ky,nl2) = u1(kx,ky,nl1) + $ a11*(u1(kx,ky+1,nl1) - u1(kx,ky-1,nl1)) + $ a12*(u2(kx,ky+1,nl1)-u2(kx,ky-1,nl1)) + $ a13*(u3(kx,ky+1,nl1)-u3(kx,ky-1,nl1)) + $ sig*(u1(kx+1,ky,nl1) - 2.*u1(kx,ky,nl1) + u1(kx-1,ky,nl1)) 91 continue 81 continue write(unit=6,fmt=11) lll, u1(n,n,n) 11 format (i6,e12.6) 12 format (e12.6) c c constant propagation doesnt help c nl1 = 1 nl2 = 1 do 92 ky = 2,21 do 82 kx = 2,3 u1(kx,ky,nl2) = u1(kx,ky,nl1) + $ a11*(u1(kx,ky+1,nl1) - u1(kx,ky-1,nl1)) + $ a12*(u2(kx,ky+1,nl1)-u2(kx,ky-1,nl1)) + $ a13*(u3(kx,ky+1,nl1)-u3(kx,ky-1,nl1)) + $ sig*(u1(kx+1,ky,nl1) - 2.*u1(kx,ky,nl1) + u1(kx-1,ky,nl1)) 82 continue 92 continue write(unit=6,fmt=11) lll, u1(n,n,n) c c induction variable substitution c xx(1) = 3. jjj = 3 do 30 i=1,100 xx(i)=yy(i)*zz(n2-k+1) k = k + 3 30 continue write(unit=6,fmt=12) xx(n) c c mixed variable and constant lb, ub, and stride c xx(1) = 4. jjj = 4 do 40 i=1,n2,n3 k=l(i) xx(i)=yy(i)*zz(n2-k+1) 40 continue write (unit=6,fmt=11) jjj, xx(n) c c mixed variable and constant lb, ub, and stride c xx(1) = 5. jjj = 5 do 50 i=n1,n2 k=l(i) xx(i)=yy(i)*zz(n2-k+1) k = k + jjj 50 continue write (unit=6,fmt=11) jjj, xx(n) c c mixed variable and constant lb, ub, and stride c xx(1) = 6. jjj = 6 do 60 i=n1,100,n3 xx(i)=yy(i)*zz(100-k+1) k = k + jjj 60 continue write (unit=6,fmt=11) jjj, xx(n) c c all variable - lb, ub, and stride c xx(1) = 7. jjj = 7 do 70 i=n1,n2,n3 k=l(i) xx(i)=yy(2*i+1)*zz(k+i/n3+n1) 70 continue write (unit=6,fmt=11) jjj, xx(n) c c symbolic dependence test c do 203 i = jj,k,5 a(i+1) = a(i) 203 continue write(unit=6,fmt=12) a(n) c c symbolic dependence test c do 202 i = jj,k,5 a(i+1-m) = a(i-m) 202 continue write(unit=6,fmt=12) a(n) return end subroutine test2(x,w,z,a,b,c,k,kk,n,m,xx,yy,a3,b3,c3,a2,c2,s1,s2, $id,ie,ixx) dimension x(100,100),z(100,100),w(100,100) dimension a(1000),b(1000),c(1000),d(1000),e(1000) dimension xx(100), yy(100), zz(100), l(100) dimension a3(100,100,100) dimension b3(100,100,100) dimension c3(100,100,100) dimension d3(100,100,100) dimension a2(100,100),c2(100,100) dimension u1(100,100,100) dimension u2(100,100,100) dimension u3(100,100,100) dimension id(100),ie(100),ixx(100) c c loop selection c do 110 i = 1,100 do 101 j = 1,2 z(i,j) = w(i,j) + x(i,j) 101 continue 110 continue write (unit=6,fmt=100) z(n,n) c c loop selection c do 210 i = 1,100 do 220 j = 1,2 z(j,i) = w(j,i) + x(j,i) 220 continue 210 continue write (unit=6,fmt=100) z(n,n) c c loop selection - select outer loop c do 230 i = 1,100 *vocl loop, scalar do 240 j = 1,2 z(j,i) = w(j,i) + x(j,i) 240 continue 230 continue write (unit=6,fmt=100) z(n,n) c c loop selection - select outer loop c do 250 i = 1,100 *vocl loop, scalar do 260 j = 1,100 z(j,i) = w(j,i) + x(j,i) 260 continue 250 continue write (unit=6,fmt=100) z(n,n) c c loop selection c do 270 i = 1,100 *vocl loop, scalar do 280 j = 1,100 do 290 k = 1,100 u3(k,j,i) = u2(k,j,i) + u1(k,j,i) 290 continue 280 continue 270 continue write (unit=6,fmt=100) u3(n,n,n) c c dependence testing - vectorizable c do 400 i = 2,100,2 a(i) = a(i-1) 400 continue write (unit=6,fmt=100) a(n) c c symbolics - not vectorizable c do 500 i = n1,n2,n3 a(i) = a(i) + b(i) 500 continue write (unit=6,fmt=100) a(n) c c symbolics c do 510 i = 1,100,1 a(i+kk) = a(i) + b(i) 510 continue write (unit=6,fmt=100) a(n) c c symbolics c do 520 i = 1,100,1 do 520 j = 1,100,1 x(i+kk,j+kk) = x(i+kk,j+kk) + 10. 520 continue write (unit=6,fmt=100) x(n,n) c c symbolics c do 530 i = 1,100,1 do 530 j = 1,100,1 x(i+kk,j+kk) = x(i,j+kk) + 10. 530 continue write (unit=6,fmt=100) x(n,n) c c loop distribution and fusion c do 120 i = 1,100 do 90 j = 1,100 do 80 k = 1,100 c3(i,j,k) = a3(i,j,k) b3(i,j,k) = a3(i,j,k) d3(i,j,k) = b3(i,j,k) 80 continue 90 continue 120 continue write (unit=6,fmt=100) d3(n,n,n) c c do loop double expansion - should not occur c do 600 i = 1,100,1 a(i) = b(i) 600 continue write (unit=6,fmt=100) a(n) c c do loop double expansion - ? c do 610 i = 1,1000,1 a(i+2) = a(i) + b(i) 610 continue write (unit=6,fmt=100) a(n) c c loop reversal c do 700 i = 999,1,-1 a(i+1) = a(i) 700 continue write (unit=6,fmt=100) a(n) 100 format (e12.6) c c loop selection c do 800 i = 1,1000,1 do 800 j = 1,1000,1 z(i,j) = z(i+1,j-1) 800 continue write (unit=6,fmt=100) z(n,n) c c loop selection c do 810 i = 1,100,1 do 810 j = 1,100,1 do 810 k = 1,100,1 u3(i,j,k) = u3(i+1,j-1,k) 810 continue write (unit=6,fmt=100) u3(n,n,n) c c loop selection c run each statement separately c do 820 i = 1,100,1 do 820 j = 1,100,1 z(i,j) = x(i-1,j+1) x(i,j) = 0 820 continue write (unit=6,fmt=100) z(n,n) c c loop selection c run statements together c do 830 i = 1,100,1 do 830 j = 1,100,1 z(i,j) = w(i-1,j+1) x(i,j) = 0 830 continue write (unit=6,fmt=100) z(n,n) c c loop selection c do 840 i = 1,100,1 do 840 j = 1,100,1 do 840 k = 1,100,1 u3(i,j,k+1) = u3(i,j,k) 840 continue write (unit=6,fmt=100) u3(n,n,n) c c loop selection c do 850 i = 1,100,1 do 850 j = 1,100,1 x(i,j) = x(i,j) + z(i,j) x(i+1,j+1) = z(i+1,j) * x(i,j) 850 continue write (unit=6,fmt=100) x(n,n) c c scalar expansion c do 900 i = 1,100,1 abc = b(i) * c(i) d(i) = abc * abc 900 continue write (unit=6,fmt=100) d(n) c c scalar expansion c do 910 i = 1,n abc = a(i) b(k) = abc + 1. / abc d(i) = b(k) + 1. / b(k) 910 continue write (unit=6,fmt=100) d(n) c c scalar expansion c do 915 i = 1,n a(i) = b(i) * c(i) * s1 abc = (a(i) + b(i)) * s2 d(i) = (abc - 1.) * c(i) 915 continue write (unit=6,fmt=100) d(n) c c scalar expansion or sum reduction c do 916 i = 1,n do 916 j = 1,m abc = 0 do 917 k = 1,m 917 abc = abc + w(i,k) * x(k,j) 916 z(i,j) = abc write (unit=6,fmt=100) z(n,n) c c indirect addressing c do 1000 i = 1,m a(id(i)) = b(ie(i)) - c(ixx(i)) 1000 continue write (unit=6,fmt=100) a(n) c c loop collapse ? c do 1100 i = 1,m do 1100 j = 1,n x(j,i) = w(j,i) * z(j,i) 1100 continue write (unit=6,fmt=100) x(n,n) c c seq function c do 1200 i = 1,m a(i) = b(i) + c(i/2) 1200 continue write (unit=6,fmt=100) a(n) c c seq function c do 1250 i = 1,m a(i) = b(i) + c(i) + i 1250 continue c c summation c s = 0. do 920 i = 1,n s = s + a(i) 920 continue write (unit=6,fmt=100) s c c dot product c s = 0. do 930 i = 1,n s = s + a(i) * b(i) 930 continue write (unit=6,fmt=100) s c c product c s = 0. do 940 i = 1,n s = s * a(i) 940 continue write (unit=6,fmt=100) s c c maxval c s = a(1) do 950 i = 2,n if (a(i) .gt. s) s = a(i) 950 continue write (unit=6,fmt=100) s c c minval c s = a(1) do 960 i = 2,n if (a(i) .lt. s) s = a(i) 960 continue write (unit=6,fmt=100) s write (unit=6,fmt=100) a(n) return end subroutine test3(z,a,c,n) dimension x(100,100),z(100,100),a(100),b(100),c(100),d(100),e(100) dimension y(100,100),w(100,100) dimension xxx(100,100),yyy(100,100) dimension xx(100), yy(100), zz(100), l(100),cc(100) common /com1/cc1(100,100),cc2(100,100),cc3(100,100),ii1,jj1 common /com2/aa(200),bb(200),dd(200) equivalence (x(1,1),y(1,1)) equivalence (xxx(1,1),yyy(1,1)) equivalence (xx(1),yy(1)) equivalence (aa(50),cc(1)) c c common variables c do 110 ii1 = 1,100 do 105 jj1 = 1,100 cc1(ii1,jj1) = cc2(ii1,jj1) + z(ii1,jj1) 105 continue 110 continue write(unit=6,fmt=100) cc1(n,n) c c common and equivalenced variables - overlap c do 115 ii1 = 1,100 cc(ii1+1) = aa(ii1) 115 continue write(unit=6,fmt=100) cc(n) c c common and equivalenced variables - no overlap c do 116 ii1 = 1,100 aa(ii1+1) = cc(ii1) 116 continue write(unit=6,fmt=100) aa(n) c c common and equivalenced variables - overlap c do 117 ii1 = 1,100 cc(ii1+50) = aa(ii1+1) 117 continue write(unit=6,fmt=100) cc(n) c c common and equivalenced variables - no overlap c do 118 ii1 = 1,100 cc(ii1+50) = aa(ii1-1) 118 continue write(unit=6,fmt=100) cc(n) c c equivalence- no overlap c do 205 i = 1,100 xx(i) = yy(i+1) 205 continue write(unit=6,fmt=100) xx(n) c c equivalence- overlap c do 208 i = 1,100 xx(i+1) = yy(i) 208 continue write(unit=6,fmt=100) xx(n) c c equivalence- no overlap c do 210 i = 1,100 do 220 j = 1,100 x(j,i) = x(j,i) + y(j,i) 220 continue 210 continue write(unit=6,fmt=100) x(n,n) c c equivalence- no overlap c do 230 i = 1,100 do 240 j = 1,100 x(j,i) = y(j+1,i) 240 continue 230 continue write(unit=6,fmt=100) x(n,n) c c equivalence- overlap c do 310 i = 1,100 do 320 j = 1,100 x(j+1,i) = y(j,i) + z(j,i) 320 continue 310 continue write(unit=6,fmt=100) x(n,n) c c equivalence- vectorizable c do 410 i = 1,100 do 420 j = 1,100 x(j+4,i+4) = y(j,i) 420 continue 410 continue write(unit=6,fmt=100) x(n,n) c c call statement c do 510 i = 1,100 do 520 j = 1,100 x(j,i) = z(j,i) call sub2 z(j,i) = w(j,i) 520 continue 510 continue write(unit=6,fmt=100) z(n,n) c c call statement c do 610 i = 1,100 a(i) = b(i) call sub2 c(i) = d(i) 610 continue write(unit=6,fmt=100) c(n) c c call statement - refers to common variables in loop c do 620 i = 1,100 aa(i) = bb(i) call sub2 dd(i) = d(i) 620 continue write(unit=6,fmt=100) aa(n) write(unit=6,fmt=100) dd(n) c c write statement c do 640 i = 1,100 call sub2 b(i) = d(i) c(i) = a(i) write(unit=6,fmt=100) c(i) 640 continue write(unit=6,fmt=100) b(n) 100 format(e12.6) return end subroutine test4(a,b,x,n) dimension a(100),b(100),x(100),y(100),bb(100,100) c c if01 -- tests for recognition of loop independent dependences c between statements in mutually exclusive regions. c do 30 i = 1,100 if (b(i).lt.0) go to 10 a(i) = x(i) go to 30 10 x(i+1) = a(i) 30 continue write(unit=6,fmt=11) a(n),b(n),x(n) c c if02 -- test for false dependences arising from guard c variable computation. c do 130 i = 1,100 if (a(i).ge.0) go to 120 if (b(i).ge.0) go to 110 a(i) = x(i) 110 continue b(i+1) = y(i) 120 continue 130 continue write(unit=6,fmt=11) a(n),b(n),x(n) c c if03--test for exit branch handling c do 230 i = 1,100 if (a(i).ge.0) go to 220 a(i) = x(i) b(i+1) = y(i) 230 continue 220 continue write(unit=6,fmt=11) a(n),b(n),x(n) c c if04 -- checks for if copying c do 430 i = 1,100 if (b(k).ge.0) go to 420 a(i) = x(i) 420 continue 430 continue write(unit=6,fmt=11) a(n),b(n),x(n) c c if05--test for backward branch handling c do 530 i = 1,100 520 continue a(i) = x(i) if (x(i).ge.0) go to 520 b(i) = y(i) 530 continue write(unit=6,fmt=11) a(n),b(n),x(n) c c if06--test run c illustrates forward branch removal c do 600 i = 1, 100 if (a(i).gt.10) go to 660 a(i) = a(i) + 10 if(b(i).gt.10) go to 680 b(i) = b(i) + 10 660 a(i) = b(i) + a(i) 680 b(i) = a(i) - 5 600 continue write(6,fmt=12) a(n),b(n) c c if07--test run if statements in outer do loops c do 700 i = 1, 100 if (a(i).gt.10) go to 760 a(i) = a(i) + 10 do 720 j = 1, 100 if(bb(i,j).gt.10) go to 780 bb(i,j) = bb(i,j) + 10 780 continue 720 continue 760 continue 700 continue write(6,fmt=12) a(n),bb(n,n) c c if08--test run if statements in outer do loops c do 800 i = 1, 100 if (a(i).gt.10) go to 860 a(i) = a(i) + 10 do 820 j = 1, 100 bb(i,j) = bb(i,j) + 10 820 continue 860 continue 800 continue write(6,fmt=12) a(n),bb(n,n) c c if09--if loop to do loop c i = 2 910 a(i) = b(i) i = i + 1 if (a(i).lt.m) go to 910 write(6,fmt=12) a(n),b(n) 11 format(3e12.6) 12 format(2e12.6) return end subroutine test5(a,b,c,d,e,f,g,h,aa,n) dimension a(1000),b(1000),c(1000),d(1000),e(1000),f(1000) dimension g(1000),h(1000),aa(1000) c c 1 stop statement c do 110 i = 1,100 if (a(i) .lt. 0.) stop 'stop 1' b(i) = c(i) 110 continue write (unit=6,fmt=100) b(n) c c 2 stop statements c do 120 i = 1,100 if (a(i) .lt. 0.) stop 'stop 1' b(i) = c(i) if (d(i) .lt. 0.) stop 'stop 2' e(i) = f(i) 120 continue write (unit=6,fmt=100) b(n) write (unit=6,fmt=100) e(n) c c 3 stop statements c do 130 i = 1,100 if (a(i) .lt. 0.) stop 'stop 1' b(i) = c(i) if (d(i) .lt. 0.) stop 'stop 2' e(i) = f(i) if (g(i) .lt. 0.) stop 'stop 3' h(i) = aa(i) 130 continue write (unit=6,fmt=100) b(n) write (unit=6,fmt=100) e(n) write (unit=6,fmt=100) h(n) 100 format(e12.6) return end .