Author: abataev Date: Thu Nov 9 09:01:35 2017 New Revision: 317811 URL: http://llvm.org/viewvc/llvm-project?rev=317811&view=rev Log: [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. Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_ast_print.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_misc_messages.c cfe/trunk/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original) +++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Thu Nov 9 09:01:35 2017 @@ -829,7 +829,8 @@ bool clang::isOpenMPSimdDirective(OpenMP 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) { Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_ast_print.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_ast_print.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_ast_print.cpp (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_ast_print.cpp Thu Nov 9 09:01:35 2017 @@ -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) Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp Thu Nov 9 09:01:35 2017 @@ -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 Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp Thu Nov 9 09:01:35 2017 @@ -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(); Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp Thu Nov 9 09:01:35 2017 @@ -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) Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_misc_messages.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_misc_messages.c?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_misc_messages.c (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_misc_messages.c Thu Nov 9 09:01:35 2017 @@ -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; Modified: cfe/trunk/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp?rev=317811&r1=317810&r2=317811&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp (original) +++ cfe/trunk/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp Thu Nov 9 09:01:35 2017 @@ -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 <class T, typename S, int N, int ST> // 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) { #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) { #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<int, char, -1, -2>' 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<int, char, 1, 0>' 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<int, char, 1, 0>(argc, argv); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits