//===--------- allocator.h - OpenMP target memory allocator ------- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Macros for allocating variables in different address spaces. // //===----------------------------------------------------------------------===// #ifndef OMPTARGET_ALLOCATOR_H #define OMPTARGET_ALLOCATOR_H #if _OPENMP // Follows the pattern in interface.h // Clang sema checks this type carefully, needs to closely match that from omp.h typedef enum omp_allocator_handle_t { omp_null_allocator = 0, omp_default_mem_alloc = 1, omp_large_cap_mem_alloc = 2, omp_const_mem_alloc = 3, omp_high_bw_mem_alloc = 4, omp_low_lat_mem_alloc = 5, omp_cgroup_mem_alloc = 6, omp_pteam_mem_alloc = 7, omp_thread_mem_alloc = 8, KMP_ALLOCATOR_MAX_HANDLE = ~(0U) } omp_allocator_handle_t; #define __PRAGMA(STR) _Pragma(#STR) #define OMP_PRAGMA(STR) __PRAGMA(omp STR) #define SHARED(NAME) \ NAME [[clang::loader_uninitialized]]; \ OMP_PRAGMA(allocate(NAME) allocator(omp_pteam_mem_alloc)) #define EXTERN_SHARED(NAME) \ NAME; \ OMP_PRAGMA(allocate(NAME) allocator(omp_pteam_mem_alloc)) #endif #endif // OMPTARGET_ALLOCATOR_H