Skip to content

Commit e0e93c3

Browse files
authored
[Frontend][OpenMP] Follow compound construct clause restrictions (#107853)
This patch removes from the list of allowed clauses for a handful of compound constructs those that are specifically disallowed by the OpenMP spec. In particular, the following restrictions are followed: - (regarding combined constructs) If _directive-name-A_ is `target`, the `copyin` clause must not be specified. - (regarding composite constructs) If _directive-name-A_ is `distribute`, the `ordered` clause must not be specified. These restrictions are listed in the OpenMP Specification version 5.2, sections 17.4 and 17.5. Since it's a similar case as PR #90754, I'm adding people involved in that decision as reviewers here.
1 parent adb7004 commit e0e93c3

File tree

4 files changed

+7
-14
lines changed

4 files changed

+7
-14
lines changed

flang/test/Lower/OpenMP/distribute-parallel-do.f90

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,21 @@ subroutine distribute_parallel_do_dist_schedule()
3636
!$omp end teams
3737
end subroutine distribute_parallel_do_dist_schedule
3838

39-
! CHECK-LABEL: func.func @_QPdistribute_parallel_do_ordered(
40-
subroutine distribute_parallel_do_ordered()
39+
! CHECK-LABEL: func.func @_QPdistribute_parallel_do_schedule(
40+
subroutine distribute_parallel_do_schedule()
4141
!$omp teams
4242

4343
! CHECK: omp.parallel private({{.*}}) {
4444
! CHECK: omp.distribute {
45-
! CHECK-NEXT: omp.wsloop ordered(1) {
45+
! CHECK-NEXT: omp.wsloop schedule(runtime) {
4646
! CHECK-NEXT: omp.loop_nest
47-
!$omp distribute parallel do ordered(1)
47+
!$omp distribute parallel do schedule(runtime)
4848
do index_ = 1, 10
4949
end do
5050
!$omp end distribute parallel do
5151

5252
!$omp end teams
53-
end subroutine distribute_parallel_do_ordered
53+
end subroutine distribute_parallel_do_schedule
5454

5555
! CHECK-LABEL: func.func @_QPdistribute_parallel_do_private(
5656
subroutine distribute_parallel_do_private()

flang/test/Semantics/OpenMP/combined-constructs.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ program main
100100
enddo
101101
!$omp end target parallel do
102102

103+
!ERROR: COPYIN clause is not allowed on the TARGET PARALLEL DO directive
103104
!ERROR: Non-THREADPRIVATE object 'a' in COPYIN clause
104105
!$omp target parallel do copyin(a)
105106
do i = 1, N

flang/test/Semantics/OpenMP/ordered03.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ subroutine sub1()
5252
end do
5353
!$omp end target parallel do
5454

55+
!ERROR: ORDERED clause is not allowed on the TARGET TEAMS DISTRIBUTE PARALLEL DO directive
5556
!$omp target teams distribute parallel do ordered(1)
5657
do i = 1, N
5758
!ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter

llvm/include/llvm/Frontend/OpenMP/OMP.td

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,6 @@ def OMP_DistributeParallelDo : Directive<"distribute parallel do"> {
11921192
VersionedClause<OMPC_If>,
11931193
VersionedClause<OMPC_NumThreads>,
11941194
VersionedClause<OMPC_Order, 50>,
1195-
VersionedClause<OMPC_Ordered>,
11961195
VersionedClause<OMPC_ProcBind>,
11971196
VersionedClause<OMPC_Schedule>,
11981197
];
@@ -1293,7 +1292,6 @@ def OMP_DistributeSimd : Directive<"distribute simd"> {
12931292
VersionedClause<OMPC_If, 50>,
12941293
VersionedClause<OMPC_NumThreads>,
12951294
VersionedClause<OMPC_Order, 50>,
1296-
VersionedClause<OMPC_Ordered>,
12971295
VersionedClause<OMPC_ProcBind>,
12981296
VersionedClause<OMPC_SafeLen>,
12991297
VersionedClause<OMPC_Schedule>,
@@ -1840,7 +1838,6 @@ def OMP_TargetParallel : Directive<"target parallel"> {
18401838
def OMP_TargetParallelDo : Directive<"target parallel do"> {
18411839
let allowedClauses = [
18421840
VersionedClause<OMPC_Allocator>,
1843-
VersionedClause<OMPC_Copyin>,
18441841
VersionedClause<OMPC_Default>,
18451842
VersionedClause<OMPC_Depend>,
18461843
VersionedClause<OMPC_FirstPrivate>,
@@ -1977,7 +1974,6 @@ def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> {
19771974
def OMP_target_parallel_loop : Directive<"target parallel loop"> {
19781975
let allowedClauses = [
19791976
VersionedClause<OMPC_Allocate>,
1980-
VersionedClause<OMPC_Copyin>,
19811977
VersionedClause<OMPC_Depend>,
19821978
VersionedClause<OMPC_Device>,
19831979
VersionedClause<OMPC_FirstPrivate>,
@@ -2106,7 +2102,6 @@ def OMP_TargetTeamsDistributeParallelDo :
21062102
Directive<"target teams distribute parallel do"> {
21072103
let allowedClauses = [
21082104
VersionedClause<OMPC_Allocate>,
2109-
VersionedClause<OMPC_Copyin>,
21102105
VersionedClause<OMPC_Depend>,
21112106
VersionedClause<OMPC_FirstPrivate>,
21122107
VersionedClause<OMPC_HasDeviceAddr, 51>,
@@ -2115,7 +2110,6 @@ def OMP_TargetTeamsDistributeParallelDo :
21152110
VersionedClause<OMPC_LastPrivate>,
21162111
VersionedClause<OMPC_Linear>,
21172112
VersionedClause<OMPC_Map>,
2118-
VersionedClause<OMPC_Ordered>,
21192113
VersionedClause<OMPC_Private>,
21202114
VersionedClause<OMPC_Reduction>,
21212115
VersionedClause<OMPC_Shared>,
@@ -2143,7 +2137,6 @@ def OMP_TargetTeamsDistributeParallelDoSimd :
21432137
let allowedClauses = [
21442138
VersionedClause<OMPC_Aligned>,
21452139
VersionedClause<OMPC_Allocate>,
2146-
VersionedClause<OMPC_Copyin>,
21472140
VersionedClause<OMPC_Depend>,
21482141
VersionedClause<OMPC_FirstPrivate>,
21492142
VersionedClause<OMPC_HasDeviceAddr, 51>,
@@ -2153,7 +2146,6 @@ def OMP_TargetTeamsDistributeParallelDoSimd :
21532146
VersionedClause<OMPC_Linear>,
21542147
VersionedClause<OMPC_Map>,
21552148
VersionedClause<OMPC_NonTemporal>,
2156-
VersionedClause<OMPC_Ordered>,
21572149
VersionedClause<OMPC_Private>,
21582150
VersionedClause<OMPC_Reduction>,
21592151
VersionedClause<OMPC_Shared>,
@@ -2395,7 +2387,6 @@ def OMP_TeamsDistributeParallelDo :
23952387
VersionedClause<OMPC_NumTeams>,
23962388
VersionedClause<OMPC_NumThreads>,
23972389
VersionedClause<OMPC_Order, 50>,
2398-
VersionedClause<OMPC_Ordered>,
23992390
VersionedClause<OMPC_ProcBind>,
24002391
VersionedClause<OMPC_Schedule>,
24012392
VersionedClause<OMPC_ThreadLimit>,

0 commit comments

Comments
 (0)