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