| #ifndef HEADER |
| #define HEADER |
| // RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -verify %s |
| |
| #define NNN 50 |
| int aaa[NNN]; |
| int aaa2[NNN][NNN]; |
| |
| void parallel_loop() { |
| #pragma omp parallel |
| { |
| #pragma omp loop |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| } |
| |
| #pragma omp parallel for |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp parallel |
| #pragma omp for nowait |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp parallel for |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp nothing |
| #pragma omp loop |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp target teams distribute parallel for |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp target parallel |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp parallel for |
| for (int i = 0; i < 100; ++i) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'loop' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| } |
| } |
| |
| #pragma omp parallel |
| { |
| #pragma omp sections |
| { |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp section |
| { |
| aaa[NNN-1] = NNN; |
| } |
| } |
| } |
| } |
| |
| void teams_loop() { |
| int var1; |
| int total = 0; |
| |
| #pragma omp teams |
| { |
| #pragma omp loop bind(teams) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| |
| #pragma omp loop bind(teams) collapse(2) private(var1) |
| for (int i = 0 ; i < 3 ; i++) { |
| for (int j = 0 ; j < NNN ; j++) { |
| var1 += aaa[j]; |
| } |
| } |
| } |
| |
| #pragma omp target teams |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(teams) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp target teams distribute parallel for |
| for (int i = 0 ; i < NNN ; i++) { |
| #pragma omp loop bind(teams) // expected-error{{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp teams |
| { |
| #pragma omp loop bind(teams) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| |
| #pragma omp loop bind(teams) reduction(+:total) // expected-error{{'reduction' clause not allowed with '#pragma omp loop bind(teams)'}} |
| for (int j = 0 ; j < NNN ; j++) { |
| total+=aaa[j]; |
| } |
| } |
| |
| #pragma omp teams num_teams(8) thread_limit(256) |
| #pragma omp distribute parallel for dist_schedule(static, 1024) \ |
| schedule(static, 64) |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(teams) // expected-error{{'distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}} |
| for (int j = 0; j < NNN; j++) { |
| aaa2[i][j] = i+j; |
| } |
| } |
| |
| #pragma omp teams |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(thread) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| |
| #pragma omp teams loop |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| |
| #pragma omp teams loop |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(teams) // expected-error{{region cannot be closely nested inside 'teams loop' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| } |
| |
| void thread_loop() { |
| #pragma omp parallel |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(thread) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| |
| #pragma omp teams |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(thread) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| } |
| |
| void parallel_for_with_loop_teams_bind(){ |
| #pragma omp parallel for |
| for (int i = 0; i < NNN; i++) { |
| #pragma omp loop bind(teams) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| } |
| |
| void orphan_loops() { |
| #pragma omp loop // expected-error{{expected 'bind' clause for 'loop' construct without an enclosing OpenMP construct}} |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| |
| #pragma omp loop bind(parallel) |
| for (int j = 0 ; j < NNN ; j++) { |
| aaa[j] = j*NNN; |
| } |
| |
| #pragma omp loop bind(teams) |
| for (int i = 0; i < NNN; i++) { |
| aaa[i] = i+i*NNN; |
| } |
| |
| #pragma omp loop bind(thread) |
| for (int i = 0; i < NNN; i++) { |
| aaa[i] = i+i*NNN; |
| } |
| } |
| |
| int main(int argc, char *argv[]) { |
| parallel_loop(); |
| teams_loop(); |
| thread_loop(); |
| parallel_for_with_loop_teams_bind(); |
| orphan_loops(); |
| } |
| |
| #endif |