| /* PR libgomp/29947 */ |
| |
| /* { dg-do run } */ |
| |
| extern void abort (void); |
| |
| int cnt; |
| |
| void |
| test1 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (dynamic) |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test2 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (dynamic) |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test3 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (guided) |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test4 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (guided) |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test5 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (dynamic) ordered |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test6 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (dynamic) ordered |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test7 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (guided) ordered |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test8 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel reduction (+:e,c) |
| { |
| #pragma omp for schedule (guided) ordered |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| #pragma omp atomic |
| ++cnt; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test9 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test10 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test11 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test12 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test13 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test14 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test15 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered |
| for (i = j1; i <= k1; ++i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| void |
| test16 (long j1, long k1, long j2, long k2) |
| { |
| long i, e = 0, c = 0; |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered |
| for (i = k1; i >= j1; --i) |
| { |
| if (i < j2 || i > k2) |
| ++e; |
| #pragma omp ordered |
| ++c; |
| } |
| if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1)) |
| abort (); |
| } |
| |
| int |
| __attribute__((noinline)) |
| test (long j1, long k1, long j2, long k2) |
| { |
| test1 (j1, k1, j2, k2); |
| test2 (j1, k1, j2, k2); |
| test3 (j1, k1, j2, k2); |
| test4 (j1, k1, j2, k2); |
| test5 (j1, k1, j2, k2); |
| test6 (j1, k1, j2, k2); |
| test7 (j1, k1, j2, k2); |
| test8 (j1, k1, j2, k2); |
| test9 (j1, k1, j2, k2); |
| test10 (j1, k1, j2, k2); |
| test11 (j1, k1, j2, k2); |
| test12 (j1, k1, j2, k2); |
| test13 (j1, k1, j2, k2); |
| test14 (j1, k1, j2, k2); |
| test15 (j1, k1, j2, k2); |
| test16 (j1, k1, j2, k2); |
| return cnt; |
| } |
| |
| int |
| main (void) |
| { |
| test (1, 5, 1, 5); |
| test (5, 5, 5, 5); |
| test (5, 4, 5, 4); |
| test (5, 1, 5, 1); |
| return 0; |
| } |