From f8c12edd1a5200abbbb2c8da754d6a3bfa7545a0 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Mon, 11 Nov 2019 13:44:42 -0500 Subject: [PATCH] [OPENMP50]Add support for nested atomic and simd constructs in simd-based directives. According to OpenMP 5.0 standard, ordered simd, atomic and simd directives are allowed as nested directives in the simd-based directives. --- .../clang/Basic/DiagnosticSemaKinds.td | 2 +- clang/lib/Sema/SemaOpenMP.cpp | 15 +- clang/test/OpenMP/nesting_of_regions.cpp | 332 +++++++++--------- 3 files changed, 180 insertions(+), 169 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 42df65217cbb..e5085c4ab4cc 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -9312,7 +9312,7 @@ def err_omp_prohibited_region : Error< "; perhaps you forget to enclose 'omp %3' directive into a target region?|" "; perhaps you forget to enclose 'omp %3' directive into a teams region?}2">; def err_omp_prohibited_region_simd : Error< - "OpenMP constructs may not be nested inside a simd region">; + "OpenMP constructs may not be nested inside a simd region%select{| except for ordered simd, simd or atomic directive}0">; def err_omp_prohibited_region_atomic : Error< "OpenMP constructs may not be nested inside an atomic region">; def err_omp_prohibited_region_critical_same_name : Error< diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 7ed582f8446f..5c1b39e0b392 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -3799,7 +3799,10 @@ static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, ShouldBeInTargetRegion, ShouldBeInTeamsRegion } Recommend = NoRecommend; - if (isOpenMPSimdDirective(ParentRegion) && CurrentRegion != OMPD_ordered) { + if (isOpenMPSimdDirective(ParentRegion) && + ((SemaRef.LangOpts.OpenMP <= 45 && CurrentRegion != OMPD_ordered) || + (SemaRef.LangOpts.OpenMP >= 50 && CurrentRegion != OMPD_ordered && + CurrentRegion != OMPD_simd && CurrentRegion != OMPD_atomic))) { // OpenMP [2.16, Nesting of Regions] // OpenMP constructs may not be nested inside a simd region. // OpenMP [2.8.1,simd Construct, Restrictions] @@ -3808,9 +3811,14 @@ static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, // Allowing a SIMD construct nested in another SIMD construct is an // extension. The OpenMP 4.5 spec does not allow it. Issue a warning // message. + // OpenMP 5.0 [2.9.3.1, simd Construct, Restrictions] + // The only OpenMP constructs that can be encountered during execution of + // a simd region are the atomic construct, the loop construct, the simd + // construct and the ordered construct with the simd clause. SemaRef.Diag(StartLoc, (CurrentRegion != OMPD_simd) ? diag::err_omp_prohibited_region_simd - : diag::warn_omp_nesting_simd); + : diag::warn_omp_nesting_simd) + << (SemaRef.LangOpts.OpenMP >= 50 ? 1 : 0); return CurrentRegion != OMPD_simd; } if (ParentRegion == OMPD_atomic) { @@ -8165,7 +8173,8 @@ StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef Clauses, // OpenMP [2.8.1,simd Construct, Restrictions] // An ordered construct with the simd clause is the only OpenMP construct // that can appear in the simd region. - Diag(StartLoc, diag::err_omp_prohibited_region_simd); + Diag(StartLoc, diag::err_omp_prohibited_region_simd) + << (LangOpts.OpenMP >= 50 ? 1 : 0); ErrorFound = true; } else if (DependFound && (TC || SC)) { Diag(DependFound->getBeginLoc(), diag::err_omp_depend_clause_thread_simd) diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp index fc9230c6870c..9aa7814c6c75 100644 --- a/clang/test/OpenMP/nesting_of_regions.cpp +++ b/clang/test/OpenMP/nesting_of_regions.cpp @@ -1,6 +1,8 @@ -// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s +// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp45 %s +// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50 %s -// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s +// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp45 %s +// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 %s // SIMD-ONLY0-NOT: {{__kmpc|__tgt}} void bar(); @@ -227,7 +229,7 @@ void foo() { } #pragma omp simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -341,7 +343,7 @@ void foo() { } #pragma omp simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp simd @@ -468,7 +470,7 @@ void foo() { for (int j = 0; j < 10; ++j) ; } - + // FOR DIRECTIVE #pragma omp for for (int i = 0; i < 10; ++i) { @@ -742,7 +744,7 @@ void foo() { } #pragma omp for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -856,7 +858,7 @@ void foo() { } #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}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp for simd @@ -2647,7 +2649,7 @@ void foo() { } #pragma omp parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -2779,7 +2781,7 @@ void foo() { } #pragma omp parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp parallel for simd @@ -4104,7 +4106,7 @@ void foo() { ++a; } #pragma omp target - { + { #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; @@ -4122,79 +4124,79 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} } #pragma omp target - { + { #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' 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 - { + { #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute simd // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute parallel for simd // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute parallel for // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}} 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) ; } #pragma omp target - { + { #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; @@ -4320,7 +4322,7 @@ void foo() { ++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) ; @@ -4338,78 +4340,78 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}} } #pragma omp target parallel - { + { #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' 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 parallel - { + { #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' 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 parallel - { + { #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) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; @@ -4611,60 +4613,60 @@ void foo() { #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}} for (int j = 0; j < 10; ++j) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #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) ; - } + } #pragma omp target parallel for for (int i = 0; i < 10; ++i) { #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}} @@ -4685,7 +4687,7 @@ void foo() { } // TEAMS DIRECTIVE -#pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} +#pragma omp teams // omp45-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} bar(); #pragma omp target #pragma omp teams @@ -4847,7 +4849,7 @@ void foo() { ; #pragma omp distribute for (int j = 0; j < 10; ++j) - ; + ; #pragma omp target #pragma omp teams { @@ -4861,7 +4863,7 @@ void foo() { ; #pragma omp distribute parallel for for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -4871,7 +4873,7 @@ void foo() { ; #pragma omp distribute parallel for simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -4881,7 +4883,7 @@ void foo() { ; #pragma omp distribute simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -5247,7 +5249,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -5307,7 +5309,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -5559,7 +5561,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -5619,7 +5621,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -5856,9 +5858,9 @@ void foo() { } #pragma omp target #pragma omp teams -#pragma omp distribute parallel for simd +#pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -5871,7 +5873,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} @@ -5931,7 +5933,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -6008,7 +6010,7 @@ void foo() { #pragma omp teams #pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -6168,9 +6170,9 @@ void foo() { for (int i = 0; i < 10; ++i) ; } -#pragma omp target simd +#pragma omp target simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -6227,7 +6229,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -6284,7 +6286,7 @@ void foo() { } #pragma omp target simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target simd @@ -6373,7 +6375,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute // omp45-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) ; #pragma omp target @@ -6465,7 +6467,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -6636,7 +6638,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute // omp45-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) ; #pragma omp target @@ -6728,7 +6730,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -6919,7 +6921,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute simd // omp45-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -6946,7 +6948,7 @@ void foo() { #pragma omp target #pragma omp teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -7011,7 +7013,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -7078,7 +7080,7 @@ void foo() { #pragma omp target #pragma omp teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -7202,7 +7204,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute parallel for simd // omp45-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -7229,7 +7231,7 @@ void foo() { #pragma omp target #pragma omp teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -7294,7 +7296,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -7361,7 +7363,7 @@ void foo() { #pragma omp target #pragma omp teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -7485,7 +7487,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute parallel for // omp45-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -7577,7 +7579,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -7908,7 +7910,7 @@ void foo() { ; #pragma omp distribute parallel for for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -7917,7 +7919,7 @@ void foo() { ; #pragma omp distribute parallel for simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -7926,7 +7928,7 @@ void foo() { ; #pragma omp distribute simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -8069,7 +8071,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -8312,7 +8314,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -8498,7 +8500,7 @@ void foo() { } #pragma omp target teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -8555,7 +8557,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -8612,7 +8614,7 @@ void foo() { } #pragma omp target teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK ++a; } #pragma omp target teams distribute parallel for simd @@ -8741,7 +8743,7 @@ void foo() { } #pragma omp target teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -8798,7 +8800,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -8855,7 +8857,7 @@ void foo() { } #pragma omp target teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK ++a; } #pragma omp target teams distribute simd @@ -9182,7 +9184,7 @@ void foo() { } #pragma omp simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -9279,7 +9281,7 @@ void foo() { } #pragma omp simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp simd @@ -9672,7 +9674,7 @@ void foo() { } #pragma omp for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -9769,7 +9771,7 @@ void foo() { } #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}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp for simd @@ -11541,7 +11543,7 @@ void foo() { } #pragma omp parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -11673,7 +11675,7 @@ void foo() { } #pragma omp parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp parallel for simd @@ -12718,7 +12720,7 @@ void foo() { ++a; } #pragma omp target - { + { #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; @@ -12731,78 +12733,78 @@ void foo() { a++; } #pragma omp target - { + { #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' 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 - { + { #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute simd // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute parallel for simd // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp teams distribute parallel for // OK for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #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) ; } #pragma omp target - { + { #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target - { + { #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}} for (int i = 0; i < 10; ++i) ; @@ -12928,7 +12930,7 @@ void foo() { ++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) ; @@ -12946,78 +12948,78 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}} } #pragma omp target parallel - { + { #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' 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 parallel - { + { #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' 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 parallel - { + { #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) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; } #pragma omp target parallel - { + { #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}} for (int i = 0; i < 10; ++i) ; @@ -13472,7 +13474,7 @@ void foo() { ; #pragma omp distribute parallel for for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -13482,7 +13484,7 @@ void foo() { ; #pragma omp distribute parallel for simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -13492,7 +13494,7 @@ void foo() { ; #pragma omp distribute simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target #pragma omp teams @@ -13858,7 +13860,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -13918,7 +13920,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -14180,7 +14182,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -14240,7 +14242,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -14487,7 +14489,7 @@ void foo() { #pragma omp teams #pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -14500,7 +14502,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} @@ -14560,7 +14562,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -14637,7 +14639,7 @@ void foo() { #pragma omp teams #pragma omp distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -14799,7 +14801,7 @@ void foo() { #pragma omp teams #pragma omp distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -14812,7 +14814,7 @@ void foo() { ; } #pragma omp target -#pragma omp teams +#pragma omp teams #pragma omp distribute simd for (int i = 0; i < 10; ++i) { #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} @@ -14872,7 +14874,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -14949,7 +14951,7 @@ void foo() { #pragma omp teams #pragma omp distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -15103,7 +15105,7 @@ void foo() { } #pragma omp target simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -15160,7 +15162,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -15217,7 +15219,7 @@ void foo() { } #pragma omp target simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target simd @@ -15317,7 +15319,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute // omp45-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) ; #pragma omp target @@ -15409,7 +15411,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -15600,7 +15602,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute simd // omp45-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -15627,7 +15629,7 @@ void foo() { #pragma omp target #pragma omp teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -15692,7 +15694,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -15759,7 +15761,7 @@ void foo() { #pragma omp target #pragma omp teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -15883,7 +15885,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute parallel for simd // omp45-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -15910,7 +15912,7 @@ void foo() { #pragma omp target #pragma omp teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -15975,7 +15977,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -16042,7 +16044,7 @@ void foo() { #pragma omp target #pragma omp teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } #pragma omp target @@ -16166,7 +16168,7 @@ void foo() { } // 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?}} +#pragma omp teams distribute parallel for // omp45-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}} for (int i = 0; i < 10; ++i) ; #pragma omp target @@ -16258,7 +16260,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -16589,7 +16591,7 @@ void foo() { ; #pragma omp distribute parallel for for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -16598,7 +16600,7 @@ void foo() { ; #pragma omp distribute parallel for simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -16607,7 +16609,7 @@ void foo() { ; #pragma omp distribute simd for (int j = 0; j < 10; ++j) - ; + ; } #pragma omp target teams { @@ -16750,7 +16752,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -16993,7 +16995,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -17179,7 +17181,7 @@ void foo() { } #pragma omp target teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -17236,7 +17238,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -17293,7 +17295,7 @@ void foo() { } #pragma omp target teams distribute parallel for simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK ++a; } #pragma omp target teams distribute parallel for simd @@ -17422,7 +17424,7 @@ void foo() { } #pragma omp target teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} +#pragma omp simd // omp45-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}} for (int i = 0; i < 10; ++i) ; } @@ -17479,7 +17481,7 @@ void foo() { { #pragma omp single { - bar(); + bar(); } } } @@ -17536,7 +17538,7 @@ void foo() { } #pragma omp target teams distribute simd for (int i = 0; i < 10; ++i) { -#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK +#pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK ++a; } #pragma omp target teams distribute simd -- GitLab