r317811 - [OPENMP] Treat '#pragma omp target parallel for simd' as simd directive.
Alexey Bataev via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 9 09:01:35 PST 2017
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 at +2 {{defined as lastprivate}}
+// expected-error at +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 at +2 {{defined as firstprivate}}
-// expected-error at +2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}}
+// expected-error at +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 at +2 {{defined as linear}}
-// expected-error at +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 at +2 {{defined as private}}
+// expected-error at +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 at +2 {{defined as lastprivate}}
+// expected-error at +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 at +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 at +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 at +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 at +2 2 {{reduction variable must be shared}}
-// expected-error at +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 at +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 at +2 4 {{declared here}}
+ // expected-note at +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 at +3 {{expected ')'}} expected-note at +3 {{to match this '('}}
-// expected-error at +2 2 {{expression is not an integral constant expression}}
-// expected-note at +1 2 {{read of non-const variable 'argc' is not allowed in a constant expression}}
+// expected-error at +2 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}}
+// expected-error at +1 {{expected ')'}} expected-note at +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 at +1 2 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error at +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 at +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 at +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 at +5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
-#endif
-// expected-error at +3 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}}
-// expected-error at +2 2 {{argument to 'ordered' clause must be a strictly positive integer value}}
-// expected-error at +1 2 {{expression is not an integral constant expression}}
+ argv[0][i] = argv[0][i] - argv[0][i - ST];
+// expected-error at +3 2 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error at +2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}}
+// expected-error at +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 at +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 at +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 at +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 at +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 at +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 at +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 at +3 {{statement after '#pragma omp target parallel for simd' must be a for loop}}
-// expected-note at +1 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}}
+// expected-error at +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 at +1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}}
+// expected-error at +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);
}
More information about the cfe-commits
mailing list