finalyze moving

This commit is contained in:
2025-03-12 14:28:04 +03:00
parent f840006398
commit 033bbce220
774 changed files with 0 additions and 0 deletions

View 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

View 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

View 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

View 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

View 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