| #ifndef LLVM_OpenACC_INC |
| #define LLVM_OpenACC_INC |
| |
| #include "llvm/ADT/BitmaskEnum.h" |
| |
| namespace llvm { |
| class StringRef; |
| namespace acc { |
| |
| LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); |
| |
| enum class Directive { |
| ACCD_atomic, |
| ACCD_cache, |
| ACCD_data, |
| ACCD_declare, |
| ACCD_enter_data, |
| ACCD_exit_data, |
| ACCD_host_data, |
| ACCD_init, |
| ACCD_kernels, |
| ACCD_kernels_loop, |
| ACCD_loop, |
| ACCD_parallel, |
| ACCD_parallel_loop, |
| ACCD_routine, |
| ACCD_serial, |
| ACCD_serial_loop, |
| ACCD_set, |
| ACCD_shutdown, |
| ACCD_unknown, |
| ACCD_update, |
| ACCD_wait, |
| }; |
| |
| static constexpr std::size_t Directive_enumSize = 21; |
| |
| constexpr auto ACCD_atomic = llvm::acc::Directive::ACCD_atomic; |
| constexpr auto ACCD_cache = llvm::acc::Directive::ACCD_cache; |
| constexpr auto ACCD_data = llvm::acc::Directive::ACCD_data; |
| constexpr auto ACCD_declare = llvm::acc::Directive::ACCD_declare; |
| constexpr auto ACCD_enter_data = llvm::acc::Directive::ACCD_enter_data; |
| constexpr auto ACCD_exit_data = llvm::acc::Directive::ACCD_exit_data; |
| constexpr auto ACCD_host_data = llvm::acc::Directive::ACCD_host_data; |
| constexpr auto ACCD_init = llvm::acc::Directive::ACCD_init; |
| constexpr auto ACCD_kernels = llvm::acc::Directive::ACCD_kernels; |
| constexpr auto ACCD_kernels_loop = llvm::acc::Directive::ACCD_kernels_loop; |
| constexpr auto ACCD_loop = llvm::acc::Directive::ACCD_loop; |
| constexpr auto ACCD_parallel = llvm::acc::Directive::ACCD_parallel; |
| constexpr auto ACCD_parallel_loop = llvm::acc::Directive::ACCD_parallel_loop; |
| constexpr auto ACCD_routine = llvm::acc::Directive::ACCD_routine; |
| constexpr auto ACCD_serial = llvm::acc::Directive::ACCD_serial; |
| constexpr auto ACCD_serial_loop = llvm::acc::Directive::ACCD_serial_loop; |
| constexpr auto ACCD_set = llvm::acc::Directive::ACCD_set; |
| constexpr auto ACCD_shutdown = llvm::acc::Directive::ACCD_shutdown; |
| constexpr auto ACCD_unknown = llvm::acc::Directive::ACCD_unknown; |
| constexpr auto ACCD_update = llvm::acc::Directive::ACCD_update; |
| constexpr auto ACCD_wait = llvm::acc::Directive::ACCD_wait; |
| |
| enum class Clause { |
| ACCC_async, |
| ACCC_attach, |
| ACCC_auto, |
| ACCC_bind, |
| ACCC_capture, |
| ACCC_collapse, |
| ACCC_copy, |
| ACCC_copyin, |
| ACCC_copyout, |
| ACCC_create, |
| ACCC_default, |
| ACCC_default_async, |
| ACCC_delete, |
| ACCC_detach, |
| ACCC_device, |
| ACCC_device_num, |
| ACCC_deviceptr, |
| ACCC_device_resident, |
| ACCC_device_type, |
| ACCC_finalize, |
| ACCC_firstprivate, |
| ACCC_gang, |
| ACCC_host, |
| ACCC_if, |
| ACCC_if_present, |
| ACCC_independent, |
| ACCC_link, |
| ACCC_no_create, |
| ACCC_nohost, |
| ACCC_num_gangs, |
| ACCC_num_workers, |
| ACCC_present, |
| ACCC_private, |
| ACCC_read, |
| ACCC_reduction, |
| ACCC_self, |
| ACCC_seq, |
| ACCC_tile, |
| ACCC_unknown, |
| ACCC_use_device, |
| ACCC_vector, |
| ACCC_vector_length, |
| ACCC_wait, |
| ACCC_worker, |
| ACCC_write, |
| }; |
| |
| static constexpr std::size_t Clause_enumSize = 45; |
| |
| constexpr auto ACCC_async = llvm::acc::Clause::ACCC_async; |
| constexpr auto ACCC_attach = llvm::acc::Clause::ACCC_attach; |
| constexpr auto ACCC_auto = llvm::acc::Clause::ACCC_auto; |
| constexpr auto ACCC_bind = llvm::acc::Clause::ACCC_bind; |
| constexpr auto ACCC_capture = llvm::acc::Clause::ACCC_capture; |
| constexpr auto ACCC_collapse = llvm::acc::Clause::ACCC_collapse; |
| constexpr auto ACCC_copy = llvm::acc::Clause::ACCC_copy; |
| constexpr auto ACCC_copyin = llvm::acc::Clause::ACCC_copyin; |
| constexpr auto ACCC_copyout = llvm::acc::Clause::ACCC_copyout; |
| constexpr auto ACCC_create = llvm::acc::Clause::ACCC_create; |
| constexpr auto ACCC_default = llvm::acc::Clause::ACCC_default; |
| constexpr auto ACCC_default_async = llvm::acc::Clause::ACCC_default_async; |
| constexpr auto ACCC_delete = llvm::acc::Clause::ACCC_delete; |
| constexpr auto ACCC_detach = llvm::acc::Clause::ACCC_detach; |
| constexpr auto ACCC_device = llvm::acc::Clause::ACCC_device; |
| constexpr auto ACCC_device_num = llvm::acc::Clause::ACCC_device_num; |
| constexpr auto ACCC_deviceptr = llvm::acc::Clause::ACCC_deviceptr; |
| constexpr auto ACCC_device_resident = llvm::acc::Clause::ACCC_device_resident; |
| constexpr auto ACCC_device_type = llvm::acc::Clause::ACCC_device_type; |
| constexpr auto ACCC_finalize = llvm::acc::Clause::ACCC_finalize; |
| constexpr auto ACCC_firstprivate = llvm::acc::Clause::ACCC_firstprivate; |
| constexpr auto ACCC_gang = llvm::acc::Clause::ACCC_gang; |
| constexpr auto ACCC_host = llvm::acc::Clause::ACCC_host; |
| constexpr auto ACCC_if = llvm::acc::Clause::ACCC_if; |
| constexpr auto ACCC_if_present = llvm::acc::Clause::ACCC_if_present; |
| constexpr auto ACCC_independent = llvm::acc::Clause::ACCC_independent; |
| constexpr auto ACCC_link = llvm::acc::Clause::ACCC_link; |
| constexpr auto ACCC_no_create = llvm::acc::Clause::ACCC_no_create; |
| constexpr auto ACCC_nohost = llvm::acc::Clause::ACCC_nohost; |
| constexpr auto ACCC_num_gangs = llvm::acc::Clause::ACCC_num_gangs; |
| constexpr auto ACCC_num_workers = llvm::acc::Clause::ACCC_num_workers; |
| constexpr auto ACCC_present = llvm::acc::Clause::ACCC_present; |
| constexpr auto ACCC_private = llvm::acc::Clause::ACCC_private; |
| constexpr auto ACCC_read = llvm::acc::Clause::ACCC_read; |
| constexpr auto ACCC_reduction = llvm::acc::Clause::ACCC_reduction; |
| constexpr auto ACCC_self = llvm::acc::Clause::ACCC_self; |
| constexpr auto ACCC_seq = llvm::acc::Clause::ACCC_seq; |
| constexpr auto ACCC_tile = llvm::acc::Clause::ACCC_tile; |
| constexpr auto ACCC_unknown = llvm::acc::Clause::ACCC_unknown; |
| constexpr auto ACCC_use_device = llvm::acc::Clause::ACCC_use_device; |
| constexpr auto ACCC_vector = llvm::acc::Clause::ACCC_vector; |
| constexpr auto ACCC_vector_length = llvm::acc::Clause::ACCC_vector_length; |
| constexpr auto ACCC_wait = llvm::acc::Clause::ACCC_wait; |
| constexpr auto ACCC_worker = llvm::acc::Clause::ACCC_worker; |
| constexpr auto ACCC_write = llvm::acc::Clause::ACCC_write; |
| |
| enum class DefaultValue { |
| ACC_Default_present=0, |
| ACC_Default_none=1, |
| }; |
| |
| constexpr auto ACC_Default_present = llvm::acc::DefaultValue::ACC_Default_present; |
| constexpr auto ACC_Default_none = llvm::acc::DefaultValue::ACC_Default_none; |
| |
| // Enumeration helper functions |
| Directive getOpenACCDirectiveKind(llvm::StringRef Str); |
| |
| llvm::StringRef getOpenACCDirectiveName(Directive D); |
| |
| Clause getOpenACCClauseKind(llvm::StringRef Str); |
| |
| llvm::StringRef getOpenACCClauseName(Clause C); |
| |
| /// Return true if \p C is a valid clause for \p D in version \p Version. |
| bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version); |
| |
| DefaultValue getDefaultValue(StringRef); |
| llvm::StringRef getOpenACCDefaultValueName(DefaultValue); |
| |
| } // namespace acc |
| } // namespace llvm |
| #endif // LLVM_OpenACC_INC |