|
@@ -155,6 +155,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SIMD DIRECTIVE
|
|
// SIMD DIRECTIVE
|
|
#pragma omp simd
|
|
#pragma omp simd
|
|
@@ -347,6 +353,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// FOR DIRECTIVE
|
|
// FOR DIRECTIVE
|
|
#pragma omp for
|
|
#pragma omp for
|
|
@@ -552,6 +564,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// FOR SIMD DIRECTIVE
|
|
// FOR SIMD DIRECTIVE
|
|
#pragma omp for simd
|
|
#pragma omp for simd
|
|
@@ -745,6 +763,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SECTIONS DIRECTIVE
|
|
// SECTIONS DIRECTIVE
|
|
#pragma omp sections
|
|
#pragma omp sections
|
|
@@ -955,6 +979,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SECTION DIRECTIVE
|
|
// SECTION DIRECTIVE
|
|
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
|
|
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
|
|
@@ -1222,6 +1252,13 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp section
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SINGLE DIRECTIVE
|
|
// SINGLE DIRECTIVE
|
|
#pragma omp single
|
|
#pragma omp single
|
|
@@ -1418,6 +1455,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp single
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// MASTER DIRECTIVE
|
|
// MASTER DIRECTIVE
|
|
#pragma omp master
|
|
#pragma omp master
|
|
@@ -1614,6 +1657,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp master
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// CRITICAL DIRECTIVE
|
|
// CRITICAL DIRECTIVE
|
|
#pragma omp critical
|
|
#pragma omp critical
|
|
@@ -1824,6 +1873,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp critical
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL FOR DIRECTIVE
|
|
// PARALLEL FOR DIRECTIVE
|
|
#pragma omp parallel for
|
|
#pragma omp parallel for
|
|
@@ -2034,6 +2089,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL FOR SIMD DIRECTIVE
|
|
// PARALLEL FOR SIMD DIRECTIVE
|
|
#pragma omp parallel for simd
|
|
#pragma omp parallel for simd
|
|
@@ -2245,6 +2306,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL SECTIONS DIRECTIVE
|
|
// PARALLEL SECTIONS DIRECTIVE
|
|
#pragma omp parallel sections
|
|
#pragma omp parallel sections
|
|
@@ -2444,6 +2511,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TASK DIRECTIVE
|
|
// TASK DIRECTIVE
|
|
#pragma omp task
|
|
#pragma omp task
|
|
@@ -2590,6 +2663,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp task
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// ORDERED DIRECTIVE
|
|
// ORDERED DIRECTIVE
|
|
#pragma omp ordered
|
|
#pragma omp ordered
|
|
@@ -2807,6 +2886,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp ordered
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// ATOMIC DIRECTIVE
|
|
// ATOMIC DIRECTIVE
|
|
#pragma omp atomic
|
|
#pragma omp atomic
|
|
@@ -3052,6 +3137,14 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#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 simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET DIRECTIVE
|
|
// TARGET DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -3214,6 +3307,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET PARALLEL DIRECTIVE
|
|
// TARGET PARALLEL DIRECTIVE
|
|
#pragma omp target parallel
|
|
#pragma omp target parallel
|
|
@@ -3370,6 +3469,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET PARALLEL FOR DIRECTIVE
|
|
// TARGET PARALLEL FOR DIRECTIVE
|
|
#pragma omp target parallel for
|
|
#pragma omp target parallel for
|
|
@@ -3580,6 +3685,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TEAMS DIRECTIVE
|
|
// TEAMS DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -3778,6 +3889,13 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target simd' directive into a parallel region?}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TASKLOOP DIRECTIVE
|
|
// TASKLOOP DIRECTIVE
|
|
#pragma omp taskloop
|
|
#pragma omp taskloop
|
|
@@ -3979,6 +4097,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
++a;
|
|
++a;
|
|
}
|
|
}
|
|
|
|
+#pragma omp taskloop
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE DIRECTIVE
|
|
// DISTRIBUTE DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -4204,6 +4328,14 @@ void foo() {
|
|
#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
|
|
#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
|
|
++a;
|
|
++a;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE PARALLEL FOR DIRECTIVE
|
|
// DISTRIBUTE PARALLEL FOR DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -4686,99 +4818,294 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
++a;
|
|
++a;
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute parallel for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
|
|
-void foo() {
|
|
|
|
- int a = 0;
|
|
|
|
-// PARALLEL DIRECTIVE
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp for
|
|
|
|
- for (int i = 0; i < 10; ++i)
|
|
|
|
- ;
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp simd
|
|
|
|
- for (int i = 0; i < 10; ++i)
|
|
|
|
- ;
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp for simd
|
|
|
|
- for (int i = 0; i < 10; ++i)
|
|
|
|
- ;
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp sections
|
|
|
|
- {
|
|
|
|
- bar();
|
|
|
|
|
|
+// TARGET SIMD DIRECTIVE
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
|
|
|
|
- {
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp sections
|
|
|
|
- {
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp single
|
|
|
|
- bar();
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp master
|
|
|
|
- bar();
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp critical
|
|
|
|
- bar();
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp parallel for
|
|
|
|
- for (int i = 0; i < 10; ++i)
|
|
|
|
- ;
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp parallel for simd
|
|
|
|
- for (int i = 0; i < 10; ++i)
|
|
|
|
- ;
|
|
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp parallel sections
|
|
|
|
- {
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
-#pragma omp task
|
|
|
|
- {
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp taskyield
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp barrier
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp taskwait
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp flush
|
|
|
|
- bar();
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp ordered // expected-error {{region cannot be closely nested inside '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 simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp atomic
|
|
|
|
- ++a;
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-#pragma omp parallel
|
|
|
|
- {
|
|
|
|
-#pragma omp target
|
|
|
|
- ++a;
|
|
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+#pragma omp single
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp atomic // 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 // 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 parallel // 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 parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target 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;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target exit data map(from: a) // 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 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 update to(a) // 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 distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void foo() {
|
|
|
|
+ int a = 0;
|
|
|
|
+// PARALLEL DIRECTIVE
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp for
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp simd
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp single
|
|
|
|
+ bar();
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp master
|
|
|
|
+ bar();
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp critical
|
|
|
|
+ bar();
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp parallel for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp parallel sections
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+#pragma omp task
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp taskyield
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp barrier
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp taskwait
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp flush
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp atomic
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp target
|
|
|
|
+ ++a;
|
|
}
|
|
}
|
|
#pragma omp parallel
|
|
#pragma omp parallel
|
|
{
|
|
{
|
|
@@ -4839,6 +5166,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SIMD DIRECTIVE
|
|
// SIMD DIRECTIVE
|
|
#pragma omp simd
|
|
#pragma omp simd
|
|
@@ -5015,6 +5348,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// FOR DIRECTIVE
|
|
// FOR DIRECTIVE
|
|
#pragma omp for
|
|
#pragma omp for
|
|
@@ -5211,6 +5550,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// FOR SIMD DIRECTIVE
|
|
// FOR SIMD DIRECTIVE
|
|
#pragma omp for simd
|
|
#pragma omp for simd
|
|
@@ -5387,6 +5732,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SECTIONS DIRECTIVE
|
|
// SECTIONS DIRECTIVE
|
|
#pragma omp sections
|
|
#pragma omp sections
|
|
@@ -5572,6 +5923,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SECTION DIRECTIVE
|
|
// SECTION DIRECTIVE
|
|
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
|
|
#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
|
|
@@ -5849,6 +6206,13 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp section
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// SINGLE DIRECTIVE
|
|
// SINGLE DIRECTIVE
|
|
#pragma omp single
|
|
#pragma omp single
|
|
@@ -6035,6 +6399,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp single
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// MASTER DIRECTIVE
|
|
// MASTER DIRECTIVE
|
|
#pragma omp master
|
|
#pragma omp master
|
|
@@ -6231,6 +6601,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp master
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// CRITICAL DIRECTIVE
|
|
// CRITICAL DIRECTIVE
|
|
#pragma omp critical
|
|
#pragma omp critical
|
|
@@ -6446,6 +6822,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp critical
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL FOR DIRECTIVE
|
|
// PARALLEL FOR DIRECTIVE
|
|
#pragma omp parallel for
|
|
#pragma omp parallel for
|
|
@@ -6657,6 +7039,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL FOR SIMD DIRECTIVE
|
|
// PARALLEL FOR SIMD DIRECTIVE
|
|
#pragma omp parallel for simd
|
|
#pragma omp parallel for simd
|
|
@@ -6868,6 +7256,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// PARALLEL SECTIONS DIRECTIVE
|
|
// PARALLEL SECTIONS DIRECTIVE
|
|
#pragma omp parallel sections
|
|
#pragma omp parallel sections
|
|
@@ -7063,6 +7457,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp parallel sections
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TASK DIRECTIVE
|
|
// TASK DIRECTIVE
|
|
#pragma omp task
|
|
#pragma omp task
|
|
@@ -7208,6 +7608,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp task
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// ATOMIC DIRECTIVE
|
|
// ATOMIC DIRECTIVE
|
|
#pragma omp atomic
|
|
#pragma omp atomic
|
|
@@ -7452,6 +7858,14 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#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 simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET DIRECTIVE
|
|
// TARGET DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -7611,6 +8025,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET PARALLEL DIRECTIVE
|
|
// TARGET PARALLEL DIRECTIVE
|
|
#pragma omp target parallel
|
|
#pragma omp target parallel
|
|
@@ -7767,6 +8187,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target parallel
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TARGET PARALLEL FOR DIRECTIVE
|
|
// TARGET PARALLEL FOR DIRECTIVE
|
|
#pragma omp target parallel for
|
|
#pragma omp target parallel for
|
|
@@ -7978,6 +8404,12 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
|
|
|
|
+ for (int j = 0; j < 10; ++j)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TEAMS DIRECTIVE
|
|
// TEAMS DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -8180,6 +8612,13 @@ void foo() {
|
|
for (int j = 0; j < 10; ++j)
|
|
for (int j = 0; j < 10; ++j)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+ {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target simd' directive into a parallel region?}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// TASKLOOP DIRECTIVE
|
|
// TASKLOOP DIRECTIVE
|
|
#pragma omp taskloop
|
|
#pragma omp taskloop
|
|
@@ -8381,6 +8820,12 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp taskloop
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // OK
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE DIRECTIVE
|
|
// DISTRIBUTE DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -8631,6 +9076,14 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
++a;
|
|
++a;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE PARALLEL FOR DIRECTIVE
|
|
// DISTRIBUTE PARALLEL FOR DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -8874,6 +9327,14 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
++a;
|
|
++a;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute parallel for
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ++a;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
|
|
// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -9108,6 +9569,14 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute parallel for simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
|
|
// DISTRIBUTE SIMD DIRECTIVE
|
|
// DISTRIBUTE SIMD DIRECTIVE
|
|
#pragma omp target
|
|
#pragma omp target
|
|
@@ -9342,4 +9811,194 @@ void foo() {
|
|
for (int i = 0; i < 10; ++i)
|
|
for (int i = 0; i < 10; ++i)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
+#pragma omp target
|
|
|
|
+#pragma omp teams
|
|
|
|
+#pragma omp distribute simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // 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
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+#pragma omp single
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ {
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ bar();
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp atomic // 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 // 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 parallel // 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 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 enter data map(to: a) // 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 exit data map(from: a) // 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 update to(a) // 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 distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+#pragma omp target simd
|
|
|
|
+ for (int i = 0; i < 10; ++i) {
|
|
|
|
+#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
|
|
|
|
+ for (int i = 0; i < 10; ++i)
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+ return foo<int>();
|
|
}
|
|
}
|