summaryrefslogtreecommitdiffstats
path: root/clang/test/OpenMP/nesting_of_regions.cpp
diff options
context:
space:
mode:
authorKelvin Li <kkwli0@gmail.com>2016-12-25 04:52:54 +0000
committerKelvin Li <kkwli0@gmail.com>2016-12-25 04:52:54 +0000
commit83c451e9986e2d2ccd28395595465d69f0d4db6e (patch)
tree75c1356a97696a372040aaf0cf1364b8b9f1ee4c /clang/test/OpenMP/nesting_of_regions.cpp
parent690952d15e6e21cd42a7c99e0941dc983e608866 (diff)
downloadbcm5719-llvm-83c451e9986e2d2ccd28395595465d69f0d4db6e.tar.gz
bcm5719-llvm-83c451e9986e2d2ccd28395595465d69f0d4db6e.zip
[OpenMP] Sema and parsing for 'target teams distribute' pragma
This patch is to implement sema and parsing for 'target teams distribute' pragma. Differential Revision: https://reviews.llvm.org/D28015 llvm-svn: 290508
Diffstat (limited to 'clang/test/OpenMP/nesting_of_regions.cpp')
-rw-r--r--clang/test/OpenMP/nesting_of_regions.cpp828
1 files changed, 825 insertions, 3 deletions
diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp
index b53cf361872..aae02f7fd6d 100644
--- a/clang/test/OpenMP/nesting_of_regions.cpp
+++ b/clang/test/OpenMP/nesting_of_regions.cpp
@@ -190,6 +190,12 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp parallel
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SIMD DIRECTIVE
#pragma omp simd
@@ -417,7 +423,13 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
+
// FOR DIRECTIVE
#pragma omp for
for (int i = 0; i < 10; ++i) {
@@ -657,6 +669,12 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// FOR SIMD DIRECTIVE
#pragma omp for simd
@@ -885,6 +903,12 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// SECTIONS DIRECTIVE
#pragma omp sections
@@ -1130,6 +1154,12 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp sections
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SECTION DIRECTIVE
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
@@ -1438,6 +1468,13 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp sections
+ {
+#pragma omp section
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SINGLE DIRECTIVE
#pragma omp single
@@ -1669,6 +1706,12 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp single
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// MASTER DIRECTIVE
#pragma omp master
@@ -1900,6 +1943,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp master
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// CRITICAL DIRECTIVE
#pragma omp critical
@@ -2145,6 +2194,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp critical
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// PARALLEL FOR DIRECTIVE
#pragma omp parallel for
@@ -2390,6 +2445,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// PARALLEL FOR SIMD DIRECTIVE
#pragma omp parallel for simd
@@ -2636,6 +2697,12 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// PARALLEL SECTIONS DIRECTIVE
#pragma omp parallel sections
@@ -2870,6 +2937,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp parallel sections
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TASK DIRECTIVE
#pragma omp task
@@ -3051,6 +3124,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp task
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// ORDERED DIRECTIVE
#pragma omp ordered
@@ -3303,6 +3382,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp ordered
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// ATOMIC DIRECTIVE
#pragma omp atomic
@@ -3595,6 +3680,14 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET DIRECTIVE
#pragma omp target
@@ -3793,6 +3886,12 @@ void foo() {
for (int i = 0; i < 10; ++i)
;
}
+#pragma omp target
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET PARALLEL DIRECTIVE
#pragma omp target parallel
@@ -3984,6 +4083,12 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
a++;
}
+#pragma omp target parallel
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET PARALLEL FOR DIRECTIVE
#pragma omp target parallel for
@@ -4229,6 +4334,12 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
a++;
}
+#pragma omp target parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// TEAMS DIRECTIVE
#pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -4470,6 +4581,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TASKLOOP DIRECTIVE
#pragma omp taskloop
@@ -4706,6 +4824,12 @@ void foo() {
#pragma omp target teams // OK
++a;
}
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int j = 0; j < 10; ++j)
+ ++a;
+ }
// DISTRIBUTE DIRECTIVE
#pragma omp target
@@ -4978,6 +5102,14 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// DISTRIBUTE PARALLEL FOR DIRECTIVE
#pragma omp target
@@ -5258,6 +5390,14 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
#pragma omp target
@@ -5546,6 +5686,14 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TARGET SIMD DIRECTIVE
#pragma omp target simd
@@ -5752,7 +5900,7 @@ void foo() {
++a;
}
- // TEAMS DISTRIBUTE DIRECTIVE
+// TEAMS DISTRIBUTE DIRECTIVE
#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
for (int i = 0; i < 10; ++i)
;
@@ -5994,7 +6142,7 @@ void foo() {
++a;
}
- // TEAMS DISTRIBUTE DIRECTIVE
+// TEAMS DISTRIBUTE DIRECTIVE
#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
for (int i = 0; i < 10; ++i)
;
@@ -6248,6 +6396,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE SIMD DIRECTIVE
#pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -6503,6 +6658,13 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
#pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -6758,6 +6920,13 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute parallel for simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
#pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -7013,6 +7182,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TARGET TEAMS DIRECTIVE
#pragma omp target teams
@@ -7210,6 +7386,237 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
a++;
}
+#pragma omp target teams
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+
+// TARGET TEAMS DISTRIBUTE DIRECTIVE
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp for // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp for simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp sections // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp single // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp master // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp critical // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel // OK
+ {
+#pragma omp single
+ {
+ bar();
+ }
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel for // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel for simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel sections // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp task // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp taskyield // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp barrier // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp taskwait // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp flush // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp atomic // OK
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ a++;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
}
@@ -7399,6 +7806,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp parallel
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SIMD DIRECTIVE
#pragma omp simd
@@ -7610,6 +8023,12 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// FOR DIRECTIVE
#pragma omp for
@@ -7841,6 +8260,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// FOR SIMD DIRECTIVE
#pragma omp for simd
@@ -8052,6 +8477,12 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// SECTIONS DIRECTIVE
#pragma omp sections
@@ -8272,6 +8703,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp sections
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SECTION DIRECTIVE
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
@@ -8590,6 +9027,13 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp sections
+ {
+#pragma omp section
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// SINGLE DIRECTIVE
#pragma omp single
@@ -8811,6 +9255,12 @@ void foo() {
#pragma omp target teams // oK
a++;
}
+#pragma omp single
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// MASTER DIRECTIVE
#pragma omp master
@@ -9042,6 +9492,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp master
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// CRITICAL DIRECTIVE
#pragma omp critical
@@ -9292,6 +9748,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp critical
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// PARALLEL FOR DIRECTIVE
#pragma omp parallel for
@@ -9538,6 +10000,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// PARALLEL FOR SIMD DIRECTIVE
#pragma omp parallel for simd
@@ -9784,6 +10252,12 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// PARALLEL SECTIONS DIRECTIVE
#pragma omp parallel sections
@@ -10014,6 +10488,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp parallel sections
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TASK DIRECTIVE
#pragma omp task
@@ -10194,6 +10674,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp task
+ {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// ATOMIC DIRECTIVE
#pragma omp atomic
@@ -10485,6 +10971,14 @@ void foo() {
#pragma omp target teams // 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 teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET DIRECTIVE
#pragma omp target
@@ -10679,6 +11173,12 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
a++;
}
+#pragma omp target
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET PARALLEL DIRECTIVE
#pragma omp target parallel
@@ -10870,6 +11370,12 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
a++;
}
+#pragma omp target parallel
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET PARALLEL FOR DIRECTIVE
#pragma omp target parallel for
@@ -11116,6 +11622,12 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
a++;
}
+#pragma omp target parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
+ for (int j = 0; j < 10; ++j)
+ ;
+ }
// TEAMS DIRECTIVE
#pragma omp target
@@ -11359,6 +11871,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TASKLOOP DIRECTIVE
#pragma omp taskloop
@@ -11595,6 +12114,12 @@ void foo() {
#pragma omp target teams // OK
a++;
}
+#pragma omp taskloop
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// DISTRIBUTE DIRECTIVE
#pragma omp target
@@ -11876,6 +12401,14 @@ void foo() {
for (int i = 0; i < 10; ++i)
++a;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// DISTRIBUTE PARALLEL FOR DIRECTIVE
#pragma omp target
@@ -12165,6 +12698,14 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
++a;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
#pragma omp target
@@ -12445,6 +12986,14 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// DISTRIBUTE SIMD DIRECTIVE
#pragma omp target
@@ -12725,6 +13274,14 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
a++;
}
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TARGET SIMD DIRECTIVE
#pragma omp target simd
@@ -12935,6 +13492,12 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
a++;
}
+#pragma omp target simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
// TEAMS DISTRIBUTE DIRECTIVE
#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -13190,6 +13753,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE SIMD DIRECTIVE
#pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -13445,6 +14015,13 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
#pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -13700,6 +14277,13 @@ void foo() {
#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute parallel for simd
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
#pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
@@ -13955,6 +14539,13 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
++a;
}
+#pragma omp target
+#pragma omp teams distribute parallel for
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
// TARGET TEAMS DIRECTIVE
#pragma omp target teams
@@ -14152,6 +14743,237 @@ void foo() {
#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
a++;
}
+#pragma omp target teams
+ {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+
+// TARGET TEAMS DISTRIBUTE DIRECTIVE
+#pragma omp target teams distribute // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp for // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp for simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp sections // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp single // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp master // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp critical // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel // OK
+ {
+#pragma omp single
+ {
+ bar();
+ }
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel for // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel for simd // OK
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp parallel sections // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp task // OK
+ {
+ bar();
+ }
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp taskyield // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp barrier // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp taskwait // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp flush // OK
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
+ bar();
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp atomic // OK
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ ++a;
+ }
+#pragma omp target teams distribute
+ for (int i = 0; i < 10; ++i) {
+#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
+ for (int i = 0; i < 10; ++i)
+ ++a;
+ }
return foo<int>();
}
OpenPOWER on IntegriCloud