xref: /llvm-project/offload/test/api/omp_device_memory.c (revision adc4e45f2ecce13cf4ed9b4ab119492342b86faf)
1330d8983SJohannes Doerfert // RUN: %libomptarget-compile-run-and-check-generic
2330d8983SJohannes Doerfert 
3330d8983SJohannes Doerfert #include <omp.h>
4330d8983SJohannes Doerfert #include <stdio.h>
5330d8983SJohannes Doerfert 
main()6330d8983SJohannes Doerfert int main() {
7330d8983SJohannes Doerfert   const int N = 64;
8330d8983SJohannes Doerfert 
9330d8983SJohannes Doerfert   int *device_ptr =
10330d8983SJohannes Doerfert       omp_alloc(N * sizeof(int), llvm_omp_target_device_mem_alloc);
11330d8983SJohannes Doerfert 
12330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for is_device_ptr(device_ptr)
13330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
14330d8983SJohannes Doerfert     device_ptr[i] = 1;
15330d8983SJohannes Doerfert   }
16330d8983SJohannes Doerfert 
17330d8983SJohannes Doerfert   int sum = 0;
18*adc4e45fSKrzysztof Parzyszek #pragma omp target parallel for reduction(+ : sum) is_device_ptr(device_ptr)
19330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i)
20330d8983SJohannes Doerfert     sum += device_ptr[i];
21330d8983SJohannes Doerfert 
22330d8983SJohannes Doerfert   // CHECK: PASS
23330d8983SJohannes Doerfert   if (sum == N)
24330d8983SJohannes Doerfert     printf("PASS\n");
25330d8983SJohannes Doerfert 
26330d8983SJohannes Doerfert   omp_free(device_ptr, llvm_omp_target_device_mem_alloc);
27330d8983SJohannes Doerfert }
28