diff options
author | Kelvin Li <kkwli0@gmail.com> | 2016-12-25 04:52:54 +0000 |
---|---|---|
committer | Kelvin Li <kkwli0@gmail.com> | 2016-12-25 04:52:54 +0000 |
commit | 83c451e9986e2d2ccd28395595465d69f0d4db6e (patch) | |
tree | 75c1356a97696a372040aaf0cf1364b8b9f1ee4c /clang/test/OpenMP/nesting_of_regions.cpp | |
parent | 690952d15e6e21cd42a7c99e0941dc983e608866 (diff) | |
download | bcm5719-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.cpp | 828 |
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>(); } |