xref: /llvm-project/flang/test/Semantics/OpenACC/acc-kernels.f90 (revision a6c02edd6eac476523b5c73f29619a7a9e054872)
1! RUN: %python %S/../test_errors.py %s %flang -fopenacc
2
3! Check OpenACC clause validity for the following construct and directive:
4!   2.5.3 Kernels
5
6program openacc_kernels_validity
7
8  implicit none
9
10  type atype
11    real(8), dimension(10) :: arr
12    real(8) :: s
13  end type atype
14
15  integer :: i, j, b, gang_size, vector_size, worker_size
16  integer, parameter :: N = 256
17  integer, dimension(N) :: c
18  logical, dimension(N) :: d, e
19  integer :: async1
20  integer :: wait1, wait2
21  real :: reduction_r
22  logical :: reduction_l
23  real(8), dimension(N, N) :: aa, bb, cc
24  real(8), dimension(:), allocatable :: dd
25  real(8), pointer :: p
26  logical :: ifCondition = .TRUE.
27  type(atype) :: t
28  type(atype), dimension(10) :: ta
29  real(8), dimension(N) :: a, f, g, h
30
31  !$acc kernels async
32  !$acc end kernels
33
34  !$acc kernels async(1)
35  !$acc end kernels
36
37  !$acc kernels async(async1)
38  !$acc end kernels
39
40  !$acc kernels wait(wait1)
41  !$acc end kernels
42
43  !$acc kernels wait(wait1, wait2)
44  !$acc end kernels
45
46  !$acc kernels wait(1, 2) async(3)
47  !$acc end kernels
48
49  !$acc kernels wait(queues: 1, 2) async(3)
50  !$acc end kernels
51
52  !$acc kernels wait(1) wait(2) async(3)
53  !$acc end kernels
54
55  !$acc kernels wait(devnum: 1: 1, 2) async(3)
56  !$acc end kernels
57
58  !$acc kernels wait(devnum: 1: queues: 1, 2) async(3)
59  !$acc end kernels
60
61  !$acc kernels num_gangs(8)
62  !$acc end kernels
63
64  !$acc kernels num_workers(8)
65  !$acc end kernels
66
67  !$acc kernels vector_length(128)
68  !$acc end kernels
69
70  !$acc kernels if(.true.)
71  !$acc end kernels
72
73  !$acc kernels if(ifCondition)
74  !$acc end kernels
75
76  !ERROR: At most one IF clause can appear on the KERNELS directive
77  !$acc kernels if(.true.) if(ifCondition)
78  !$acc end kernels
79
80  !$acc kernels self
81  !$acc end kernels
82
83  !$acc kernels self(.true.)
84  !$acc end kernels
85
86  !$acc kernels self(ifCondition)
87  !$acc end kernels
88
89  !$acc kernels copy(aa) copyin(bb) copyout(cc)
90  !$acc end kernels
91
92  !$acc kernels copy(aa, bb) copyout(zero: cc)
93  !$acc end kernels
94
95  !$acc kernels present(aa, bb) create(cc)
96  !$acc end kernels
97
98  !$acc kernels copyin(readonly: aa, bb) create(zero: cc)
99  !$acc end kernels
100
101  !$acc kernels deviceptr(aa, bb) no_create(cc)
102  !$acc end kernels
103
104  !ERROR: Argument `aa` on the ATTACH clause must be a variable or array with the POINTER or ALLOCATABLE attribute
105  !$acc kernels attach(dd, p, aa)
106  !$acc end kernels
107
108  !ERROR: PRIVATE clause is not allowed on the KERNELS directive
109  !$acc kernels private(aa, bb, cc)
110  !$acc end kernels
111
112  !$acc kernels default(none)
113  !$acc end kernels
114
115  !$acc kernels default(present)
116  !$acc end kernels
117
118  !ERROR: At most one DEFAULT clause can appear on the KERNELS directive
119  !$acc kernels default(none) default(present)
120  !$acc end kernels
121
122  !$acc kernels device_type(*)
123  !$acc end kernels
124
125  !$acc kernels device_type(default)
126  !$acc end kernels
127
128  !$acc kernels device_type(default, host)
129  !$acc end kernels
130
131  !$acc kernels device_type(*) async wait num_gangs(8) num_workers(8) vector_length(128)
132  !$acc end kernels
133
134  !$acc kernels device_type(*) async
135  do i = 1, N
136    a(i) = 3.14
137  end do
138  !$acc end kernels
139
140  !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS directive
141  !$acc kernels device_type(*) if(.TRUE.)
142  do i = 1, N
143    a(i) = 3.14
144  end do
145  !$acc end kernels
146
147  do i = 1, 100
148    !$acc kernels
149    !ERROR: CYCLE to construct outside of KERNELS construct is not allowed
150    if (i == 10) cycle
151    !$acc end kernels
152  end do
153
154  !$acc kernels
155  do i = 1, 100
156    if (i == 10) cycle
157  end do
158  !$acc end kernels
159
160end program openacc_kernels_validity
161