finalyze moving
This commit is contained in:
50
tests/sapfor/private_removing/test.f
Normal file
50
tests/sapfor/private_removing/test.f
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
program test
|
||||
double precision :: y(10, 10), x(10, 10), a
|
||||
integer :: n, m
|
||||
|
||||
n=10
|
||||
m=15
|
||||
! y can be removed
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(1, j) = j * i
|
||||
y(2, j) = j / i
|
||||
enddo
|
||||
do jj = 1, m
|
||||
x(1, jj) = y(1, jj)
|
||||
x(2, jj) = y(2, jj)
|
||||
! correct result:
|
||||
! x(1, jj) = jj * i
|
||||
! x(2, jj) = jj / i
|
||||
enddo
|
||||
|
||||
do j = 1, m
|
||||
y(2, j) = j * 100
|
||||
y(3, j) = j / 200
|
||||
enddo
|
||||
do jj = 2, m - 1
|
||||
x(1, jj) = y(2, jj - 1)
|
||||
x(2, jj) = y(3, jj + 1)
|
||||
! correct result:
|
||||
! x(1, jj) = (jj - 1) * 100
|
||||
! x(2, jj) = (jj + 1) / 200
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! y can be removed
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(j, i) = j * i
|
||||
enddo
|
||||
do jj = 1, m
|
||||
x(jj, i) = y(jj, i)
|
||||
! correct result:
|
||||
! x(jj, i) = jj * i
|
||||
enddo
|
||||
enddo
|
||||
|
||||
|
||||
end
|
||||
75
tests/sapfor/private_removing/test_cannot_remove.f
Normal file
75
tests/sapfor/private_removing/test_cannot_remove.f
Normal file
@@ -0,0 +1,75 @@
|
||||
|
||||
program test_cannot_remove
|
||||
double precision :: y(10, 10), x(10, 10), a
|
||||
integer :: n, m
|
||||
|
||||
n=10
|
||||
m=15
|
||||
! y cannot be removed - it is uninitialized
|
||||
! (cannot find reaching definition)
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
y(1, i) = 100
|
||||
x(i, i) = y(2, i)
|
||||
enddo
|
||||
|
||||
! y cannot be removed - more than one reaching definition
|
||||
! reaches the statement
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
if (i .eq. 1) then
|
||||
y(1, i) = 100
|
||||
else
|
||||
y(1, i) = 200
|
||||
endif
|
||||
|
||||
x(i, i) = y(1, i)
|
||||
enddo
|
||||
|
||||
! y cannot be removed - y doesn't match any fixed dimensions mask
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(1, i) = j * i
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(j, i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! y cannot be removed - y doesn't match any fixed dimensions mask
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(1, i - 1) = j * i
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(1, i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
|
||||
! y cannot be removed - y doesn't match any fixed dimensions mask
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(i, 1) = j * i
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(1, i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! y cannot be removed - y depends on non-invariant var 'a'
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
a = 2 * i
|
||||
y(j, i) = j * i + a
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(j, i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
45
tests/sapfor/private_removing/test_cascade.f
Normal file
45
tests/sapfor/private_removing/test_cascade.f
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
program test_cascade
|
||||
double precision :: y(10, 10), x(10, 10)
|
||||
integer :: n, m
|
||||
|
||||
n=10
|
||||
m=15
|
||||
! y can be removed in 3 steps:
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
do j = 1, m
|
||||
y(1, j) = 2
|
||||
enddo
|
||||
do j = 1, m
|
||||
y(1, j) = y(1, j) * 10
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(1, j)
|
||||
! correct result:
|
||||
! x(j, i) = 2 * 10
|
||||
enddo
|
||||
|
||||
do j = 1, m
|
||||
y(2, j) = y(1, i) * 20
|
||||
enddo
|
||||
do j = 1, m
|
||||
x(j, i) = y(2, j)
|
||||
! correct result:
|
||||
! x(j, i) = 2 * 10 * 20
|
||||
enddo
|
||||
enddo
|
||||
|
||||
! y can be removed is 2 steps:
|
||||
!$SPF ANALYSIS(PRIVATE(y))
|
||||
do i = 1, n
|
||||
y(1, i) = 2
|
||||
do j = 1, m
|
||||
y(1, i) = y(1, i) * 10
|
||||
x(j, i) = y(1, i)
|
||||
! correct result:
|
||||
! x(j, i) = 2 * 10
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user