xref: /llvm-project/llvm/unittests/Frontend/OpenACCTest.cpp (revision 828883281b92d297f245918e1085ea7f948e3141)
1cc8df90bSValentin Clement //===- llvm/unittest/Frontend/OpenACCTest.cpp - OpenACC Frontend tests ----===//
2cc8df90bSValentin Clement //
3cc8df90bSValentin Clement // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cc8df90bSValentin Clement // See https://llvm.org/LICENSE.txt for license information.
5cc8df90bSValentin Clement // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cc8df90bSValentin Clement //
7cc8df90bSValentin Clement //===----------------------------------------------------------------------===//
8cc8df90bSValentin Clement 
9cc8df90bSValentin Clement #include "llvm/ADT/ArrayRef.h"
10cc8df90bSValentin Clement #include "llvm/ADT/SmallSet.h"
11cc8df90bSValentin Clement #include "llvm/ADT/SmallVector.h"
12cc8df90bSValentin Clement #include "llvm/Frontend/OpenACC/ACC.h.inc"
13cc8df90bSValentin Clement #include "gtest/gtest.h"
14cc8df90bSValentin Clement 
15cc8df90bSValentin Clement using namespace llvm;
16cc8df90bSValentin Clement using namespace acc;
17cc8df90bSValentin Clement 
18cc8df90bSValentin Clement namespace {
19cc8df90bSValentin Clement 
20cc8df90bSValentin Clement static const Clause AllClauses[] = {ACCC_unknown,
21cc8df90bSValentin Clement                                     ACCC_async,
22cc8df90bSValentin Clement                                     ACCC_attach,
23cc8df90bSValentin Clement                                     ACCC_auto,
24cc8df90bSValentin Clement                                     ACCC_bind,
25cc8df90bSValentin Clement                                     ACCC_capture,
26cc8df90bSValentin Clement                                     ACCC_collapse,
27cc8df90bSValentin Clement                                     ACCC_copy,
28cc8df90bSValentin Clement                                     ACCC_copyin,
29cc8df90bSValentin Clement                                     ACCC_copyout,
30cc8df90bSValentin Clement                                     ACCC_create,
31cc8df90bSValentin Clement                                     ACCC_default,
32cc8df90bSValentin Clement                                     ACCC_default_async,
33cc8df90bSValentin Clement                                     ACCC_delete,
34cc8df90bSValentin Clement                                     ACCC_detach,
35cc8df90bSValentin Clement                                     ACCC_device,
36cc8df90bSValentin Clement                                     ACCC_device_num,
37cc8df90bSValentin Clement                                     ACCC_deviceptr,
38cc8df90bSValentin Clement                                     ACCC_device_resident,
39cc8df90bSValentin Clement                                     ACCC_device_type,
40cc8df90bSValentin Clement                                     ACCC_finalize,
41cc8df90bSValentin Clement                                     ACCC_firstprivate,
42cc8df90bSValentin Clement                                     ACCC_gang,
43cc8df90bSValentin Clement                                     ACCC_host,
44cc8df90bSValentin Clement                                     ACCC_if,
45cc8df90bSValentin Clement                                     ACCC_if_present,
46cc8df90bSValentin Clement                                     ACCC_independent,
47cc8df90bSValentin Clement                                     ACCC_link,
48cc8df90bSValentin Clement                                     ACCC_no_create,
49cc8df90bSValentin Clement                                     ACCC_nohost,
50cc8df90bSValentin Clement                                     ACCC_num_gangs,
51cc8df90bSValentin Clement                                     ACCC_num_workers,
52cc8df90bSValentin Clement                                     ACCC_present,
53cc8df90bSValentin Clement                                     ACCC_private,
54cc8df90bSValentin Clement                                     ACCC_read,
55cc8df90bSValentin Clement                                     ACCC_reduction,
56cc8df90bSValentin Clement                                     ACCC_self,
57cc8df90bSValentin Clement                                     ACCC_seq,
58cc8df90bSValentin Clement                                     ACCC_tile,
59cc8df90bSValentin Clement                                     ACCC_unknown,
60cc8df90bSValentin Clement                                     ACCC_use_device,
61cc8df90bSValentin Clement                                     ACCC_vector,
62cc8df90bSValentin Clement                                     ACCC_vector_length,
63cc8df90bSValentin Clement                                     ACCC_wait,
64cc8df90bSValentin Clement                                     ACCC_worker,
65cc8df90bSValentin Clement                                     ACCC_write};
66cc8df90bSValentin Clement 
TEST(OpenACCTest,DirectiveHelpers)67cc8df90bSValentin Clement TEST(OpenACCTest, DirectiveHelpers) {
68cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind(""), ACCD_unknown);
69cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("dummy"), ACCD_unknown);
70cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("atomic"), ACCD_atomic);
71cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("cache"), ACCD_cache);
72cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("data"), ACCD_data);
73cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("declare"), ACCD_declare);
74cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("enter data"), ACCD_enter_data);
75cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("exit data"), ACCD_exit_data);
76cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("host_data"), ACCD_host_data);
77cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("init"), ACCD_init);
78cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("kernels"), ACCD_kernels);
79cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("kernels loop"), ACCD_kernels_loop);
80cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("loop"), ACCD_loop);
81cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("parallel"), ACCD_parallel);
82cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("parallel loop"), ACCD_parallel_loop);
83cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("routine"), ACCD_routine);
84cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("serial"), ACCD_serial);
85cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("serial loop"), ACCD_serial_loop);
86cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("set"), ACCD_set);
87cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("shutdown"), ACCD_shutdown);
88cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("unknown"), ACCD_unknown);
89cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("update"), ACCD_update);
90cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveKind("wait"), ACCD_wait);
91cc8df90bSValentin Clement 
92cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_atomic), "atomic");
93cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_cache), "cache");
94cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_data), "data");
95cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_declare), "declare");
96cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_enter_data), "enter data");
97cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_exit_data), "exit data");
98cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_host_data), "host_data");
99cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_init), "init");
100cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_kernels), "kernels");
101cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_kernels_loop), "kernels loop");
102cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_loop), "loop");
103cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_parallel), "parallel");
104cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_parallel_loop), "parallel loop");
105cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_routine), "routine");
106cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_serial), "serial");
107cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_serial_loop), "serial loop");
108cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_set), "set");
109cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_shutdown), "shutdown");
110cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_unknown), "unknown");
111cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_update), "update");
112cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCDirectiveName(ACCD_wait), "wait");
113cc8df90bSValentin Clement }
114cc8df90bSValentin Clement 
TEST(OpenACCTest,ClauseHelpers)115cc8df90bSValentin Clement TEST(OpenACCTest, ClauseHelpers) {
116cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind(""), ACCC_unknown);
117cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("dummy"), ACCC_unknown);
118cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("async"), ACCC_async);
119cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("attach"), ACCC_attach);
120cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("auto"), ACCC_auto);
121cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("bind"), ACCC_bind);
122cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("capture"), ACCC_capture);
123cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("collapse"), ACCC_collapse);
124cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("copy"), ACCC_copy);
125cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("copyin"), ACCC_copyin);
126cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("copyout"), ACCC_copyout);
127cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("create"), ACCC_create);
128cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("default"), ACCC_default);
129cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("default_async"), ACCC_default_async);
130cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("delete"), ACCC_delete);
131cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("detach"), ACCC_detach);
132cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("device"), ACCC_device);
133cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("device_num"), ACCC_device_num);
134cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("deviceptr"), ACCC_deviceptr);
135cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("device_resident"), ACCC_device_resident);
136cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("device_type"), ACCC_device_type);
137cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("finalize"), ACCC_finalize);
138cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("firstprivate"), ACCC_firstprivate);
139cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("gang"), ACCC_gang);
140cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("host"), ACCC_host);
141cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("if"), ACCC_if);
142cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("if_present"), ACCC_if_present);
143cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("independent"), ACCC_independent);
144cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("link"), ACCC_link);
145cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("no_create"), ACCC_no_create);
146cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("nohost"), ACCC_nohost);
147cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("num_gangs"), ACCC_num_gangs);
148cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("num_workers"), ACCC_num_workers);
149cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("present"), ACCC_present);
150cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("private"), ACCC_private);
151cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("read"), ACCC_read);
152cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("reduction"), ACCC_reduction);
153cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("self"), ACCC_self);
154cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("seq"), ACCC_seq);
155cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("tile"), ACCC_tile);
156cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("unknown"), ACCC_unknown);
157cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("use_device"), ACCC_use_device);
158cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("vector"), ACCC_vector);
159cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("vector_length"), ACCC_vector_length);
160cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("wait"), ACCC_wait);
161cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("worker"), ACCC_worker);
162cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseKind("write"), ACCC_write);
163cc8df90bSValentin Clement 
164cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_async), "async");
165cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_attach), "attach");
166cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_auto), "auto");
167cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_bind), "bind");
168cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_capture), "capture");
169cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_collapse), "collapse");
170cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_copy), "copy");
171cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_copyin), "copyin");
172cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_copyout), "copyout");
173cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_create), "create");
174cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_default), "default");
175cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_default_async), "default_async");
176cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_delete), "delete");
177cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_detach), "detach");
178cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_device), "device");
179cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_device_num), "device_num");
180cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_deviceptr), "deviceptr");
181cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_device_resident), "device_resident");
182cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_device_type), "device_type");
183cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_finalize), "finalize");
184cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_firstprivate), "firstprivate");
185cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_gang), "gang");
186cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_host), "host");
187cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_if), "if");
188cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_if_present), "if_present");
189cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_independent), "independent");
190cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_link), "link");
191cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_no_create), "no_create");
192cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_nohost), "nohost");
193cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_num_gangs), "num_gangs");
194cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_num_workers), "num_workers");
195cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_present), "present");
196cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_private), "private");
197cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_read), "read");
198cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_reduction), "reduction");
199cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_self), "self");
200cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_seq), "seq");
201cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_tile), "tile");
202cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_unknown), "unknown");
203cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_use_device), "use_device");
204cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_vector), "vector");
205cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_vector_length), "vector_length");
206cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_wait), "wait");
207cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_worker), "worker");
208cc8df90bSValentin Clement   EXPECT_EQ(getOpenACCClauseName(ACCC_write), "write");
209cc8df90bSValentin Clement }
210cc8df90bSValentin Clement 
expectAllowedClauses(Directive Dir,unsigned Version,const ArrayRef<Clause> & AllowedClauses)211cc8df90bSValentin Clement static void expectAllowedClauses(Directive Dir, unsigned Version,
212cc8df90bSValentin Clement                                  const ArrayRef<Clause> &AllowedClauses) {
213cc8df90bSValentin Clement   SmallSet<Clause, 30> AllowedClausesSet;
214cc8df90bSValentin Clement   for (Clause Cl : AllowedClauses) {
215cc8df90bSValentin Clement     EXPECT_TRUE(isAllowedClauseForDirective(Dir, Cl, Version));
216cc8df90bSValentin Clement     AllowedClausesSet.insert(Cl);
217cc8df90bSValentin Clement   }
218cc8df90bSValentin Clement 
219cc8df90bSValentin Clement   for (Clause Cl : AllClauses) {
220cc8df90bSValentin Clement     if (!AllowedClausesSet.contains(Cl)) {
221cc8df90bSValentin Clement       EXPECT_FALSE(isAllowedClauseForDirective(Dir, Cl, Version));
222cc8df90bSValentin Clement     }
223cc8df90bSValentin Clement   }
224cc8df90bSValentin Clement }
225cc8df90bSValentin Clement 
TEST(OpenACCTest,AllowedClause)226cc8df90bSValentin Clement TEST(OpenACCTest, AllowedClause) {
227cc8df90bSValentin Clement   expectAllowedClauses(ACCD_atomic, 3, {});
228cc8df90bSValentin Clement   expectAllowedClauses(ACCD_cache, 3, {});
229cc8df90bSValentin Clement   expectAllowedClauses(ACCD_unknown, 3, {});
230cc8df90bSValentin Clement   expectAllowedClauses(ACCD_parallel, 0, {}); // Version starts at 1
231cc8df90bSValentin Clement 
232cc8df90bSValentin Clement   expectAllowedClauses(ACCD_data, 3,
233cc8df90bSValentin Clement                        {ACCC_if, ACCC_attach, ACCC_copy, ACCC_copyin,
234cc8df90bSValentin Clement                         ACCC_copyout, ACCC_create, ACCC_default, ACCC_deviceptr,
235cc8df90bSValentin Clement                         ACCC_no_create, ACCC_present});
236cc8df90bSValentin Clement 
237cc8df90bSValentin Clement   expectAllowedClauses(ACCD_declare, 3,
238cc8df90bSValentin Clement                        {ACCC_copy, ACCC_copyin, ACCC_copyout, ACCC_create,
239cc8df90bSValentin Clement                         ACCC_present, ACCC_deviceptr, ACCC_device_resident,
240cc8df90bSValentin Clement                         ACCC_link});
241cc8df90bSValentin Clement 
242cc8df90bSValentin Clement   expectAllowedClauses(
243cc8df90bSValentin Clement       ACCD_enter_data, 3,
244cc8df90bSValentin Clement       {ACCC_async, ACCC_if, ACCC_wait, ACCC_attach, ACCC_create, ACCC_copyin});
245cc8df90bSValentin Clement 
246cc8df90bSValentin Clement   expectAllowedClauses(ACCD_exit_data, 3,
247cc8df90bSValentin Clement                        {ACCC_async, ACCC_if, ACCC_wait, ACCC_finalize,
248cc8df90bSValentin Clement                         ACCC_copyout, ACCC_delete, ACCC_detach});
249cc8df90bSValentin Clement 
250cc8df90bSValentin Clement   expectAllowedClauses(ACCD_host_data, 3,
251cc8df90bSValentin Clement                        {ACCC_if, ACCC_if_present, ACCC_use_device});
252cc8df90bSValentin Clement 
253cc8df90bSValentin Clement   expectAllowedClauses(ACCD_init, 3,
254cc8df90bSValentin Clement                        {ACCC_device_num, ACCC_device_type, ACCC_if});
255cc8df90bSValentin Clement 
256cc8df90bSValentin Clement   expectAllowedClauses(ACCD_kernels, 3,
257cc8df90bSValentin Clement                        {ACCC_attach, ACCC_copy, ACCC_copyin, ACCC_copyout,
258cc8df90bSValentin Clement                         ACCC_create, ACCC_device_type, ACCC_no_create,
259cc8df90bSValentin Clement                         ACCC_present, ACCC_deviceptr, ACCC_async, ACCC_default,
260cc8df90bSValentin Clement                         ACCC_if, ACCC_num_gangs, ACCC_num_workers, ACCC_self,
261cc8df90bSValentin Clement                         ACCC_vector_length, ACCC_wait});
262cc8df90bSValentin Clement 
263cc8df90bSValentin Clement   expectAllowedClauses(
264cc8df90bSValentin Clement       ACCD_kernels_loop, 3,
265cc8df90bSValentin Clement       {ACCC_copy,        ACCC_copyin,        ACCC_copyout, ACCC_create,
266cc8df90bSValentin Clement        ACCC_device_type, ACCC_no_create,     ACCC_present, ACCC_private,
267*82888328SRazvan Lupusoru        ACCC_reduction,   ACCC_deviceptr,     ACCC_attach,  ACCC_async,
268*82888328SRazvan Lupusoru        ACCC_collapse,    ACCC_default,       ACCC_gang,    ACCC_if,
269*82888328SRazvan Lupusoru        ACCC_num_gangs,   ACCC_num_workers,   ACCC_self,    ACCC_tile,
270cc8df90bSValentin Clement        ACCC_vector,      ACCC_vector_length, ACCC_wait,    ACCC_worker,
271cc8df90bSValentin Clement        ACCC_auto,        ACCC_independent,   ACCC_seq});
272cc8df90bSValentin Clement 
273cc8df90bSValentin Clement   expectAllowedClauses(ACCD_loop, 3,
274*82888328SRazvan Lupusoru                        {ACCC_device_type, ACCC_private, ACCC_reduction,
275*82888328SRazvan Lupusoru                         ACCC_collapse, ACCC_gang, ACCC_tile, ACCC_vector,
276cc8df90bSValentin Clement                         ACCC_worker, ACCC_auto, ACCC_independent, ACCC_seq});
277cc8df90bSValentin Clement 
278*82888328SRazvan Lupusoru   expectAllowedClauses(
279*82888328SRazvan Lupusoru       ACCD_parallel, 3,
280*82888328SRazvan Lupusoru       {ACCC_async,         ACCC_wait,         ACCC_num_gangs, ACCC_num_workers,
281*82888328SRazvan Lupusoru        ACCC_vector_length, ACCC_device_type,  ACCC_if,        ACCC_self,
282*82888328SRazvan Lupusoru        ACCC_copy,          ACCC_copyin,       ACCC_copyout,   ACCC_create,
283*82888328SRazvan Lupusoru        ACCC_no_create,     ACCC_present,      ACCC_deviceptr, ACCC_attach,
284*82888328SRazvan Lupusoru        ACCC_private,       ACCC_firstprivate, ACCC_reduction, ACCC_default});
285cc8df90bSValentin Clement 
286cc8df90bSValentin Clement   expectAllowedClauses(
287cc8df90bSValentin Clement       ACCD_parallel_loop, 3,
288cc8df90bSValentin Clement       {ACCC_attach,      ACCC_copy,      ACCC_copyin,      ACCC_copyout,
289cc8df90bSValentin Clement        ACCC_create,      ACCC_deviceptr, ACCC_device_type, ACCC_firstprivate,
290*82888328SRazvan Lupusoru        ACCC_no_create,   ACCC_present,   ACCC_private,     ACCC_reduction,
291*82888328SRazvan Lupusoru        ACCC_tile,        ACCC_wait,      ACCC_async,       ACCC_collapse,
292*82888328SRazvan Lupusoru        ACCC_default,     ACCC_gang,      ACCC_if,          ACCC_num_gangs,
293*82888328SRazvan Lupusoru        ACCC_num_workers, ACCC_self,      ACCC_vector,      ACCC_vector_length,
294cc8df90bSValentin Clement        ACCC_worker,      ACCC_auto,      ACCC_independent, ACCC_seq});
295cc8df90bSValentin Clement 
296cc8df90bSValentin Clement   expectAllowedClauses(ACCD_routine, 3,
297cc8df90bSValentin Clement                        {ACCC_bind, ACCC_device_type, ACCC_nohost, ACCC_gang,
298cc8df90bSValentin Clement                         ACCC_seq, ACCC_vector, ACCC_worker});
299cc8df90bSValentin Clement 
300cc8df90bSValentin Clement   expectAllowedClauses(ACCD_serial, 3,
301cc8df90bSValentin Clement                        {ACCC_attach, ACCC_copy, ACCC_copyin, ACCC_copyout,
302cc8df90bSValentin Clement                         ACCC_create, ACCC_deviceptr, ACCC_device_type,
303*82888328SRazvan Lupusoru                         ACCC_no_create, ACCC_present, ACCC_private,
304*82888328SRazvan Lupusoru                         ACCC_firstprivate, ACCC_reduction, ACCC_wait,
305*82888328SRazvan Lupusoru                         ACCC_async, ACCC_default, ACCC_if, ACCC_self});
306cc8df90bSValentin Clement 
307cc8df90bSValentin Clement   expectAllowedClauses(
308cc8df90bSValentin Clement       ACCD_serial_loop, 3,
309cc8df90bSValentin Clement       {ACCC_attach,    ACCC_copy,      ACCC_copyin,      ACCC_copyout,
310cc8df90bSValentin Clement        ACCC_create,    ACCC_deviceptr, ACCC_device_type, ACCC_firstprivate,
311*82888328SRazvan Lupusoru        ACCC_no_create, ACCC_present,   ACCC_private,     ACCC_reduction,
312*82888328SRazvan Lupusoru        ACCC_wait,      ACCC_async,     ACCC_collapse,    ACCC_default,
313*82888328SRazvan Lupusoru        ACCC_gang,      ACCC_if,        ACCC_self,        ACCC_tile,
314cc8df90bSValentin Clement        ACCC_vector,    ACCC_worker,    ACCC_auto,        ACCC_independent,
315cc8df90bSValentin Clement        ACCC_seq});
316cc8df90bSValentin Clement 
317cc8df90bSValentin Clement   expectAllowedClauses(
318cc8df90bSValentin Clement       ACCD_set, 3,
319cc8df90bSValentin Clement       {ACCC_default_async, ACCC_device_num, ACCC_device_type, ACCC_if});
320cc8df90bSValentin Clement 
321cc8df90bSValentin Clement   expectAllowedClauses(ACCD_shutdown, 3,
322cc8df90bSValentin Clement                        {ACCC_device_num, ACCC_device_type, ACCC_if});
323cc8df90bSValentin Clement 
324cc8df90bSValentin Clement   expectAllowedClauses(ACCD_update, 3,
325cc8df90bSValentin Clement                        {ACCC_async, ACCC_wait, ACCC_device_type, ACCC_if,
326cc8df90bSValentin Clement                         ACCC_if_present, ACCC_self, ACCC_host, ACCC_device});
327cc8df90bSValentin Clement 
328cc8df90bSValentin Clement   expectAllowedClauses(ACCD_wait, 3, {ACCC_async, ACCC_if});
329cc8df90bSValentin Clement }
330cc8df90bSValentin Clement 
331cc8df90bSValentin Clement } // namespace
332