brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · becd1f4 Raw
232 lines · cpp
1#ifndef HEADER2#define HEADER3// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -verify %s4 5#define NNN 506int aaa[NNN];7int aaa2[NNN][NNN];8 9void parallel_loop() {10  #pragma omp parallel11  {12     #pragma omp loop13     for (int j = 0 ; j < NNN ; j++) {14       aaa[j] = j*NNN;15     }16   }17 18  #pragma omp parallel for19  for (int i = 0 ; i < NNN ; i++) {20    #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?}}21    for (int j = 0 ; j < NNN ; j++) {22      aaa2[i][j] = i+j;23    }24  }25 26  #pragma omp parallel27  #pragma omp for nowait28  for (int i = 0 ; i < NNN ; i++) {29    #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?}}30    for (int j = 0 ; j < NNN ; j++) {31      aaa2[i][j] = i+j;32    }33  }34 35  #pragma omp parallel for36  for (int i = 0 ; i < NNN ; i++) {37    #pragma omp nothing38    #pragma omp loop39    for (int j = 0 ; j < NNN ; j++) {40      aaa2[i][j] = i+j;41    }42  }43 44  #pragma omp target teams distribute parallel for45  for (int i = 0 ; i < NNN ; i++) {46    #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?}}47    for (int j = 0 ; j < NNN ; j++) {48      aaa2[i][j] = i+j;49    }50  }51 52  #pragma omp target parallel53  for (int i = 0 ; i < NNN ; i++) {54    #pragma omp loop bind(parallel)55    for (int j = 0 ; j < NNN ; j++) {56      aaa2[i][j] = i+j;57    }58  }59 60  #pragma omp parallel for61  for (int i = 0; i < 100; ++i) {62    #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?}}63    for (int i = 0 ; i < NNN ; i++) {64      #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?}}65      for (int j = 0 ; j < NNN ; j++) {66        aaa[j] = j*NNN;67      }68    }69  }70 71  #pragma omp parallel72  {73     #pragma omp sections74     {75        for (int i = 0 ; i < NNN ; i++) {76          #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?}}77          for (int j = 0 ; j < NNN ; j++) {78            aaa2[i][j] = i+j;79          }80        }81 82        #pragma omp section83	{84          aaa[NNN-1] = NNN;85        }86     }87  }88}89 90void teams_loop() {91  int var1;92  int total = 0;93 94  #pragma omp teams95  {96     #pragma omp loop bind(teams)97     for (int j = 0 ; j < NNN ; j++) {98       aaa[j] = j*NNN;99     }100 101     #pragma omp loop bind(teams) collapse(2) private(var1)102     for (int i = 0 ; i < 3 ; i++) {103       for (int j = 0 ; j < NNN ; j++) {104         var1 += aaa[j];105       }106     }107   }108 109  #pragma omp target teams110  for (int i = 0 ; i < NNN ; i++) {111    #pragma omp loop bind(teams)112    for (int j = 0 ; j < NNN ; j++) {113      aaa2[i][j] = i+j;114    }115  }116 117  #pragma omp target teams distribute parallel for118  for (int i = 0 ; i < NNN ; i++) {119    #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?}}120    for (int j = 0 ; j < NNN ; j++) {121      aaa2[i][j] = i+j;122    }123  }124 125  #pragma omp teams126  {127     #pragma omp loop bind(teams)128     for (int j = 0 ; j < NNN ; j++) {129       aaa[j] = j*NNN;130     }131 132     #pragma omp loop bind(teams) reduction(+:total) // expected-error{{'reduction' clause not allowed with '#pragma omp loop bind(teams)'}}133     for (int j = 0 ; j < NNN ; j++) {134       total+=aaa[j];135     }136   }137 138  #pragma omp teams num_teams(8) thread_limit(256)139  #pragma omp distribute parallel for dist_schedule(static, 1024) \140                                      schedule(static, 64)141  for (int i = 0; i < NNN; i++) {142    #pragma omp loop bind(teams) // expected-error{{'distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}}143    for (int j = 0; j < NNN; j++) {144      aaa2[i][j] = i+j;145    }146  }147 148  #pragma omp teams149  for (int i = 0; i < NNN; i++) {150    #pragma omp loop bind(thread)151    for (int j = 0 ; j < NNN ; j++) {152      aaa[i] = i+i*NNN;153    }154  }155 156  #pragma omp teams loop157  for (int i = 0; i < NNN; i++) {158    #pragma omp loop159    for (int j = 0 ; j < NNN ; j++) {160      aaa[i] = i+i*NNN;161    }162  }163 164  #pragma omp teams loop165  for (int i = 0; i < NNN; i++) {166    #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?}}167    for (int j = 0 ; j < NNN ; j++) {168      aaa[i] = i+i*NNN;169    }170  }171}172 173void thread_loop() {174  #pragma omp parallel175  for (int i = 0; i < NNN; i++) {176    #pragma omp loop bind(thread)177    for (int j = 0 ; j < NNN ; j++) {178      aaa[i] = i+i*NNN;179    }180  }181 182  #pragma omp teams183  for (int i = 0; i < NNN; i++) {184    #pragma omp loop bind(thread)185    for (int j = 0 ; j < NNN ; j++) {186      aaa[i] = i+i*NNN;187    }188  }189}190  191void parallel_for_with_loop_teams_bind(){192  #pragma omp parallel for193  for (int i = 0; i < NNN; i++) {194    #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?}}195    for (int j = 0 ; j < NNN ; j++) {196      aaa[i] = i+i*NNN;197    }198  }199}200 201void orphan_loops() {202  #pragma omp loop  // expected-error{{expected 'bind' clause for 'loop' construct without an enclosing OpenMP construct}}203  for (int j = 0 ; j < NNN ; j++) {204    aaa[j] = j*NNN;205  }206 207  #pragma omp loop bind(parallel)208  for (int j = 0 ; j < NNN ; j++) {209    aaa[j] = j*NNN;210  }211 212  #pragma omp loop bind(teams)213  for (int i = 0; i < NNN; i++) {214    aaa[i] = i+i*NNN;215  }216 217  #pragma omp loop bind(thread)218  for (int i = 0; i < NNN; i++) {219    aaa[i] = i+i*NNN;220  }221}222 223int main(int argc, char *argv[]) {224  parallel_loop();225  teams_loop();226  thread_loop();227  parallel_for_with_loop_teams_bind();228  orphan_loops();229}230 231#endif232