diff --git a/flang/test/Semantics/OpenACC/acc-kernels.f90 b/flang/test/Semantics/OpenACC/acc-kernels.f90 index 8a209040a7793..33e253ca8d874 100644 --- a/flang/test/Semantics/OpenACC/acc-kernels.f90 +++ b/flang/test/Semantics/OpenACC/acc-kernels.f90 @@ -61,12 +61,45 @@ program openacc_kernels_validity !$acc kernels num_gangs(8) !$acc end kernels + !ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels num_gangs(8) num_gangs(10) + !$acc end kernels + + !ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels device_type(nvidia) num_gangs(8) num_gangs(10) + !$acc end kernels + + !$acc kernels device_type(nvidia) num_gangs(8) device_type(radeon) num_gangs(10) + !$acc end kernels + !$acc kernels num_workers(8) !$acc end kernels + !ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels num_workers(8) num_workers(4) + !$acc end kernels + + !ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels device_type(nvidia) num_workers(8) num_workers(4) + !$acc end kernels + + !$acc kernels device_type(nvidia) num_workers(8) device_type(radeon) num_workers(4) + !$acc end kernels + !$acc kernels vector_length(128) !$acc end kernels + !ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels vector_length(128) vector_length(124) + !$acc end kernels + + !ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause + !$acc kernels device_type(nvidia) vector_length(256) vector_length(128) + !$acc end kernels + + !$acc kernels device_type(nvidia) vector_length(256) device_type(radeon) vector_length(128) + !$acc end kernels + !$acc kernels if(.true.) !$acc end kernels diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td index e1a4183785d1f..898b7dc9e230f 100644 --- a/llvm/include/llvm/Frontend/OpenACC/ACC.td +++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td @@ -319,27 +319,23 @@ def ACC_Declare : Directive<"declare"> { // 2.5.3 def ACC_Kernels : Directive<"kernels"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; + let allowedClauses = [VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause]; + let allowedOnceClauses = [VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause]; let association = AS_Block; let category = CA_Executable; }