blob: badccfb9be2015694cd92ff64262ba2e0cc2db07 [file] [log] [blame]
Olivier Deprezf4ef2d02021-04-20 13:36:24 +02001#ifndef LLVM_OpenACC_INC
2#define LLVM_OpenACC_INC
3
4#include "llvm/ADT/BitmaskEnum.h"
5
6namespace llvm {
7class StringRef;
8namespace acc {
9
10LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
11
12enum class Directive {
13 ACCD_atomic,
14 ACCD_cache,
15 ACCD_data,
16 ACCD_declare,
17 ACCD_enter_data,
18 ACCD_exit_data,
19 ACCD_host_data,
20 ACCD_init,
21 ACCD_kernels,
22 ACCD_kernels_loop,
23 ACCD_loop,
24 ACCD_parallel,
25 ACCD_parallel_loop,
26 ACCD_routine,
27 ACCD_serial,
28 ACCD_serial_loop,
29 ACCD_set,
30 ACCD_shutdown,
31 ACCD_unknown,
32 ACCD_update,
33 ACCD_wait,
34};
35
36static constexpr std::size_t Directive_enumSize = 21;
37
38constexpr auto ACCD_atomic = llvm::acc::Directive::ACCD_atomic;
39constexpr auto ACCD_cache = llvm::acc::Directive::ACCD_cache;
40constexpr auto ACCD_data = llvm::acc::Directive::ACCD_data;
41constexpr auto ACCD_declare = llvm::acc::Directive::ACCD_declare;
42constexpr auto ACCD_enter_data = llvm::acc::Directive::ACCD_enter_data;
43constexpr auto ACCD_exit_data = llvm::acc::Directive::ACCD_exit_data;
44constexpr auto ACCD_host_data = llvm::acc::Directive::ACCD_host_data;
45constexpr auto ACCD_init = llvm::acc::Directive::ACCD_init;
46constexpr auto ACCD_kernels = llvm::acc::Directive::ACCD_kernels;
47constexpr auto ACCD_kernels_loop = llvm::acc::Directive::ACCD_kernels_loop;
48constexpr auto ACCD_loop = llvm::acc::Directive::ACCD_loop;
49constexpr auto ACCD_parallel = llvm::acc::Directive::ACCD_parallel;
50constexpr auto ACCD_parallel_loop = llvm::acc::Directive::ACCD_parallel_loop;
51constexpr auto ACCD_routine = llvm::acc::Directive::ACCD_routine;
52constexpr auto ACCD_serial = llvm::acc::Directive::ACCD_serial;
53constexpr auto ACCD_serial_loop = llvm::acc::Directive::ACCD_serial_loop;
54constexpr auto ACCD_set = llvm::acc::Directive::ACCD_set;
55constexpr auto ACCD_shutdown = llvm::acc::Directive::ACCD_shutdown;
56constexpr auto ACCD_unknown = llvm::acc::Directive::ACCD_unknown;
57constexpr auto ACCD_update = llvm::acc::Directive::ACCD_update;
58constexpr auto ACCD_wait = llvm::acc::Directive::ACCD_wait;
59
60enum class Clause {
61 ACCC_async,
62 ACCC_attach,
63 ACCC_auto,
64 ACCC_bind,
65 ACCC_capture,
66 ACCC_collapse,
67 ACCC_copy,
68 ACCC_copyin,
69 ACCC_copyout,
70 ACCC_create,
71 ACCC_default,
72 ACCC_default_async,
73 ACCC_delete,
74 ACCC_detach,
75 ACCC_device,
76 ACCC_device_num,
77 ACCC_deviceptr,
78 ACCC_device_resident,
79 ACCC_device_type,
80 ACCC_finalize,
81 ACCC_firstprivate,
82 ACCC_gang,
83 ACCC_host,
84 ACCC_if,
85 ACCC_if_present,
86 ACCC_independent,
87 ACCC_link,
88 ACCC_no_create,
89 ACCC_nohost,
90 ACCC_num_gangs,
91 ACCC_num_workers,
92 ACCC_present,
93 ACCC_private,
94 ACCC_read,
95 ACCC_reduction,
96 ACCC_self,
97 ACCC_seq,
98 ACCC_tile,
99 ACCC_unknown,
100 ACCC_use_device,
101 ACCC_vector,
102 ACCC_vector_length,
103 ACCC_wait,
104 ACCC_worker,
105 ACCC_write,
106};
107
108static constexpr std::size_t Clause_enumSize = 45;
109
110constexpr auto ACCC_async = llvm::acc::Clause::ACCC_async;
111constexpr auto ACCC_attach = llvm::acc::Clause::ACCC_attach;
112constexpr auto ACCC_auto = llvm::acc::Clause::ACCC_auto;
113constexpr auto ACCC_bind = llvm::acc::Clause::ACCC_bind;
114constexpr auto ACCC_capture = llvm::acc::Clause::ACCC_capture;
115constexpr auto ACCC_collapse = llvm::acc::Clause::ACCC_collapse;
116constexpr auto ACCC_copy = llvm::acc::Clause::ACCC_copy;
117constexpr auto ACCC_copyin = llvm::acc::Clause::ACCC_copyin;
118constexpr auto ACCC_copyout = llvm::acc::Clause::ACCC_copyout;
119constexpr auto ACCC_create = llvm::acc::Clause::ACCC_create;
120constexpr auto ACCC_default = llvm::acc::Clause::ACCC_default;
121constexpr auto ACCC_default_async = llvm::acc::Clause::ACCC_default_async;
122constexpr auto ACCC_delete = llvm::acc::Clause::ACCC_delete;
123constexpr auto ACCC_detach = llvm::acc::Clause::ACCC_detach;
124constexpr auto ACCC_device = llvm::acc::Clause::ACCC_device;
125constexpr auto ACCC_device_num = llvm::acc::Clause::ACCC_device_num;
126constexpr auto ACCC_deviceptr = llvm::acc::Clause::ACCC_deviceptr;
127constexpr auto ACCC_device_resident = llvm::acc::Clause::ACCC_device_resident;
128constexpr auto ACCC_device_type = llvm::acc::Clause::ACCC_device_type;
129constexpr auto ACCC_finalize = llvm::acc::Clause::ACCC_finalize;
130constexpr auto ACCC_firstprivate = llvm::acc::Clause::ACCC_firstprivate;
131constexpr auto ACCC_gang = llvm::acc::Clause::ACCC_gang;
132constexpr auto ACCC_host = llvm::acc::Clause::ACCC_host;
133constexpr auto ACCC_if = llvm::acc::Clause::ACCC_if;
134constexpr auto ACCC_if_present = llvm::acc::Clause::ACCC_if_present;
135constexpr auto ACCC_independent = llvm::acc::Clause::ACCC_independent;
136constexpr auto ACCC_link = llvm::acc::Clause::ACCC_link;
137constexpr auto ACCC_no_create = llvm::acc::Clause::ACCC_no_create;
138constexpr auto ACCC_nohost = llvm::acc::Clause::ACCC_nohost;
139constexpr auto ACCC_num_gangs = llvm::acc::Clause::ACCC_num_gangs;
140constexpr auto ACCC_num_workers = llvm::acc::Clause::ACCC_num_workers;
141constexpr auto ACCC_present = llvm::acc::Clause::ACCC_present;
142constexpr auto ACCC_private = llvm::acc::Clause::ACCC_private;
143constexpr auto ACCC_read = llvm::acc::Clause::ACCC_read;
144constexpr auto ACCC_reduction = llvm::acc::Clause::ACCC_reduction;
145constexpr auto ACCC_self = llvm::acc::Clause::ACCC_self;
146constexpr auto ACCC_seq = llvm::acc::Clause::ACCC_seq;
147constexpr auto ACCC_tile = llvm::acc::Clause::ACCC_tile;
148constexpr auto ACCC_unknown = llvm::acc::Clause::ACCC_unknown;
149constexpr auto ACCC_use_device = llvm::acc::Clause::ACCC_use_device;
150constexpr auto ACCC_vector = llvm::acc::Clause::ACCC_vector;
151constexpr auto ACCC_vector_length = llvm::acc::Clause::ACCC_vector_length;
152constexpr auto ACCC_wait = llvm::acc::Clause::ACCC_wait;
153constexpr auto ACCC_worker = llvm::acc::Clause::ACCC_worker;
154constexpr auto ACCC_write = llvm::acc::Clause::ACCC_write;
155
156enum class DefaultValue {
157 ACC_Default_present=0,
158 ACC_Default_none=1,
159};
160
161constexpr auto ACC_Default_present = llvm::acc::DefaultValue::ACC_Default_present;
162constexpr auto ACC_Default_none = llvm::acc::DefaultValue::ACC_Default_none;
163
164// Enumeration helper functions
165Directive getOpenACCDirectiveKind(llvm::StringRef Str);
166
167llvm::StringRef getOpenACCDirectiveName(Directive D);
168
169Clause getOpenACCClauseKind(llvm::StringRef Str);
170
171llvm::StringRef getOpenACCClauseName(Clause C);
172
173/// Return true if \p C is a valid clause for \p D in version \p Version.
174bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
175
176DefaultValue getDefaultValue(StringRef);
177llvm::StringRef getOpenACCDefaultValueName(DefaultValue);
178
179} // namespace acc
180} // namespace llvm
181#endif // LLVM_OpenACC_INC