xref: /llvm-project/offload/test/api/omp_device_alloc.c (revision e96146cd46b29e0d100a4566358da8fb38bea43e)
174d23f15SJoseph Huber // RUN: %libomptarget-compile-run-and-check-generic
274d23f15SJoseph Huber 
3*e96146cdSJoseph Huber // UNSUPPORTED: nvidiagpu
4*e96146cdSJoseph Huber // UNSUPPORTED: amdgpu
5*e96146cdSJoseph Huber 
674d23f15SJoseph Huber #include <assert.h>
774d23f15SJoseph Huber #include <omp.h>
874d23f15SJoseph Huber #include <stdio.h>
974d23f15SJoseph Huber 
1074d23f15SJoseph Huber int main() {
11e0326b66SJoseph Huber #pragma omp target
1274d23f15SJoseph Huber   {
13e0326b66SJoseph Huber     int *ptr;
14e0326b66SJoseph Huber #pragma omp allocate(ptr) allocator(omp_default_mem_alloc)
15e0326b66SJoseph Huber     ptr = omp_alloc(sizeof(int), omp_default_mem_alloc);
1674d23f15SJoseph Huber     assert(ptr && "Ptr is (null)!");
17e0326b66SJoseph Huber     *ptr = 0;
18e0326b66SJoseph Huber #pragma omp parallel num_threads(32)
19e0326b66SJoseph Huber     {
20e0326b66SJoseph Huber #pragma omp atomic
21e0326b66SJoseph Huber       *ptr += 1;
22e0326b66SJoseph Huber     }
23e0326b66SJoseph Huber     assert(*ptr == 32 && "Ptr is not 32");
2474d23f15SJoseph Huber     omp_free(ptr, omp_default_mem_alloc);
2574d23f15SJoseph Huber   }
2674d23f15SJoseph Huber 
2774d23f15SJoseph Huber   // CHECK: PASS
2874d23f15SJoseph Huber   printf("PASS\n");
2974d23f15SJoseph Huber }
30