| /* { dg-do run } */ |
| |
| #ifndef MONOTONIC_TYPE |
| #include <omp.h> |
| #include <stdlib.h> |
| #define MONOTONIC_TYPE int |
| #define MONOTONIC_UNDEF -1 |
| #define MONOTONIC_END(n) n |
| #endif |
| |
| int |
| main () |
| { |
| MONOTONIC_TYPE i; |
| #pragma omp parallel |
| { |
| int cnt = omp_get_num_threads (); |
| int thr = omp_get_thread_num (); |
| MONOTONIC_TYPE l = MONOTONIC_UNDEF; |
| int c = 0; |
| int n = 0; |
| #pragma omp for nowait schedule(static, 5) |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if (cnt == 1) |
| abort (); |
| if (n != 5) |
| abort (); |
| n = 1; |
| c++; |
| } |
| if (n == 1) |
| { |
| if ((i % 5) != 0) |
| abort (); |
| if ((i / 5) % cnt != thr) |
| abort (); |
| } |
| l = i; |
| } |
| if (cnt == 1) |
| { |
| if (n != 73 || l != 73 - 1 || c != 1) |
| abort (); |
| } |
| else if (thr > 73 / 5) |
| { |
| if (l != MONOTONIC_UNDEF || c != 0 || n != 0) |
| abort (); |
| } |
| else if (thr == 73 / 5) |
| { |
| if (l != 73 - 1 || c != 1 || n != 73 % 5) |
| abort (); |
| } |
| else if (c == 0) |
| abort (); |
| else if (l == 73 - 1) |
| { |
| if (thr != (73 / 5) % cnt || n != 73 % 5) |
| abort (); |
| } |
| else if ((n % 5) != 0) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for schedule( monotonic: static, 7) nowait |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if (cnt == 1) |
| abort (); |
| if (n != 7) |
| abort (); |
| n = 1; |
| c++; |
| } |
| if (n == 1) |
| { |
| if ((i % 7) != 0) |
| abort (); |
| if ((i / 7) % cnt != thr) |
| abort (); |
| } |
| l = i; |
| } |
| if (cnt == 1) |
| { |
| if (n != 73 || l != 73 - 1 || c != 1) |
| abort (); |
| } |
| else if (thr > 73 / 7) |
| { |
| if (l != MONOTONIC_UNDEF || c != 0 || n != 0) |
| abort (); |
| } |
| else if (thr == 73 / 7) |
| { |
| if (l != 73 - 1 || c != 1 || n != 73 % 7) |
| abort (); |
| } |
| else if (c == 0) |
| abort (); |
| else if (l == 73 - 1) |
| { |
| if (thr != (73 / 7) % cnt || n != 73 % 7) |
| abort (); |
| } |
| else if ((n % 7) != 0) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for nowait schedule(static) |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| abort (); |
| l = i; |
| } |
| if (c > 1) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for nowait schedule(monotonic,simd:static) |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| abort (); |
| l = i; |
| } |
| if (c > 1) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for schedule(monotonic : dynamic, 5) nowait |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if ((n % 5) != 0 || n == 0) |
| abort (); |
| n = 1; |
| c++; |
| } |
| l = i; |
| } |
| if (l == 73 - 1) |
| { |
| if (n % 5 != 73 % 5) |
| abort (); |
| } |
| else if (l == MONOTONIC_UNDEF) |
| { |
| if (n != 0 || c != 0) |
| abort (); |
| } |
| else if ((n % 5) != 0 || n == 0) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for nowait schedule(dynamic, 7) ordered(1) |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if ((n % 7) != 0 || n == 0) |
| abort (); |
| n = 1; |
| c++; |
| } |
| #pragma omp ordered depend(source) |
| if (MONOTONIC_UNDEF > 0) |
| { |
| #pragma omp ordered depend(sink: i) |
| } |
| else |
| { |
| #pragma omp ordered depend(sink: i - 1) |
| } |
| l = i; |
| } |
| if (l == 73 - 1) |
| { |
| if (n % 7 != 73 % 7) |
| abort (); |
| } |
| else if (l == MONOTONIC_UNDEF) |
| { |
| if (n != 0 || c != 0) |
| abort (); |
| } |
| else if ((n % 7) != 0 || n == 0) |
| abort (); |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for schedule (monotonic :guided , 7) nowait |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if (n < 7) |
| abort (); |
| n = 1; |
| c++; |
| } |
| l = i; |
| } |
| l = MONOTONIC_UNDEF; |
| c = 0; |
| n = 0; |
| #pragma omp for nowait schedule(guided, 7) ordered |
| for (i = 0; i < MONOTONIC_END (73); i++) |
| { |
| if (l == MONOTONIC_UNDEF) |
| { |
| n = 1; |
| c++; |
| } |
| else if (l == i - 1) |
| n++; |
| else |
| { |
| if (l >= i) |
| abort (); |
| if (n < 7) |
| abort (); |
| n = 1; |
| c++; |
| } |
| #pragma omp ordered |
| l = i; |
| } |
| } |
| return 0; |
| } |