1! Exercise the auto, independent, seq and tile loop clauses inside
2! kernels regions.
3
4! { dg-do run }
5
6program loops
7  integer, parameter     :: n = 20
8  integer                :: i, a(n), b(n)
9
10  a(:) = 0
11  b(:) = 0
12
13  ! COPY
14
15  !$acc kernels copy (a)
16  !$acc loop auto
17  do i = 1, n
18     a(i) = i
19  end do
20  !$acc end kernels
21
22  do i = 1, n
23     b(i) = i
24  end do
25
26  call check (a, b, n)
27
28  ! COPYOUT
29
30  a(:) = 0
31
32  !$acc kernels copyout (a)
33  !$acc loop independent
34  do i = 1, n
35     a(i) = i
36  end do
37  !$acc end kernels
38
39  do i = 1, n
40     if (a(i) .ne. b(i)) stop 1
41  end do
42  call check (a, b, n)
43
44  ! COPYIN
45
46  a(:) = 0
47
48  !$acc kernels copyout (a) copyin (b)
49  !$acc loop seq
50  do i = 1, n
51     a(i) = b(i)
52  end do
53  !$acc end kernels
54
55  call check (a, b, n)
56
57end program loops
58
59subroutine check (a, b, n)
60  integer :: n, a(n), b(n)
61  integer :: i
62
63  do i = 1, n
64     if (a(i) .ne. b(i)) stop 2
65  end do
66end subroutine check
67