Skip to content

Commit

Permalink
[OpenMP] Parsing + Sema for nowait clause on target enter data direct…
Browse files Browse the repository at this point in the history
…ive.

Summary:
Accept nowait clause on target enter data directive in sema and add test cases.

Reviewers: ABataev

Differential Revision: http://reviews.llvm.org/D16361

llvm-svn: 258457
  • Loading branch information
arpith-jacob committed Jan 22, 2016
1 parent 2f4758b commit 68b6d5a
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions clang/include/clang/Basic/OpenMPKinds.def
Expand Up @@ -368,6 +368,7 @@ OPENMP_TARGET_DATA_CLAUSE(map)
OPENMP_TARGET_ENTER_DATA_CLAUSE(if)
OPENMP_TARGET_ENTER_DATA_CLAUSE(device)
OPENMP_TARGET_ENTER_DATA_CLAUSE(map)
OPENMP_TARGET_ENTER_DATA_CLAUSE(nowait)

// Clauses allowed for OpenMP directive 'target exit data'.
// TODO More clauses for 'target exit data' directive.
Expand Down
64 changes: 64 additions & 0 deletions clang/test/OpenMP/target_enter_data_ast_print.cpp
Expand Up @@ -27,6 +27,22 @@ T tmain(T argc, T *argv) {

#pragma omp target enter data map(always,alloc: e)

#pragma omp target enter data nowait map(to: i)

#pragma omp target enter data nowait map(to: i) if (target enter data: j > 0)

#pragma omp target enter data map(to: i) if (b) nowait

#pragma omp target enter data map(to: c) nowait

#pragma omp target enter data map(to: c) nowait if(b>e)

#pragma omp target enter data nowait map(alloc: x[0:10], c)

#pragma omp target enter data nowait map(to: c) map(alloc: d)

#pragma omp target enter data nowait map(always,alloc: e)

return 0;
}

Expand All @@ -41,6 +57,14 @@ T tmain(T argc, T *argv) {
// CHECK-NEXT: #pragma omp target enter data map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data map(always,alloc: e)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i) if(target enter data: j > 0)
// CHECK-NEXT: #pragma omp target enter data map(to: i) if(b) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait if(b > e)
// CHECK-NEXT: #pragma omp target enter data nowait map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data nowait map(always,alloc: e)
// CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) {
// CHECK-NEXT: char i, j, b, c, d, e, x[20];
// CHECK-NEXT: i = argc;
Expand All @@ -52,6 +76,14 @@ T tmain(T argc, T *argv) {
// CHECK-NEXT: #pragma omp target enter data map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data map(always,alloc: e)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i) if(target enter data: j > 0)
// CHECK-NEXT: #pragma omp target enter data map(to: i) if(b) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait if(b > e)
// CHECK-NEXT: #pragma omp target enter data nowait map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data nowait map(always,alloc: e)
// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
// CHECK-NEXT: T i, j, b, c, d, e, x[20];
// CHECK-NEXT: i = argc;
Expand All @@ -63,6 +95,14 @@ T tmain(T argc, T *argv) {
// CHECK-NEXT: #pragma omp target enter data map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data map(always,alloc: e)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: i) if(target enter data: j > 0)
// CHECK-NEXT: #pragma omp target enter data map(to: i) if(b) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait if(b > e)
// CHECK-NEXT: #pragma omp target enter data nowait map(alloc: x[0:10],c)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data nowait map(always,alloc: e)

int main (int argc, char **argv) {
int b = argc, c, d, e, f, g, x[20];
Expand Down Expand Up @@ -94,6 +134,30 @@ int main (int argc, char **argv) {
#pragma omp target enter data map(always,alloc: e)
// CHECK-NEXT: #pragma omp target enter data map(always,alloc: e)

#pragma omp target enter data nowait map(to: a)
// CHECK: #pragma omp target enter data nowait map(to: a)

#pragma omp target enter data nowait map(to: a) if (target enter data: b)
// CHECK: #pragma omp target enter data nowait map(to: a) if(target enter data: b)

#pragma omp target enter data map(to: a) if (b > g) nowait
// CHECK: #pragma omp target enter data map(to: a) if(b > g) nowait

#pragma omp target enter data map(to: c) nowait
// CHECK-NEXT: #pragma omp target enter data map(to: c) nowait

#pragma omp target enter data map(alloc: c) nowait if(b>g)
// CHECK-NEXT: #pragma omp target enter data map(alloc: c) nowait if(b > g)

#pragma omp target enter data nowait map(to: x[0:10], c)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: x[0:10],c)

#pragma omp target enter data nowait map(to: c) map(alloc: d)
// CHECK-NEXT: #pragma omp target enter data nowait map(to: c) map(alloc: d)

#pragma omp target enter data nowait map(always,alloc: e)
// CHECK-NEXT: #pragma omp target enter data nowait map(always,alloc: e)

return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
}

Expand Down
17 changes: 17 additions & 0 deletions clang/test/OpenMP/target_enter_data_nowait_messages.cpp
@@ -0,0 +1,17 @@
// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 -o - %s

int main(int argc, char **argv) {
int i;

#pragma omp nowait target enter data map(to: i) // expected-error {{expected an OpenMP directive}}
#pragma omp target nowait enter data map(to: i) // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
#pragma omp target enter nowait data map(to: i) // expected-error {{expected an OpenMP directive}}
#pragma omp target enter data nowait() map(to: i) // expected-warning {{extra tokens at the end of '#pragma omp target enter data' are ignored}} expected-error {{expected at least one map clause for '#pragma omp target enter data'}}
#pragma omp target enter data map(to: i) nowait( // expected-warning {{extra tokens at the end of '#pragma omp target enter data' are ignored}}
#pragma omp target enter data map(to: i) nowait (argc)) // expected-warning {{extra tokens at the end of '#pragma omp target enter data' are ignored}}
#pragma omp target enter data map(to: i) nowait device (-10u)
#pragma omp target enter data map(to: i) nowait (3.14) device (-10u) // expected-warning {{extra tokens at the end of '#pragma omp target enter data' are ignored}}
#pragma omp target enter data map(to: i) nowait nowait // expected-error {{directive '#pragma omp target enter data' cannot contain more than one 'nowait' clause}}
#pragma omp target enter data nowait map(to: i) nowait // expected-error {{directive '#pragma omp target enter data' cannot contain more than one 'nowait' clause}}
return 0;
}

0 comments on commit 68b6d5a

Please sign in to comment.