| // RUN: %libomp-compile-and-run |
| #include "omp_testsuite.h" |
| |
| #define N 100 |
| |
| int x1, x2, x3, x4, x5; |
| #pragma omp threadprivate(x1, x2, x3, x4, x5) |
| |
| int test_omp_parallel_copyin() { |
| int a[N]; |
| x1 = 1; |
| |
| #pragma omp parallel copyin(x1) |
| #pragma omp for |
| for (int i = 0; i < N; i++) |
| a[i] = i + x1; |
| |
| int sum = 0; |
| |
| for (int i = 0; i < N; i++) |
| sum += a[i]; |
| |
| return (sum == ((99 + 2 * x1) * 100) / 2); |
| } |
| |
| int test_omp_parallel_for_copyin() { |
| int a[N]; |
| x2 = 2; |
| |
| #pragma omp parallel for copyin(x2) |
| for (int i = 0; i < N; i++) |
| a[i] = i + x2; |
| |
| int sum = 0; |
| |
| for (int i = 0; i < N; i++) |
| sum += a[i]; |
| |
| return (sum == ((99 + 2 * x2) * 100) / 2); |
| } |
| |
| int test_omp_parallel_for_simd_copyin() { |
| int a[N]; |
| x3 = 3; |
| |
| #pragma omp parallel for simd copyin(x3) |
| for (int i = 0; i < N; i++) |
| a[i] = i + x3; |
| |
| int sum = 0; |
| |
| for (int i = 0; i < N; i++) |
| sum += a[i]; |
| |
| return (sum == ((99 + 2 * x3) * 100) / 2); |
| } |
| |
| int test_omp_parallel_sections_copyin() { |
| int a = 0; |
| int b = 0; |
| x4 = 4; |
| |
| #pragma omp parallel sections copyin(x4) |
| { |
| #pragma omp section |
| { a = x4; } |
| |
| #pragma omp section |
| { b = x4; } |
| } |
| |
| return (a + b == x4 * 2); |
| } |
| |
| int test_omp_parallel_master_copyin() { |
| int a[N]; |
| x5 = 5; |
| |
| #pragma omp parallel master copyin(x5) |
| for (int i = 0; i < N; i++) |
| a[i] = i + x5; |
| |
| int sum = 0; |
| |
| for (int i = 0; i < N; i++) |
| sum += a[i]; |
| |
| return (sum == ((99 + 2 * x5) * 100) / 2); |
| } |
| |
| int main() { |
| int num_failed = 0; |
| |
| if (!test_omp_parallel_copyin()) |
| num_failed++; |
| |
| if (!test_omp_parallel_for_copyin()) |
| num_failed++; |
| |
| if (!test_omp_parallel_for_simd_copyin()) |
| num_failed++; |
| |
| if (!test_omp_parallel_sections_copyin()) |
| num_failed++; |
| |
| if (!test_omp_parallel_master_copyin()) |
| num_failed++; |
| |
| return num_failed; |
| } |