xref: /llvm-project/offload/test/mapping/ptr_and_obj_motion.c (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert // RUN: %libomptarget-compile-run-and-check-generic
2*330d8983SJohannes Doerfert 
3*330d8983SJohannes Doerfert #include <stdio.h>
4*330d8983SJohannes Doerfert 
5*330d8983SJohannes Doerfert typedef struct {
6*330d8983SJohannes Doerfert   double *dataptr;
7*330d8983SJohannes Doerfert   int dummy1;
8*330d8983SJohannes Doerfert   int dummy2;
9*330d8983SJohannes Doerfert } DV;
10*330d8983SJohannes Doerfert 
init(double vertexx[])11*330d8983SJohannes Doerfert void init(double vertexx[]) {
12*330d8983SJohannes Doerfert #pragma omp target map(vertexx[0 : 100])
13*330d8983SJohannes Doerfert   {
14*330d8983SJohannes Doerfert     printf("In init: %lf, expected 100.0\n", vertexx[77]);
15*330d8983SJohannes Doerfert     vertexx[77] = 77.0;
16*330d8983SJohannes Doerfert   }
17*330d8983SJohannes Doerfert }
18*330d8983SJohannes Doerfert 
change(DV * dvptr)19*330d8983SJohannes Doerfert void change(DV *dvptr) {
20*330d8983SJohannes Doerfert #pragma omp target map(dvptr->dataptr[0 : 100])
21*330d8983SJohannes Doerfert   {
22*330d8983SJohannes Doerfert     printf("In change: %lf, expected 77.0\n", dvptr->dataptr[77]);
23*330d8983SJohannes Doerfert     dvptr->dataptr[77] += 1.0;
24*330d8983SJohannes Doerfert   }
25*330d8983SJohannes Doerfert }
26*330d8983SJohannes Doerfert 
main()27*330d8983SJohannes Doerfert int main() {
28*330d8983SJohannes Doerfert   double vertexx[100];
29*330d8983SJohannes Doerfert   vertexx[77] = 100.0;
30*330d8983SJohannes Doerfert 
31*330d8983SJohannes Doerfert   DV dv;
32*330d8983SJohannes Doerfert   dv.dataptr = &vertexx[0];
33*330d8983SJohannes Doerfert 
34*330d8983SJohannes Doerfert #pragma omp target enter data map(to : vertexx[0 : 100])
35*330d8983SJohannes Doerfert 
36*330d8983SJohannes Doerfert   init(vertexx);
37*330d8983SJohannes Doerfert   change(&dv);
38*330d8983SJohannes Doerfert 
39*330d8983SJohannes Doerfert #pragma omp target exit data map(from : vertexx[0 : 100])
40*330d8983SJohannes Doerfert 
41*330d8983SJohannes Doerfert   // CHECK: Final: 78.0
42*330d8983SJohannes Doerfert   printf("Final: %lf\n", vertexx[77]);
43*330d8983SJohannes Doerfert }
44