| // RUN: %libomptarget-compilexx-generic -O3 && %libomptarget-run-generic | |
| #include <stdio.h> | |
| // CHECK: rx: 16, ry: 16; | |
| // CHECK: rx: 16, ry: 16; | |
| // CHECK: rx: 16, ry: 16; | |
| // CHECK: rx: 16, ry: 16; | |
| template <bool Aligned> void test() { | |
| printf("Test %saligned firstprivate\n", Aligned ? "" : "non-"); | |
| char z1[3 + Aligned], z2[3 + Aligned]; | |
| int x[4]; | |
| int y[4]; | |
| y[0] = y[1] = y[2] = y[3] = 4; | |
| x[0] = x[1] = x[2] = x[3] = 4; | |
| int rx = -1, ry = -1; | |
| #pragma omp target firstprivate(z1, y, z2) map(from : ry, rx) map(to : x) | |
| { | |
| ry = (y[0] + y[1] + y[2] + y[3]); | |
| rx = (x[0] + x[1] + x[2] + x[3]); | |
| } | |
| printf(" rx:%i, ry:%i\n", rx, ry); | |
| #pragma omp target firstprivate(z1, y, z2) map(from : ry, rx) map(to : x) | |
| { | |
| z1[2] += 5; | |
| ry = (y[0] + y[1] + y[2] + y[3]); | |
| rx = (x[0] + x[1] + x[2] + x[3]); | |
| z2[2] += 7; | |
| } | |
| printf(" rx:%i, ry:%i\n", rx, ry); | |
| } | |
| int main() { | |
| test<true>(); | |
| test<false>(); | |
| } |