brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 29c4c8b Raw
77 lines · plain
1// RUN: %libomptarget-compilexx-run-and-check-generic2// XFAIL: *3 4#include <cstdlib>5#include <cstdio>6#include <cassert>7 8struct R {9  int d;10  int e;11  int f;12};13 14struct S {15  R *r0;16  R *r1;17  R *r2;18};19 20struct T {21  S *s0;22  S *s1;23  S *s2;24};25 26int main() {27  T *v = (T *) malloc (sizeof(T));28 29  v->s0 = (S *) malloc (sizeof(S));30  v->s1 = (S *) malloc (sizeof(S));31  v->s2 = (S *) malloc (sizeof(S));32 33  v->s0->r0 = (R *) calloc (1, sizeof(R));34  v->s0->r1 = (R *) calloc (1, sizeof(R));35  v->s0->r2 = (R *) calloc (1, sizeof(R));36 37  v->s1->r0 = (R *) calloc (1, sizeof(R));38  v->s1->r1 = (R *) calloc (1, sizeof(R));39  v->s1->r2 = (R *) calloc (1, sizeof(R));40 41  v->s2->r0 = (R *) calloc (1, sizeof(R));42  v->s2->r1 = (R *) calloc (1, sizeof(R));43  v->s2->r2 = (R *) calloc (1, sizeof(R));44 45  #pragma omp target map(to: v->s1, v->s2, *v->s1, v->s1->r1, *v->s2, v->s2->r0) \46                     map(tofrom: v->s1->r1->d, v->s1->r1->e, v->s1->r2->d, v->s1->r2->f, v->s2->r0->e)47  {48    v->s1->r1->d += 3;49    v->s1->r1->e += 5;50    v->s1->r2->d += 7;51    v->s1->r2->f += 9;52    v->s2->r0->e += 11;53  }54 55  printf ("%d\n", v->s1->r1->d); // CHECK: 356  printf ("%d\n", v->s1->r1->e); // CHECK: 557  printf ("%d\n", v->s1->r2->d); // CHECK: 758  printf ("%d\n", v->s1->r2->f); // CHECK: 959  printf ("%d\n", v->s2->r0->e); // CHECK: 1160 61  free(v->s0->r0);62  free(v->s0->r1);63  free(v->s0->r2);64  free(v->s1->r0);65  free(v->s1->r1);66  free(v->s1->r2);67  free(v->s2->r0);68  free(v->s2->r1);69  free(v->s2->r2);70  free(v->s0);71  free(v->s1);72  free(v->s2);73  free(v);74 75  return 0;76}77