zahiraam wrote:
> Check these tests
>
> ```
> // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -triple
> x86_64-unknown-unknown -verify %s
>
> void use(int);
>
> void parallel_in_simd(int n) {
> #pragma omp simd
> for (int j = 0; j < n; ++j) {
> #pragma omp parallel // expected-error {{OpenMP constructs may not be nested
> inside a simd region}}
> use(j);
> }
> }
>
> // Nested in a loop-transforming construct, still inside the simd region.
> void parallel_in_tile_in_simd(int n) {
> #pragma omp simd
> for (int j = 0; j < n; ++j) {
> #pragma omp tile sizes(4)
> for (int i = 0; i < n; ++i) {
> #pragma omp parallel // expected-error {{OpenMP constructs may not be nested
> inside a simd region}}
> use(i);
> }
> }
> }
>
> // Same gap for ordered simd, which is simdizable and does not restrict its
> body.
> void parallel_in_ordered_simd(int n) {
> #pragma omp simd
> for (int j = 0; j < n; ++j) {
> #pragma omp ordered simd
> {
> #pragma omp parallel // expected-error {{OpenMP constructs may not be nested
> inside a simd region}}
> use(j);
> }
> }
> }
>
> // Loop-transforming construct applied directly by simd, accepted in OpenMP
> 6.0.
> void simd_applied_to_tile(int n) {
> #pragma omp simd
> #pragma omp tile sizes(4)
> for (int i = 0; i < n; ++i)
> use(i);
> }
> ```
>
> ```
> // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -triple
> x86_64-unknown-unknown -verify %s
>
> void use(int);
>
> void critical_in_order_concurrent(int n) {
> #pragma omp parallel for order(concurrent)
> for (int j = 0; j < n; ++j) {
> #pragma omp critical // expected-error {{construct 'critical' not allowed in
> a region associated with a directive with 'order' clause}}
> use(j);
> }
> }
>
> // Nested in a loop-transforming construct, still inside the
> order(concurrent) region.
> void critical_in_tile_in_order_concurrent(int n) {
> #pragma omp parallel for order(concurrent)
> for (int j = 0; j < n; ++j) {
> #pragma omp tile sizes(2)
> for (int i = 0; i < n; ++i) {
> #pragma omp critical // expected-error {{construct 'critical' not allowed in
> a region associated with a directive with 'order' clause}}
> use(i);
> }
> }
> }
> ```
>
> ```
> // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -triple
> x86_64-unknown-unknown -verify %s
> // expected-no-diagnostics
>
> void use(int);
>
> // The loop construct is SIMDizable when its binding region is not defined.
> void loop_in_simd(int n) {
> #pragma omp simd
> for (int j = 0; j < n; ++j) {
> #pragma omp loop
> for (int i = 0; i < n; ++i)
> use(i);
> }
> }
> ```
>
> ```
> // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -triple
> x86_64-unknown-unknown -verify %s
>
> void use(int);
>
> void ordered_depend_in_simd(int n) {
> #pragma omp simd
> for (int j = 0; j < n; ++j) {
> #pragma omp ordered depend(source) // expected-warning {{'depend' clause for
> 'ordered' is deprecated; use 'doacross' instead}} expected-error {{OpenMP
> constructs may not be nested inside a simd region except for ordered simd,
> simd, scan, atomic, or loop-transforming directive}}
> use(j);
> }
> }
> ```
Tests are now passing.
https://github.com/llvm/llvm-project/pull/231852
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits