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

Reply via email to