1! Exercise the auto, independent, seq and tile loop clauses inside
2! parallel regions.
3
4! { dg-do run }
5
6program loops
7  integer, parameter     :: n = 20, c = 10
8  integer                :: i, a(n), b(n)
9
10  a(:) = 0
11  b(:) = 0
12
13  ! COPY
14
15  !$acc parallel copy (a)
16  !$acc loop auto
17  do i = 1, n
18     a(i) = i
19  end do
20  !$acc end parallel
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 parallel copyout (a)
33  !$acc loop independent
34  do i = 1, n
35     a(i) = i
36  end do
37  !$acc end parallel
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 parallel copyout (a) copyin (b)
49  !$acc loop seq
50  do i = 1, n
51     a(i) = i
52  end do
53  !$acc end parallel
54
55  call check (a, b, n)
56
57  ! PRESENT_OR_COPY
58
59  !$acc parallel pcopy (a)
60  !$acc loop tile (*)
61  do i = 1, n
62     a(i) = i
63  end do
64  !$acc end parallel
65
66  call check (a, b, n)
67
68end program loops
69
70subroutine check (a, b, n)
71  integer :: n, a(n), b(n)
72  integer :: i
73
74  do i = 1, n
75     if (a(i) .ne. b(i)) stop 2
76  end do
77end subroutine check
78