diff options
author | Alexander Musman <alexander.musman@gmail.com> | 2014-09-18 05:12:34 +0000 |
---|---|---|
committer | Alexander Musman <alexander.musman@gmail.com> | 2014-09-18 05:12:34 +0000 |
commit | f82886e5020c2cda518902d665cd87ddb2c40e59 (patch) | |
tree | 6ee7a18ccc8f5cfe9b11e213b96343a16015bef2 /clang/test/OpenMP/nesting_of_regions.cpp | |
parent | e0d77ef053fff7569e20a7593f05100af6801933 (diff) | |
download | bcm5719-llvm-f82886e5020c2cda518902d665cd87ddb2c40e59.tar.gz bcm5719-llvm-f82886e5020c2cda518902d665cd87ddb2c40e59.zip |
Parsing/Sema of directive omp for simd
llvm-svn: 218029
Diffstat (limited to 'clang/test/OpenMP/nesting_of_regions.cpp')
-rw-r--r-- | clang/test/OpenMP/nesting_of_regions.cpp | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp index 5076f666ddf..eac2db215a2 100644 --- a/clang/test/OpenMP/nesting_of_regions.cpp +++ b/clang/test/OpenMP/nesting_of_regions.cpp @@ -15,6 +15,10 @@ void foo() { 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(); @@ -98,6 +102,12 @@ void foo() { } #pragma omp 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 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) ; @@ -203,6 +213,12 @@ void foo() { } #pragma omp for for (int i = 0; i < 10; ++i) { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp for + for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -316,6 +332,117 @@ void foo() { ++a; } +// FOR SIMD DIRECTIVE +#pragma omp for 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 for simd + for (int i = 0; i < 10; ++i) { +#pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for simd + for (int i = 0; i < 10; ++i) { +#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } + // SECTIONS DIRECTIVE #pragma omp sections { @@ -331,6 +458,12 @@ void foo() { } #pragma omp sections { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp sections + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -478,6 +611,15 @@ void foo() { { #pragma omp section { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } + } +#pragma omp sections + { +#pragma omp section + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -528,6 +670,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -626,6 +771,12 @@ void foo() { } #pragma omp single { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp single + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -669,6 +820,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -741,6 +895,12 @@ void foo() { } #pragma omp master { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -784,6 +944,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -856,6 +1019,12 @@ void foo() { } #pragma omp critical { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp critical + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -899,6 +1068,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -985,6 +1157,12 @@ void foo() { } #pragma omp parallel for for (int i = 0; i < 10; ++i) { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp parallel for + for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -1038,6 +1216,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -1115,6 +1296,12 @@ void foo() { } #pragma omp parallel sections { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp parallel sections + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -1168,6 +1355,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -1231,6 +1421,10 @@ void foo() { for (int i = 0; i < 10; ++i) ; #pragma omp task +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp task #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); @@ -1310,6 +1504,12 @@ void foo() { } #pragma omp ordered { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp ordered + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -1421,6 +1621,13 @@ void foo() { #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 for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} + for (int i = 0; i < 10; ++i) + ; + } +#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 parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} for (int i = 0; i < 10; ++i) ; @@ -1538,6 +1745,10 @@ void foo() { 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(); @@ -1621,6 +1832,12 @@ void foo() { } #pragma omp 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 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) ; @@ -1719,6 +1936,12 @@ void foo() { } #pragma omp for for (int i = 0; i < 10; ++i) { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp for + for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -1757,6 +1980,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -1819,6 +2045,110 @@ void foo() { ++a; } +// FOR SIMD DIRECTIVE +#pragma omp for 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 for simd + for (int i = 0; i < 10; ++i) { +#pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp for 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 for 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 for 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 for 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 for 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 master // expected-error {{OpenMP constructs may not be nested inside a simd region}} + bar(); + } +#pragma omp for 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 critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} + bar(); + } +#pragma omp for 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 for 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 for 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 for 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 for 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 for 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 for 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 for 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 for simd + for (int i = 0; i < 10; ++i) { +#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} + ++a; + } + // SECTIONS DIRECTIVE #pragma omp sections { @@ -1834,6 +2164,12 @@ void foo() { } #pragma omp sections { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp sections + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -1872,6 +2208,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -1953,6 +2292,15 @@ void foo() { { #pragma omp section { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } + } +#pragma omp sections + { +#pragma omp section + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2003,6 +2351,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2103,6 +2454,12 @@ void foo() { } #pragma omp single { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp single + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2136,6 +2493,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2208,6 +2568,12 @@ void foo() { } #pragma omp master { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2251,6 +2617,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2323,6 +2692,12 @@ void foo() { } #pragma omp critical { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp critical + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2366,6 +2741,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2457,6 +2835,13 @@ void foo() { } #pragma omp parallel for for (int i = 0; i < 10; ++i) { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } + +#pragma omp parallel for + for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2509,6 +2894,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2586,6 +2974,12 @@ void foo() { } #pragma omp parallel sections { +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp parallel sections + { #pragma omp parallel for (int i = 0; i < 10; ++i) ; @@ -2635,6 +3029,9 @@ void foo() { #pragma omp for // OK for (int i = 0; i < 10; ++i) ; +#pragma omp for simd // OK + for (int i = 0; i < 10; ++i) + ; #pragma omp sections // OK { bar(); @@ -2698,6 +3095,10 @@ void foo() { for (int i = 0; i < 10; ++i) ; #pragma omp task +#pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; +#pragma omp task #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); @@ -2779,6 +3180,13 @@ void foo() { #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 for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} + for (int i = 0; i < 10; ++i) + ; + } +#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 parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} for (int i = 0; i < 10; ++i) ; |