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