123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /* { dg-do run } */
- /* { dg-require-effective-target tls_runtime } */
- /* { dg-additional-options "-std=gnu99" {target c } } */
- #include <omp.h>
- #include <stdlib.h>
- int r, s, u, v, r2, s2, u2, v2, r3, s3, u3, v3;
- long long w, w2, w3, p, p2, p3;
- int *x, *x2, *x3;
- short y, y2, y3;
- int z;
- int thr1, thr2;
- #pragma omp threadprivate (thr1, thr2)
- void
- foo (int *a, long long int b, long long int c)
- {
- int i;
- long long j;
- #pragma omp parallel for lastprivate (conditional: u, x)
- for (i = 15; i < 64; i++)
- {
- if ((a[i] % 5) == 3)
- u = i;
- if ((a[i] % 7) == 2)
- x = &a[i];
- }
- #pragma omp parallel for lastprivate (conditional: v) reduction (+:r, s) schedule (nonmonotonic: static)
- for (i = -3; i < 119; i += 2)
- {
- ++s;
- if ((a[i + 4] % 11) == 9)
- v = i;
- else
- ++r;
- }
- #pragma omp parallel for schedule (monotonic: static) lastprivate (conditional: w)
- for (j = b; j < b + 115 * c; j += (b & 3) + 7)
- if ((a[j] % 13) == 5)
- w = j * 2;
- #pragma omp parallel for schedule (auto) lastprivate (conditional: p) collapse(3)
- for (i = -5; i < (int) (b + 5); i += 2)
- for (j = b + 12 + c; j > b; --j)
- for (int k = 0; k < 5; k += c)
- if (((((i + 5) * 13 + (13 - j)) * 5 + k) % 17) == 6)
- p = i * 10000 + j * 100 + k;
- #pragma omp parallel for schedule (nonmonotonic: static, 2) lastprivate (conditional: u2, x2)
- for (i = 15; i < 64; i++)
- {
- if ((a[i] % 5) == 3)
- u2 = i;
- if ((a[i] % 7) == 2)
- x2 = &a[i];
- }
- #pragma omp parallel for schedule (static, 3) lastprivate (conditional: v2) reduction (+:r2, s2)
- for (i = -3; i < 119; i += 2)
- {
- ++s2;
- if ((a[i + 4] % 11) == 9)
- v2 = i;
- else
- ++r2;
- }
- #pragma omp parallel for lastprivate (conditional: w2) schedule (static, 1)
- for (j = b; j < b + 115 * c; j += (b & 3) + 7)
- if ((a[j] % 13) == 5)
- w2 = j * 2;
- #pragma omp parallel for schedule (static, 3) collapse (3) lastprivate (conditional: p2)
- for (i = -5; i < (int) (b + 5); i += 2)
- for (j = b + 12 + c; j > b; --j)
- for (int k = 0; k < 5; k += c)
- if (((((i + 5) * 13 + (13 - j)) * 5 + k) % 17) == 6)
- p2 = i * 10000 + j * 100 + k;
- #pragma omp parallel for lastprivate (conditional: u3, x3) schedule (runtime)
- for (i = 15; i < 64; i++)
- {
- if ((a[i] % 5) == 3)
- u3 = i;
- if ((a[i] % 7) == 2)
- x3 = &a[i];
- }
- #pragma omp parallel for lastprivate (conditional: v3) reduction (+:r3, s3) schedule (nonmonotonic: dynamic)
- for (i = -3; i < 119; i += 2)
- {
- ++s3;
- if ((a[i + 4] % 11) == 9)
- v3 = i;
- else
- ++r3;
- }
- #pragma omp parallel for schedule (monotonic: guided, 3) lastprivate (conditional: w3)
- for (j = b; j < b + 115 * c; j += (b & 3) + 7)
- if ((a[j] % 13) == 5)
- w3 = j * 2;
- #pragma omp parallel for schedule (dynamic, 4) lastprivate (conditional: p3) collapse(3)
- for (i = -5; i < (int) (b + 5); i += 2)
- for (j = b + 12 + c; j > b; --j)
- for (int k = 0; k < 5; k += c)
- if (((((i + 5) * 13 + (13 - j)) * 5 + k) % 17) == 6)
- p3 = i * 10000 + j * 100 + k;
- /* Nasty testcase, verify that even a no-op assignment is accounted
- for in lastprivate(conditional:). */
- #pragma omp parallel for schedule (monotonic: static, 2) firstprivate (z) \
- lastprivate (conditional: z)
- for (int k = -2000; k < 8000; ++k)
- {
- if (k < 3000 && (k & 3) == 1)
- {
- z = k;
- thr1 = k;
- }
- else if (k == 7931)
- {
- z = z;
- thr2 = 1;
- }
- }
- if (thr2 && z != thr1)
- abort ();
- }
- int
- main ()
- {
- int a[128], i;
- volatile int j = 0;
- for (i = 0; i < 128; i++)
- a[i] = i;
- w = 1234;
- foo (a, j, j + 1);
- if (u != 63 || v != 115 || w != 140 || x != &a[58] || r != 55 || s != 61 || p != 30104)
- abort ();
- if (u2 != 63 || v2 != 115 || w2 != 140 || x2 != &a[58] || r2 != 55 || s2 != 61 || p2 != 30104)
- abort ();
- if (u3 != 63 || v3 != 115 || w3 != 140 || x3 != &a[58] || r3 != 55 || s3 != 61 || p3 != 30104)
- abort ();
- return 0;
- }
|