diff options
Diffstat (limited to 'gcc-4.9/libgomp/testsuite/libgomp.c')
-rw-r--r-- | gcc-4.9/libgomp/testsuite/libgomp.c/pr61200.c | 87 | ||||
-rw-r--r-- | gcc-4.9/libgomp/testsuite/libgomp.c/pr64734.c | 55 |
2 files changed, 142 insertions, 0 deletions
diff --git a/gcc-4.9/libgomp/testsuite/libgomp.c/pr61200.c b/gcc-4.9/libgomp/testsuite/libgomp.c/pr61200.c new file mode 100644 index 0000000..ba3ed37 --- /dev/null +++ b/gcc-4.9/libgomp/testsuite/libgomp.c/pr61200.c @@ -0,0 +1,87 @@ +/* PR libgomp/61200 */ +/* { dg-do run } */ + +#include <omp.h> +#include <stdlib.h> +#include <unistd.h> + +volatile int x; + +void +foo () +{ + int var = 1; + int i; + + for (i = 0; i < 2; i++) + { + if (i == 1) + { + #pragma omp parallel num_threads(2) + if (x) + var++; + else + { + #pragma omp single + sleep (2); + } + } + else + { + #pragma omp task shared(var) + { + sleep (1); + var = 2; + } + } + } + #pragma omp taskwait + if (var != 2) + abort (); +} + +void +bar () +{ + int var = 1; + int i; + + for (i = 0; i < 2; i++) + { + if (i == 0) + { + #pragma omp task shared(var) + { + sleep (1); + var = 2; + } + } + else + { + #pragma omp parallel num_threads(2) + if (x) + var++; + else + { + #pragma omp single + sleep (2); + } + } + } + #pragma omp taskwait + if (var != 2) + abort (); +} + +int +main () +{ + omp_set_nested (1); + #pragma omp parallel num_threads(2) + #pragma omp single + foo (); + #pragma omp parallel num_threads(2) + #pragma omp single + bar (); + return 0; +} diff --git a/gcc-4.9/libgomp/testsuite/libgomp.c/pr64734.c b/gcc-4.9/libgomp/testsuite/libgomp.c/pr64734.c new file mode 100644 index 0000000..457f481 --- /dev/null +++ b/gcc-4.9/libgomp/testsuite/libgomp.c/pr64734.c @@ -0,0 +1,55 @@ +/* PR middle-end/64734 */ + +#include <stdlib.h> + +void +foo (int *x, int *y) +{ + #pragma omp target map (alloc:x[0]) map (alloc:y[0:8]) + { + int i; + for (i = 0; i < 8; i++) + if (y[i] != 2 + i) + break; + if (i != 8 || *x != 1) + *x = 6; + else + { + *x = 8; + for (i = 0; i < 8; i++) + y[i] = 9 + i; + } + } + #pragma omp target update from (y[0:8]) from (x[0]) +} + +void +bar (void) +{ + int x = 1, y[32] = { 0 }; + #pragma omp target data map (to:y[0:32]) map (to:x) + ; +} + +int +main () +{ + int x = 1, y[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }, i; + #pragma omp target data map (to:y[0:8]) map (to:x) + ; + #pragma omp target data map (to:y[0:8]) map (to:x) + { + #pragma omp target update from (y[0:8]) from (x) + } + + #pragma omp target data map (to:y[0:8]) map (to:x) + foo (&x, &y[0]); + + if (x != 8) + abort (); + for (i = 0; i < 8; i++) + if (y[i] != 9 + i) + abort (); + + return 0; +} |