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