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