summaryrefslogtreecommitdiffstats
path: root/clang/test/OpenMP/nesting_of_regions.cpp
diff options
context:
space:
mode:
authorArpith Chacko Jacob <acjacob@us.ibm.com>2016-01-26 18:48:41 +0000
committerArpith Chacko Jacob <acjacob@us.ibm.com>2016-01-26 18:48:41 +0000
commite955b3d3fe12a05e7639aa336d6945fa9427c0dc (patch)
tree3423de8c95bccda8edcb7065c05cd525a8acc621 /clang/test/OpenMP/nesting_of_regions.cpp
parent6ac3f739ca4cd90b41388cc50070a6bca85b6842 (diff)
downloadbcm5719-llvm-e955b3d3fe12a05e7639aa336d6945fa9427c0dc.tar.gz
bcm5719-llvm-e955b3d3fe12a05e7639aa336d6945fa9427c0dc.zip
[OpenMP] Parsing + sema for target parallel directive.
Summary: This patch adds parsing + sema for the target parallel directive and its clauses along with testcases. Reviewers: ABataev Differential Revision: http://reviews.llvm.org/D16553 Rebased to current trunk and updated test cases. llvm-svn: 258832
Diffstat (limited to 'clang/test/OpenMP/nesting_of_regions.cpp')
-rw-r--r--clang/test/OpenMP/nesting_of_regions.cpp459
1 files changed, 459 insertions, 0 deletions
diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp
index adb59b0d39e..ebab809c562 100644
--- a/clang/test/OpenMP/nesting_of_regions.cpp
+++ b/clang/test/OpenMP/nesting_of_regions.cpp
@@ -97,6 +97,11 @@ void foo() {
}
#pragma omp parallel
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -246,6 +251,11 @@ void foo() {
}
#pragma omp simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -418,6 +428,11 @@ void foo() {
}
#pragma omp for
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp for
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -567,6 +582,11 @@ void foo() {
}
#pragma omp for simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp for simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -746,6 +766,11 @@ void foo() {
}
#pragma omp sections
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp sections
+ {
#pragma omp target enter data map(to: a)
}
#pragma omp sections
@@ -959,6 +984,12 @@ void foo() {
#pragma omp sections
{
#pragma omp section
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp sections
+ {
+#pragma omp section
{
#pragma omp target enter data map(to: a)
++a;
@@ -1129,6 +1160,11 @@ void foo() {
}
#pragma omp single
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp single
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -1291,6 +1327,11 @@ void foo() {
}
#pragma omp master
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp master
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -1467,6 +1508,11 @@ void foo() {
}
#pragma omp critical
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp critical
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -1644,6 +1690,11 @@ void foo() {
}
#pragma omp parallel for
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -1821,6 +1872,11 @@ void foo() {
}
#pragma omp parallel for simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp parallel for simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -1989,6 +2045,11 @@ void foo() {
}
#pragma omp parallel sections
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel sections
+ {
#pragma omp target enter data map(to: a)
}
#pragma omp parallel sections
@@ -2101,6 +2162,11 @@ void foo() {
}
#pragma omp task
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp task
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -2273,6 +2339,11 @@ void foo() {
}
#pragma omp ordered
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp ordered
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -2464,6 +2535,13 @@ void foo() {
// expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
// expected-note@+1 {{expected an expression statement}}
{
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
+ ++a;
+ }
+#pragma omp atomic
+ // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
+ // expected-note@+1 {{expected an expression statement}}
+ {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
++a;
}
@@ -2593,6 +2671,11 @@ void foo() {
}
#pragma omp target
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+ {
#pragma omp teams
++a;
}
@@ -2623,6 +2706,136 @@ void foo() {
#pragma omp target exit data map(from: a)
}
+// TARGET PARALLEL DIRECTIVE
+#pragma omp target parallel
+#pragma omp parallel
+ bar();
+#pragma omp target parallel
+#pragma omp for
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp for simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp sections
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp single
+ bar();
+
+#pragma omp target parallel
+#pragma omp master
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp critical
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp parallel for simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp parallel sections
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp task
+ {
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskyield
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp barrier
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskwait
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp flush
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp atomic
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target parallel
+ {
+ ++a;
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target enter data map(to: a)
+ }
+#pragma omp target parallel
+ {
+#pragma omp target exit data map(from: a)
+ }
+
// TEAMS DIRECTIVE
#pragma omp target
#pragma omp teams
@@ -2739,6 +2952,12 @@ void foo() {
#pragma omp target
#pragma omp teams
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+#pragma omp teams
+ {
#pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
++a;
}
@@ -2916,6 +3135,11 @@ void foo() {
}
#pragma omp taskloop
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -3120,6 +3344,13 @@ void foo() {
#pragma omp teams
#pragma omp distribute
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -3233,6 +3464,11 @@ void foo() {
}
#pragma omp parallel
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -3375,6 +3611,11 @@ void foo() {
}
#pragma omp simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -3537,6 +3778,11 @@ void foo() {
}
#pragma omp for
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp for
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -3679,6 +3925,11 @@ void foo() {
}
#pragma omp for simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp for simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -3833,6 +4084,11 @@ void foo() {
}
#pragma omp sections
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp sections
+ {
#pragma omp target enter data map(to: a)
}
#pragma omp sections
@@ -4051,6 +4307,14 @@ void foo() {
{
#pragma omp section
{
+#pragma omp target parallel
+ ++a;
+ }
+ }
+#pragma omp sections
+ {
+#pragma omp section
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -4214,6 +4478,11 @@ void foo() {
}
#pragma omp single
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp single
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -4376,6 +4645,11 @@ void foo() {
}
#pragma omp master
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp master
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -4557,6 +4831,11 @@ void foo() {
}
#pragma omp critical
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp critical
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -4734,6 +5013,11 @@ void foo() {
}
#pragma omp parallel for
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -4911,6 +5195,11 @@ void foo() {
}
#pragma omp parallel for simd
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ ++a;
+ }
+#pragma omp parallel for simd
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
@@ -5075,6 +5364,11 @@ void foo() {
}
#pragma omp parallel sections
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp parallel sections
+ {
#pragma omp target enter data map(to: a)
}
#pragma omp parallel sections
@@ -5186,6 +5480,11 @@ void foo() {
}
#pragma omp task
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp task
+ {
#pragma omp target enter data map(to: a)
++a;
}
@@ -5377,6 +5676,13 @@ void foo() {
// expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
// expected-note@+1 {{expected an expression statement}}
{
+#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
+ ++a;
+ }
+#pragma omp atomic
+ // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
+ // expected-note@+1 {{expected an expression statement}}
+ {
#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
++a;
}
@@ -5506,6 +5812,11 @@ void foo() {
}
#pragma omp target
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+ {
#pragma omp target enter data map(to: a)
}
#pragma omp target
@@ -5536,6 +5847,136 @@ void foo() {
;
}
+// TARGET PARALLEL DIRECTIVE
+#pragma omp target parallel
+#pragma omp parallel
+ bar();
+#pragma omp target parallel
+#pragma omp for
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp for simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp sections
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp single
+ bar();
+
+#pragma omp target parallel
+#pragma omp master
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp critical
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp parallel for simd
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target parallel
+#pragma omp parallel sections
+ {
+ bar();
+ }
+#pragma omp target parallel
+#pragma omp task
+ {
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskyield
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp barrier
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskwait
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp flush
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
+ bar();
+ }
+#pragma omp target parallel
+ {
+#pragma omp atomic
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target parallel
+ {
+ ++a;
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target parallel
+ {
+#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target parallel
+ {
+#pragma omp target enter data map(to: a)
+ }
+#pragma omp target parallel
+ {
+#pragma omp target exit data map(from: a)
+ }
+
// TEAMS DIRECTIVE
#pragma omp target
#pragma omp teams
@@ -5652,6 +6093,12 @@ void foo() {
#pragma omp target
#pragma omp teams
{
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+#pragma omp teams
+ {
#pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
}
#pragma omp target
@@ -5827,6 +6274,11 @@ void foo() {
}
#pragma omp taskloop
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i) {
#pragma omp target enter data map(to: a)
++a;
}
@@ -6032,6 +6484,13 @@ void foo() {
#pragma omp teams
#pragma omp distribute
for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel
+ ++a;
+ }
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute
+ for (int i = 0; i < 10; ++i) {
#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
++a;
}
OpenPOWER on IntegriCloud