brintos

brintos / llvm-project-archived public Read only

0
0
Text · 901 B · 8ce8b7e Raw
59 lines · cpp
1// RUN: %libomptarget-compilexx-and-run-generic2// RUN: %libomptarget-compileoptxx-and-run-generic3 4#include <cassert>5#include <iostream>6 7constexpr const int N = 10;8 9struct T {10  int a;11  int *p;12};13 14struct S {15  int b;16  T t;17};18 19int main(int argc, char *argv[]) {20  S s;21  s.t.p = new int[N];22  for (int i = 0; i < N; ++i) {23    s.t.p[i] = i;24  }25 26#pragma omp target enter data map(to : s, s.t.p[ : N])27 28#pragma omp target29  {30    for (int i = 0; i < N; ++i) {31      s.t.p[i] += i;32    }33  }34 35#pragma omp target update from(s.t.p[ : N])36 37  for (int i = 0; i < N; ++i) {38    assert(s.t.p[i] == 2 * i);39    s.t.p[i] += i;40  }41 42#pragma omp target update to(s.t.p[ : N])43 44#pragma omp target45  {46    for (int i = 0; i < N; ++i) {47      s.t.p[i] += i;48    }49  }50 51#pragma omp target exit data map(from : s, s.t.p[ : N])52 53  for (int i = 0; i < N; ++i) {54    assert(s.t.p[i] == 4 * i);55  }56 57  return 0;58}59