From: Alexey Bataev Date: Thu, 9 Nov 2017 17:01:35 +0000 (+0000) Subject: [OPENMP] Treat '#pragma omp target parallel for simd' as simd directive. X-Git-Tag: llvmorg-6.0.0-rc1~3773 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9a5e64f56acb8d788a08b8e1298a51b444ab5860;p=platform%2Fupstream%2Fllvm.git [OPENMP] Treat '#pragma omp target parallel for simd' as simd directive. `#pragma omp target parallel for simd` mistakenly was not treated as a simd directive, fixed this problem. llvm-svn: 317811 --- diff --git a/clang/lib/Basic/OpenMPKinds.cpp b/clang/lib/Basic/OpenMPKinds.cpp index b5fc1f1..9df5626 100644 --- a/clang/lib/Basic/OpenMPKinds.cpp +++ b/clang/lib/Basic/OpenMPKinds.cpp @@ -829,7 +829,8 @@ bool clang::isOpenMPSimdDirective(OpenMPDirectiveKind DKind) { DKind == OMPD_teams_distribute_simd || DKind == OMPD_teams_distribute_parallel_for_simd || DKind == OMPD_target_teams_distribute_parallel_for_simd || - DKind == OMPD_target_teams_distribute_simd; + DKind == OMPD_target_teams_distribute_simd || + DKind == OMPD_target_parallel_for_simd; } bool clang::isOpenMPNestingDistributeDirective(OpenMPDirectiveKind Kind) { diff --git a/clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp b/clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp index 82d72c3..8f0ed97 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp @@ -77,14 +77,14 @@ T tmain(T argc, T *argv) { a = 2; // CHECK-NEXT: for (T i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; -#pragma omp target parallel for simd private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (parallel :argc) num_threads(N) default(shared) shared(e) reduction(+ : h) +#pragma omp target parallel for simd private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered if (parallel :argc) num_threads(N) default(shared) shared(e) reduction(+ : h) for (int i = 0; i < 2; ++i) for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j) foo(); - // CHECK-NEXT: #pragma omp target parallel for simd private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(parallel: argc) num_threads(N) default(shared) shared(e) reduction(+: h) + // CHECK-NEXT: #pragma omp target parallel for simd private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered if(parallel: argc) num_threads(N) default(shared) shared(e) reduction(+: h) // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: for (int j = 0; j < 2; ++j) // CHECK-NEXT: for (int j = 0; j < 2; ++j) diff --git a/clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp index 9397314..9ad255f 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp @@ -125,11 +125,11 @@ int foomain(int argc, char **argv) { foo(); #pragma omp parallel private(i) #pragma omp target parallel for simd firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} + for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} foo(); #pragma omp parallel reduction(+ : i) #pragma omp target parallel for simd firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} + for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} foo(); return 0; } @@ -219,7 +219,7 @@ int main(int argc, char **argv) { for (i = 0; i < argc; ++i) foo(); #pragma omp target parallel for simd firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} + for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} foo(); #pragma omp parallel shared(xa) #pragma omp target parallel for simd firstprivate(xa) // OK: may be firstprivate @@ -246,11 +246,11 @@ int main(int argc, char **argv) { } #pragma omp parallel private(i) #pragma omp target parallel for simd firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} + for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} foo(); #pragma omp parallel reduction(+ : i) #pragma omp target parallel for simd firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} + for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} foo(); static int si; #pragma omp target parallel for simd firstprivate(si) // OK diff --git a/clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp index b41dc87..313192d 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp @@ -209,6 +209,8 @@ int main(int argc, char **argv) { #pragma omp target parallel for simd private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}} for (i = 0; i < argc; ++i) foo(); +// expected-note@+2 {{defined as lastprivate}} +// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be lastprivate, predetermined as linear}} #pragma omp target parallel for simd lastprivate(i) for (i = 0; i < argc; ++i) foo(); diff --git a/clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp index ed184a5..f07f19e 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp @@ -238,27 +238,29 @@ int test_iteration_spaces() { c[ii] = a[ii]; // expected-note@+2 {{defined as firstprivate}} -// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} +// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as linear}} #pragma omp target parallel for simd firstprivate(ii) for (ii = 0; ii < 10; ii++) c[ii] = a[ii]; -// expected-note@+2 {{defined as linear}} -// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be linear, predetermined as private}} #pragma omp target parallel for simd linear(ii) for (ii = 0; ii < 10; ii++) c[ii] = a[ii]; +// expected-note@+2 {{defined as private}} +// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be private, predetermined as linear}} #pragma omp target parallel for simd private(ii) for (ii = 0; ii < 10; ii++) c[ii] = a[ii]; +// expected-note@+2 {{defined as lastprivate}} +// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be lastprivate, predetermined as linear}} #pragma omp target parallel for simd lastprivate(ii) for (ii = 0; ii < 10; ii++) c[ii] = a[ii]; { -// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be threadprivate or thread local, predetermined as private}} +// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be threadprivate or thread local, predetermined as linear}} #pragma omp target parallel for simd for (sii = 0; sii < 10; sii += 1) c[sii] = a[sii]; @@ -585,15 +587,15 @@ void test_loop_eh() { #pragma omp target parallel for simd for (int i = 0; i < 10; i++) { c[i] = a[i] + b[i]; - try { + try { // expected-error {{'try' statement cannot be used in OpenMP simd region}} for (int j = 0; j < 10; ++j) { if (a[i] > b[j]) - throw a[i]; + throw a[i]; // expected-error {{'throw' statement cannot be used in OpenMP simd region}} } - throw a[i]; + throw a[i]; // expected-error {{'throw' statement cannot be used in OpenMP simd region}} } catch (float f) { if (f > 0.1) - throw a[i]; + throw a[i]; // expected-error {{'throw' statement cannot be used in OpenMP simd region}} return; // expected-error {{cannot return from OpenMP region}} } switch (i) { @@ -605,7 +607,7 @@ void test_loop_eh() { } for (int j = 0; j < 10; j++) { if (c[i] > 10) - throw c[i]; + throw c[i]; // expected-error {{'throw' statement cannot be used in OpenMP simd region}} } } if (c[9] > 10) diff --git a/clang/test/OpenMP/target_parallel_for_simd_misc_messages.c b/clang/test/OpenMP/target_parallel_for_simd_misc_messages.c index 2adc6f8..f2574a3 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_misc_messages.c +++ b/clang/test/OpenMP/target_parallel_for_simd_misc_messages.c @@ -166,7 +166,7 @@ void test_collapse() { // expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}} for (int j = 0; j < 16; ++j) // expected-error@+2 2 {{reduction variable must be shared}} -// expected-error@+1 {{region cannot be closely nested inside 'target parallel for simd' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} +// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} #pragma omp for reduction(+ : i, j) for (int k = 0; k < 16; ++k) i += j; diff --git a/clang/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp index 70a3b4e..065d8151 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp @@ -6,7 +6,7 @@ void foo() { } #if __cplusplus >= 201103L - // expected-note@+2 4 {{declared here}} + // expected-note@+2 2 {{declared here}} #endif bool foobool(int argc) { return argc; @@ -15,7 +15,7 @@ bool foobool(int argc) { struct S1; // expected-note {{declared here}} template // expected-note {{declared here}} -T tmain(T argc, S **argv) { //expected-note 2 {{declared here}} +T tmain(T argc, S **argv) { int j; // expected-note {{declared here}} #pragma omp target parallel for simd ordered for (int i = ST; i < N; i++) @@ -26,28 +26,26 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here} #pragma omp target parallel for simd ordered() // expected-error {{expected expression}} for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; -// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} -// expected-error@+2 2 {{expression is not an integral constant expression}} -// expected-note@+1 2 {{read of non-const variable 'argc' is not allowed in a constant expression}} +// expected-error@+2 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} #pragma omp target parallel for simd ordered(argc for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; -// expected-error@+1 2 {{argument to 'ordered' clause must be a strictly positive integer value}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} #pragma omp target parallel for simd ordered(ST // expected-error {{expected ')'}} expected-note {{to match this '('}} for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} #pragma omp target parallel for simd ordered(1)) // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}} for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; -#pragma omp target parallel for simd ordered((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'ordered' clause}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered((ST > 0) ? 1 + ST : 2) for (int i = ST; i < N; i++) - argv[0][i] = argv[0][i] - argv[0][i - ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp target parallel for simd', but found only 1}} -#if __cplusplus >= 201103L - // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}} -#endif -// expected-error@+3 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}} -// expected-error@+2 2 {{argument to 'ordered' clause must be a strictly positive integer value}} -// expected-error@+1 2 {{expression is not an integral constant expression}} + argv[0][i] = argv[0][i] - argv[0][i - ST]; +// expected-error@+3 2 {{argument to 'ordered' clause must be a strictly positive integer value}} +// expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} #pragma omp target parallel for simd ordered(foobool(argc)), ordered(true), ordered(-5) for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; @@ -59,14 +57,17 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here} #pragma omp target parallel for simd ordered(j = 2) // expected-error {{expected ')'}} expected-note {{to match this '('}} for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} #pragma omp target parallel for simd ordered(1) for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; -#pragma omp target parallel for simd ordered(N) // expected-error {{argument to 'ordered' clause must be a strictly positive integer value}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered(N) for (T i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i - ST]; -#pragma omp target parallel for simd ordered(2) // expected-note {{as specified in 'ordered' clause}} - foo(); // expected-error {{expected 2 for loops after '#pragma omp target parallel for simd'}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered(2) + foo(); return argc; } @@ -81,12 +82,14 @@ int main(int argc, char **argv) { #pragma omp target parallel for simd ordered() // expected-error {{expected expression}} for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i - 4]; -#pragma omp target parallel for simd ordered(4 // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{as specified in 'ordered' clause}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered(4 // expected-error {{expected ')'}} expected-note {{to match this '('}} for (int i = 4; i < 12; i++) - argv[0][i] = argv[0][i] - argv[0][i - 4]; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}} -#pragma omp target parallel for simd ordered(2 + 2)) // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}} expected-note {{as specified in 'ordered' clause}} + argv[0][i] = argv[0][i] - argv[0][i - 4]; +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered(2 + 2)) // expected-warning {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}} for (int i = 4; i < 12; i++) - argv[0][i] = argv[0][i] - argv[0][i - 4]; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}} + argv[0][i] = argv[0][i] - argv[0][i - 4]; #if __cplusplus >= 201103L // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}} #endif @@ -110,13 +113,12 @@ int main(int argc, char **argv) { #pragma omp target parallel for simd ordered(j = 2) // expected-error {{expected ')'}} expected-note {{to match this '('}} for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i - 4]; -// expected-error@+3 {{statement after '#pragma omp target parallel for simd' must be a for loop}} -// expected-note@+1 {{in instantiation of function template specialization 'tmain' requested here}} +// expected-error@+2 {{statement after '#pragma omp target parallel for simd' must be a for loop}} #pragma omp target parallel for simd ordered(ordered(tmain < int, char, -1, -2 > (argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}} foo(); -#pragma omp target parallel for simd ordered(2) // expected-note {{as specified in 'ordered' clause}} - foo(); // expected-error {{expected 2 for loops after '#pragma omp target parallel for simd'}} - // expected-note@+1 {{in instantiation of function template specialization 'tmain' requested here}} +// expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}} +#pragma omp target parallel for simd ordered(2) + foo(); return tmain(argc, argv); }