finalyze moving
This commit is contained in:
39
tests/sapfor/loops_combiner/test_1.for
Normal file
39
tests/sapfor/loops_combiner/test_1.for
Normal file
@@ -0,0 +1,39 @@
|
||||
program loops_combiner_test
|
||||
implicit none
|
||||
parameter (l = 16,m = 6)
|
||||
real :: a(l),b(l),c(l)
|
||||
|
||||
do it1 = 1,m
|
||||
do k1 = 1,l
|
||||
do p1 = 1, l + m
|
||||
a(k1) = it1 + k1 + p1
|
||||
enddo
|
||||
enddo
|
||||
do k1_2 = 1,l
|
||||
do p1_2 = 1, l + m
|
||||
b(k1_2) = it1 + k1_2 - p1_2
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do it2 = 1,m
|
||||
do k2 = 1,l
|
||||
c(k2) = k2 - it2
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do it3 = 1,m
|
||||
do k3 = 1,l
|
||||
do p3 = 1, l + m
|
||||
a(k3) = it3 + k3 * p3
|
||||
enddo
|
||||
enddo
|
||||
do k3_2 = 1,l
|
||||
do p3_2 = 1, l + m
|
||||
b(k3_2) = it3 + k3_2 / p3_2
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
29
tests/sapfor/loops_combiner/test_2.for
Normal file
29
tests/sapfor/loops_combiner/test_2.for
Normal file
@@ -0,0 +1,29 @@
|
||||
program loops_combiner_test
|
||||
implicit none
|
||||
parameter (l = 16,m = 6)
|
||||
real :: a(l),b(l),c(l)
|
||||
|
||||
! should be combined:
|
||||
do it1 = 1,m
|
||||
do k1 = 1,l
|
||||
a(k1) = it1 + k1
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do it2 = 1,m
|
||||
c(it2) = it2
|
||||
enddo
|
||||
|
||||
! should be combined:
|
||||
do it3 = 1,l
|
||||
c(it3) = it3
|
||||
enddo
|
||||
|
||||
do it4 = 1,l
|
||||
do k4 = 1,m
|
||||
a(k4) = it4 + k4
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
31
tests/sapfor/loops_combiner/test_3.for
Normal file
31
tests/sapfor/loops_combiner/test_3.for
Normal file
@@ -0,0 +1,31 @@
|
||||
program loops_combiner_test
|
||||
implicit none
|
||||
parameter (l = 16,m = 6)
|
||||
real :: a(l),b(l),c(l)
|
||||
|
||||
! shouldn't be combined because of print:
|
||||
do it1 = 1,l
|
||||
a(it1) = it1
|
||||
print *, 'test print'
|
||||
enddo
|
||||
|
||||
do it2 = 1,l
|
||||
b(it2) = it2
|
||||
enddo
|
||||
|
||||
! shouldn't be combined because of goto:
|
||||
do it3 = 1,l - 1
|
||||
c(it3) = it3
|
||||
enddo
|
||||
|
||||
do it4 = 1,l - 1
|
||||
do k4 = 1,l
|
||||
a(k4) = k4 + it4
|
||||
go to 100
|
||||
enddo
|
||||
enddo
|
||||
|
||||
100 a(0) = 0
|
||||
|
||||
end
|
||||
|
||||
40
tests/sapfor/loops_combiner/test_4.for
Normal file
40
tests/sapfor/loops_combiner/test_4.for
Normal file
@@ -0,0 +1,40 @@
|
||||
program loops_combiner_test
|
||||
implicit none
|
||||
parameter (l = 16,m = 6)
|
||||
real :: a(l),b(l),c(l)
|
||||
|
||||
|
||||
! should be combined by it1-it2 dimension only:
|
||||
do it1 = 1,m
|
||||
do k1 = 1,l
|
||||
a(k1) = it1 + k1
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do it2 = 1,m
|
||||
do k2 = 1,l - 1
|
||||
a(k2) = it2 * k2
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! should be combined by it1-it2, k1-k2 dimensions only:
|
||||
do it1 = 1,m - 1
|
||||
do k1 = 1,l
|
||||
do p1 = 1,l,2
|
||||
do j1 = 1, l
|
||||
a(k1) = j1 * p1 - it1
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do it2 = 1,m - 1
|
||||
do k2 = 1,l
|
||||
do p2 = 1,l
|
||||
a(k2) = it2 + k2 * p2
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
88
tests/sapfor/loops_combiner/test_5.for
Normal file
88
tests/sapfor/loops_combiner/test_5.for
Normal file
@@ -0,0 +1,88 @@
|
||||
program loops_combiner_test
|
||||
implicit none
|
||||
|
||||
integer :: t1, t2
|
||||
integer :: i, j, i1, j1, k
|
||||
real :: mas(10, 20)
|
||||
|
||||
|
||||
! должны быть объединены с разворотом первого гнезда:
|
||||
do i = 1, 10
|
||||
do j = 1, 20, 1
|
||||
mas(i, j) = i + j
|
||||
enddo
|
||||
enddo
|
||||
do i = 10, 1, -1
|
||||
do j = 20, 1, -1
|
||||
mas(i, j) = mas(i, j) + i * j
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! для разделения циклов:
|
||||
k = 0
|
||||
|
||||
! переменная i1 должна быть инициализирована перед объединённым циклом
|
||||
! переменная j1 - после, т.к. используется в первом цикле:
|
||||
do i = 1, 10
|
||||
do j = 1, 20
|
||||
j1 = i + j
|
||||
mas(i, j) = j1
|
||||
enddo
|
||||
enddo
|
||||
do i1 = 1, 10
|
||||
do j1 = 1, 20
|
||||
mas(i1, j1) = mas(i1, j1) + i1 * j1
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! для разделения циклов:
|
||||
k = 0
|
||||
|
||||
! переменная i во втором цикле наследует значение от первого,
|
||||
! должны быть заменена на соответствующее выражение:
|
||||
do i = 1, 10
|
||||
do j = 1, 20
|
||||
mas(i, j) = i + j
|
||||
enddo
|
||||
enddo
|
||||
do i1 = 1, 10
|
||||
do j1 = 1, 20
|
||||
mas(i1, j1) = mas(i1, j1) + i1 * j1 - i
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! для разделения циклов:
|
||||
k = 0
|
||||
|
||||
! переменная i во втором цикле наследует значение от первого,
|
||||
! должны быть переименована и проинициализирована:
|
||||
do i = 1, 10
|
||||
do j = 1, 20
|
||||
mas(i, j) = i + j
|
||||
enddo
|
||||
enddo
|
||||
do i1 = 1, 10
|
||||
do j1 = 1, 20
|
||||
k = k + i
|
||||
i = j1 / i1
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! для разделения циклов:
|
||||
k = 0
|
||||
|
||||
! циклы нельзя объединить из-за неприватной для обоих переменной t2:
|
||||
t2 = 0
|
||||
do i = 1, 10
|
||||
do j = 1, 20, 1
|
||||
t2 = t2 + i * j
|
||||
enddo
|
||||
enddo
|
||||
do i = 1, 10
|
||||
do j = 1, 20
|
||||
t1 = i + j - t2
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user