177 lines
4.2 KiB
Fortran
177 lines
4.2 KiB
Fortran
! See also loop-1-2.f95.
|
|
|
|
module test
|
|
implicit none
|
|
contains
|
|
|
|
subroutine test1
|
|
integer :: i, j, k, b(10)
|
|
integer, dimension (30) :: a
|
|
double precision :: d
|
|
real :: r
|
|
i = 0
|
|
!$acc loop
|
|
do 100 ! { dg-error "cannot be a DO WHILE or DO without loop control" }
|
|
if (i .gt. 0) exit ! { dg-error "EXIT statement" }
|
|
100 i = i + 1
|
|
i = 0
|
|
!$acc loop
|
|
do ! { dg-error "cannot be a DO WHILE or DO without loop control" }
|
|
if (i .gt. 0) exit ! { dg-error "EXIT statement" }
|
|
i = i + 1
|
|
end do
|
|
i = 0
|
|
!$acc loop
|
|
do 200 while (i .lt. 4) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
|
|
200 i = i + 1
|
|
!$acc loop
|
|
do while (i .lt. 8) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
|
|
i = i + 1
|
|
end do
|
|
!$acc loop
|
|
do 300 d = 1, 30, 6
|
|
i = d
|
|
300 a(i) = 1
|
|
! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 }
|
|
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 }
|
|
!$acc loop
|
|
do d = 1, 30, 5
|
|
i = d
|
|
a(i) = 2
|
|
end do
|
|
! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 }
|
|
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
|
|
!$acc loop
|
|
do i = 1, 30
|
|
if (i .eq. 16) exit ! { dg-error "EXIT statement" }
|
|
end do
|
|
!$acc loop
|
|
outer: do i = 1, 30
|
|
do j = 5, 10
|
|
if (i .eq. 6 .and. j .eq. 7) exit outer ! { dg-error "EXIT statement" }
|
|
end do
|
|
end do outer
|
|
last: do i = 1, 30
|
|
end do last
|
|
|
|
! different types of loop are allowed
|
|
!$acc loop
|
|
do i = 1,10
|
|
end do
|
|
!$acc loop
|
|
do 400, i = 1,10
|
|
400 a(i) = i
|
|
|
|
! after loop directive must be loop
|
|
!$acc loop
|
|
a(1) = 1 ! { dg-error "Expected DO loop" }
|
|
do i = 1,10
|
|
enddo
|
|
|
|
! combined directives may be used with/without end
|
|
!$acc parallel loop
|
|
do i = 1,10
|
|
enddo
|
|
!$acc parallel loop
|
|
do i = 1,10
|
|
enddo
|
|
!$acc end parallel loop
|
|
!$acc kernels loop
|
|
do i = 1,10
|
|
enddo
|
|
!$acc kernels loop
|
|
do i = 1,10
|
|
enddo
|
|
!$acc end kernels loop
|
|
|
|
!$acc kernels loop reduction(max:i)
|
|
do i = 1,10
|
|
enddo
|
|
!$acc kernels
|
|
!$acc loop reduction(max:i)
|
|
do i = 1,10
|
|
enddo
|
|
!$acc end kernels
|
|
|
|
!$acc parallel loop collapse(0) ! { dg-error "constant positive integer" }
|
|
do i = 1,10
|
|
enddo
|
|
|
|
!$acc parallel loop collapse(-1) ! { dg-error "constant positive integer" }
|
|
do i = 1,10
|
|
enddo
|
|
|
|
!$acc parallel loop collapse(i) ! { dg-error "Constant expression required" }
|
|
do i = 1,10
|
|
enddo
|
|
|
|
!$acc parallel loop collapse(4) ! { dg-error "not enough DO loops for collapsed" }
|
|
do i = 1, 3
|
|
do j = 4, 6
|
|
do k = 5, 7
|
|
a(i+j-k) = i + j + k
|
|
end do
|
|
end do
|
|
end do
|
|
!$acc parallel loop collapse(2)
|
|
do i = 1, 5, 2
|
|
do j = i + 1, 7, i ! { dg-error "collapsed loops don.t form rectangular iteration space" }
|
|
end do
|
|
end do
|
|
!$acc parallel loop collapse(2)
|
|
do i = 1, 3
|
|
do j = 4, 6
|
|
end do
|
|
end do
|
|
!$acc parallel loop collapse(2)
|
|
do i = 1, 3
|
|
do j = 4, 6
|
|
end do
|
|
k = 4
|
|
end do
|
|
!$acc parallel loop collapse(3-1)
|
|
do i = 1, 3
|
|
do j = 4, 6
|
|
end do
|
|
k = 4
|
|
end do
|
|
!$acc parallel loop collapse(1+1)
|
|
do i = 1, 3
|
|
do j = 4, 6
|
|
end do
|
|
k = 4
|
|
end do
|
|
!$acc parallel loop collapse(2)
|
|
do i = 1, 3
|
|
do ! { dg-error "cannot be a DO WHILE or DO without loop control" }
|
|
end do
|
|
end do
|
|
!$acc parallel loop collapse(2)
|
|
do i = 1, 3
|
|
do r = 4, 6
|
|
end do
|
|
! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 }
|
|
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 }
|
|
end do
|
|
|
|
! Both seq and independent are not allowed
|
|
!$acc loop independent seq ! { dg-error "SEQ conflicts with INDEPENDENT" }
|
|
do i = 1,10
|
|
enddo
|
|
|
|
|
|
!$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" }
|
|
|
|
do i = 1,10
|
|
!$acc cache(a(i:i+1))
|
|
enddo
|
|
|
|
do i = 1,10
|
|
!$acc cache(a(i:i+1))
|
|
a(i) = i
|
|
!$acc cache(a(i+2:i+2+1))
|
|
enddo
|
|
|
|
end subroutine test1
|
|
end module test
|