diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2014-10-07 10:13:33 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2014-10-07 10:13:33 +0000 |
commit | 941bbec6f4d90763ec3fd97f7380836c7085ea81 (patch) | |
tree | 11486f57eae83a1dca964517a51a7658b19a3e86 /clang/test/OpenMP/nesting_of_regions.cpp | |
parent | f3fe49aac61e49c0ff14602c95c2c3c7bbb6578a (diff) | |
download | bcm5719-llvm-941bbec6f4d90763ec3fd97f7380836c7085ea81.tar.gz bcm5719-llvm-941bbec6f4d90763ec3fd97f7380836c7085ea81.zip |
[OPENMP] 'omp teams' directive basic support.
Includes parsing and semantic analysis for 'omp teams' directive support from OpenMP 4.0. Adds additional analysis to 'omp target' directive with 'omp teams' directive.
llvm-svn: 219197
Diffstat (limited to 'clang/test/OpenMP/nesting_of_regions.cpp')
-rw-r--r-- | clang/test/OpenMP/nesting_of_regions.cpp | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp index 0bc61f6e0d1..a948ca3e3bc 100644 --- a/clang/test/OpenMP/nesting_of_regions.cpp +++ b/clang/test/OpenMP/nesting_of_regions.cpp @@ -95,6 +95,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // SIMD DIRECTIVE #pragma omp simd @@ -217,6 +222,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // FOR DIRECTIVE #pragma omp for @@ -362,6 +372,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp for + for (int i = 0; i < 10; ++i) { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // FOR SIMD DIRECTIVE #pragma omp for simd @@ -484,6 +499,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // SECTIONS DIRECTIVE #pragma omp sections @@ -636,6 +656,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp sections + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} @@ -823,6 +848,12 @@ void foo() { #pragma omp target ++a; } +#pragma omp sections + { +#pragma omp section +#pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // SINGLE DIRECTIVE #pragma omp single @@ -958,6 +989,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp single + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // MASTER DIRECTIVE #pragma omp master @@ -1093,6 +1129,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp master + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // CRITICAL DIRECTIVE #pragma omp critical @@ -1242,6 +1283,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp critical + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // PARALLEL FOR DIRECTIVE #pragma omp parallel for @@ -1392,6 +1438,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel for + for (int i = 0; i < 10; ++i) { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // PARALLEL FOR SIMD DIRECTIVE #pragma omp parallel for simd @@ -1542,6 +1593,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections @@ -1683,6 +1739,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel sections + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // TASK DIRECTIVE #pragma omp task @@ -1770,6 +1831,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp task + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // ORDERED DIRECTIVE #pragma omp ordered @@ -1905,6 +1971,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp ordered + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // ATOMIC DIRECTIVE #pragma omp atomic @@ -2047,6 +2118,12 @@ void foo() { #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} ++a; } +#pragma omp atomic + // expected-error@+1 {{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}} + { +#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} + ++a; + } // TARGET DIRECTIVE #pragma omp target @@ -2141,6 +2218,137 @@ void foo() { #pragma omp target ++a; } +#pragma omp target + { +#pragma omp teams + ++a; + } +#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} + { + ++a; // expected-note {{statement outside teams construct here}} +#pragma omp teams // expected-note {{nested teams construct here}} + ++a; + } + +// TEAMS DIRECTIVE +#pragma omp target +#pragma omp teams +#pragma omp parallel + bar(); +#pragma omp target +#pragma omp teams +#pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} + bar(); + +#pragma omp target +#pragma omp teams +#pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp parallel for + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp parallel for simd + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp parallel sections + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}} + ++a; + } +#pragma omp target +#pragma omp teams + { +#pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}} + ++a; + } +#pragma omp target +#pragma omp teams + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } } void foo() { @@ -2235,6 +2443,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // SIMD DIRECTIVE #pragma omp simd @@ -2350,6 +2563,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // FOR DIRECTIVE #pragma omp for @@ -2485,6 +2703,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp for + for (int i = 0; i < 10; ++i) { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // FOR SIMD DIRECTIVE #pragma omp for simd @@ -2600,6 +2823,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // SECTIONS DIRECTIVE #pragma omp sections @@ -2727,6 +2955,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp sections + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} @@ -2918,6 +3151,14 @@ void foo() { ++a; } } +#pragma omp sections + { +#pragma omp section + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } + } // SINGLE DIRECTIVE #pragma omp single @@ -3043,6 +3284,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp single + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // MASTER DIRECTIVE #pragma omp master @@ -3178,6 +3424,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp master + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // CRITICAL DIRECTIVE #pragma omp critical @@ -3332,6 +3583,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp critical + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // PARALLEL FOR DIRECTIVE #pragma omp parallel for @@ -3482,6 +3738,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel for + for (int i = 0; i < 10; ++i) { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // PARALLEL FOR SIMD DIRECTIVE #pragma omp parallel for simd @@ -3632,6 +3893,11 @@ void foo() { #pragma omp target // 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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections @@ -3769,6 +4035,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp parallel sections + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // TASK DIRECTIVE #pragma omp task @@ -3855,6 +4126,11 @@ void foo() { #pragma omp target ++a; } +#pragma omp task + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } // ATOMIC DIRECTIVE #pragma omp atomic @@ -3997,6 +4273,12 @@ void foo() { #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} ++a; } +#pragma omp atomic + // expected-error@+1 {{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}} + { +#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} + ++a; + } // TARGET DIRECTIVE #pragma omp target @@ -4091,6 +4373,137 @@ void foo() { #pragma omp target ++a; } +#pragma omp target + { +#pragma omp teams + ++a; + } +#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} + { + ++a; // expected-note {{statement outside teams construct here}} +#pragma omp teams // expected-note {{nested teams construct here}} + ++a; + } + +// TEAMS DIRECTIVE +#pragma omp target +#pragma omp teams +#pragma omp parallel + bar(); +#pragma omp target +#pragma omp teams +#pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} + bar(); + +#pragma omp target +#pragma omp teams +#pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp parallel for + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp parallel for simd + for (int i = 0; i < 10; ++i) + ; +#pragma omp target +#pragma omp teams +#pragma omp parallel sections + { + bar(); + } +#pragma omp target +#pragma omp teams +#pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}} + { + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} + bar(); + } +#pragma omp target +#pragma omp teams + { +#pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}} + ++a; + } +#pragma omp target +#pragma omp teams + { +#pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}} + ++a; + } +#pragma omp target +#pragma omp teams + { +#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} + ++a; + } return foo<int>(); } |