Skip to content

Commit 7c9f4f1

Browse files
authored
[flang][openacc] Make num_gangs, num_workers and vector_length behavior homogenous with parallel (#136341)
1 parent a3f8836 commit 7c9f4f1

File tree

2 files changed

+50
-21
lines changed

2 files changed

+50
-21
lines changed

flang/test/Semantics/OpenACC/acc-kernels.f90

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,45 @@ program openacc_kernels_validity
6161
!$acc kernels num_gangs(8)
6262
!$acc end kernels
6363

64+
!ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
65+
!$acc kernels num_gangs(8) num_gangs(10)
66+
!$acc end kernels
67+
68+
!ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
69+
!$acc kernels device_type(nvidia) num_gangs(8) num_gangs(10)
70+
!$acc end kernels
71+
72+
!$acc kernels device_type(nvidia) num_gangs(8) device_type(radeon) num_gangs(10)
73+
!$acc end kernels
74+
6475
!$acc kernels num_workers(8)
6576
!$acc end kernels
6677

78+
!ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
79+
!$acc kernels num_workers(8) num_workers(4)
80+
!$acc end kernels
81+
82+
!ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
83+
!$acc kernels device_type(nvidia) num_workers(8) num_workers(4)
84+
!$acc end kernels
85+
86+
!$acc kernels device_type(nvidia) num_workers(8) device_type(radeon) num_workers(4)
87+
!$acc end kernels
88+
6789
!$acc kernels vector_length(128)
6890
!$acc end kernels
6991

92+
!ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
93+
!$acc kernels vector_length(128) vector_length(124)
94+
!$acc end kernels
95+
96+
!ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
97+
!$acc kernels device_type(nvidia) vector_length(256) vector_length(128)
98+
!$acc end kernels
99+
100+
!$acc kernels device_type(nvidia) vector_length(256) device_type(radeon) vector_length(128)
101+
!$acc end kernels
102+
70103
!$acc kernels if(.true.)
71104
!$acc end kernels
72105

llvm/include/llvm/Frontend/OpenACC/ACC.td

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -319,27 +319,23 @@ def ACC_Declare : Directive<"declare"> {
319319

320320
// 2.5.3
321321
def ACC_Kernels : Directive<"kernels"> {
322-
let allowedClauses = [
323-
VersionedClause<ACCC_Attach>,
324-
VersionedClause<ACCC_Copy>,
325-
VersionedClause<ACCC_Copyin>,
326-
VersionedClause<ACCC_Copyout>,
327-
VersionedClause<ACCC_Create>,
328-
VersionedClause<ACCC_DeviceType>,
329-
VersionedClause<ACCC_NoCreate>,
330-
VersionedClause<ACCC_Present>,
331-
VersionedClause<ACCC_DevicePtr>,
332-
VersionedClause<ACCC_Wait>
333-
];
334-
let allowedOnceClauses = [
335-
VersionedClause<ACCC_Async>,
336-
VersionedClause<ACCC_Default>,
337-
VersionedClause<ACCC_If>,
338-
VersionedClause<ACCC_NumGangs>,
339-
VersionedClause<ACCC_NumWorkers>,
340-
VersionedClause<ACCC_Self>,
341-
VersionedClause<ACCC_VectorLength>
342-
];
322+
let allowedClauses = [VersionedClause<ACCC_Attach>,
323+
VersionedClause<ACCC_Copy>,
324+
VersionedClause<ACCC_Copyin>,
325+
VersionedClause<ACCC_Copyout>,
326+
VersionedClause<ACCC_Create>,
327+
VersionedClause<ACCC_DeviceType>,
328+
VersionedClause<ACCC_NoCreate>,
329+
VersionedClause<ACCC_NumGangs>,
330+
VersionedClause<ACCC_NumWorkers>,
331+
VersionedClause<ACCC_Present>,
332+
VersionedClause<ACCC_DevicePtr>,
333+
VersionedClause<ACCC_VectorLength>,
334+
VersionedClause<ACCC_Wait>];
335+
let allowedOnceClauses = [VersionedClause<ACCC_Async>,
336+
VersionedClause<ACCC_Default>,
337+
VersionedClause<ACCC_If>,
338+
VersionedClause<ACCC_Self>];
343339
let association = AS_Block;
344340
let category = CA_Executable;
345341
}

0 commit comments

Comments
 (0)