/* It isn't really clear what is supposed to be valid and what isn't when mixing imperfectly nested loops with generated loops. Sorry for now until that is clarified. */ void foo (int, int); void bar (void) { #pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */ for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */ { foo (i, -1); #pragma omp tile sizes (2) for (int j = 0; j < 32; ++j) foo (i, j); foo (i, -2); } } void baz (void) { #pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */ for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */ { foo (i, -1); #pragma omp tile sizes (2, 2) for (int j = 0; j < 32; ++j) #pragma omp tile sizes (2, 2) for (int k = 0; k < 32; ++k) for (int l = 0; l < 32; ++l) foo (i + k, j + l); foo (i, -2); } } void qux (void) { #pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */ for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */ { int m = i + 6; foo (i, -1); #pragma omp tile sizes (2) for (int j = m; j < 32; ++j) foo (i, j); foo (i, -2); } } void freddy (void) { #pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */ for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */ { int m = i + 6; foo (i, -1); #pragma omp tile sizes (2, 2) for (int j = 0; j < 32; ++j) #pragma omp tile sizes (2, 2) for (int k = 0; k < 32; ++k) for (int l = m; l < 32; ++l) foo (i + k, j + l); foo (i, -2); } }