Author: Valentin Clement Date: 2020-12-07T14:27:18-05:00 New Revision: 875b4fd5ee95bedd6ec2bcf8423c159ccecd8443
URL: https://github.com/llvm/llvm-project/commit/875b4fd5ee95bedd6ec2bcf8423c159ccecd8443 DIFF: https://github.com/llvm/llvm-project/commit/875b4fd5ee95bedd6ec2bcf8423c159ccecd8443.diff LOG: [flang][openacc] Add clause validity tests for the kernels directive Add some clause validity tests for the kernels directive Reviewed By: sameeranjoshi Differential Revision: https://reviews.llvm.org/D91873 Added: Modified: flang/test/Semantics/acc-clause-validity.f90 llvm/include/llvm/Frontend/OpenACC/ACC.td Removed: ################################################################################ diff --git a/flang/test/Semantics/acc-clause-validity.f90 b/flang/test/Semantics/acc-clause-validity.f90 index 64e6ca887b6c..717b5cd30418 100644 --- a/flang/test/Semantics/acc-clause-validity.f90 +++ b/flang/test/Semantics/acc-clause-validity.f90 @@ -506,26 +506,6 @@ program openacc_clause_validity end do !$acc end parallel loop - !$acc kernels device_type(*) async - do i = 1, N - a(i) = 3.14 - end do - !$acc end kernels - - !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS directive - !$acc kernels device_type(*) if(.TRUE.) - do i = 1, N - a(i) = 3.14 - end do - !$acc end kernels - - !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive - !$acc kernels loop device_type(*) if(.TRUE.) - do i = 1, N - a(i) = 3.14 - end do - !$acc end kernels loop - !$acc serial device_type(*) async do i = 1, N a(i) = 3.14 @@ -622,18 +602,128 @@ program openacc_clause_validity reduction_l = d(i) .neqv. e(i) end do + !$acc kernels async + !$acc end kernels + + !$acc kernels async(1) + !$acc end kernels + + !$acc kernels async(async1) + !$acc end kernels + + !$acc kernels wait(wait1) + !$acc end kernels + + !$acc kernels wait(wait1, wait2) + !$acc end kernels + !$acc kernels wait(1, 2) async(3) !$acc end kernels !$acc kernels wait(queues: 1, 2) async(3) !$acc end kernels + !$acc kernels wait(1) wait(2) async(3) + !$acc end kernels + !$acc kernels wait(devnum: 1: 1, 2) async(3) !$acc end kernels !$acc kernels wait(devnum: 1: queues: 1, 2) async(3) !$acc end kernels + !$acc kernels num_gangs(8) + !$acc end kernels + + !$acc kernels num_workers(8) + !$acc end kernels + + !$acc kernels vector_length(128) + !$acc end kernels + + !$acc kernels if(.true.) + !$acc end kernels + + !$acc kernels if(ifCondition) + !$acc end kernels + + !ERROR: At most one IF clause can appear on the KERNELS directive + !$acc kernels if(.true.) if(ifCondition) + !$acc end kernels + + !$acc kernels self + !$acc end kernels + + !$acc kernels self(.true.) + !$acc end kernels + + !$acc kernels self(ifCondition) + !$acc end kernels + + !$acc kernels copy(aa) copyin(bb) copyout(cc) + !$acc end kernels + + !$acc kernels copy(aa, bb) copyout(zero: cc) + !$acc end kernels + + !$acc kernels present(aa, bb) create(cc) + !$acc end kernels + + !$acc kernels copyin(readonly: aa, bb) create(zero: cc) + !$acc end kernels + + !$acc kernels deviceptr(aa, bb) no_create(cc) + !$acc end kernels + + !$acc kernels attach(aa, bb, cc) + !$acc end kernels + + !ERROR: PRIVATE clause is not allowed on the KERNELS directive + !$acc kernels private(aa, bb, cc) + !$acc end kernels + + !$acc kernels default(none) + !$acc end kernels + + !$acc kernels default(present) + !$acc end kernels + + !ERROR: At most one DEFAULT clause can appear on the KERNELS directive + !$acc kernels default(none) default(present) + !$acc end kernels + + !$acc kernels device_type(*) + !$acc end kernels + + !$acc kernels device_type(1) + !$acc end kernels + + !$acc kernels device_type(1, 3) + !$acc end kernels + + !$acc kernels device_type(*) async wait num_gangs(8) num_workers(8) vector_length(128) + !$acc end kernels + + !$acc kernels device_type(*) async + do i = 1, N + a(i) = 3.14 + end do + !$acc end kernels + + !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS directive + !$acc kernels device_type(*) if(.TRUE.) + do i = 1, N + a(i) = 3.14 + end do + !$acc end kernels + + !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive + !$acc kernels loop device_type(*) if(.TRUE.) + do i = 1, N + a(i) = 3.14 + end do + !$acc end kernels loop + !$acc wait !$acc wait async diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td index eaca44f6b158..206f82adb1e5 100644 --- a/llvm/include/llvm/Frontend/OpenACC/ACC.td +++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td @@ -298,7 +298,8 @@ def ACC_Kernels : Directive<"kernels"> { VersionedClause<ACCC_DeviceType>, VersionedClause<ACCC_NoCreate>, VersionedClause<ACCC_Present>, - VersionedClause<ACCC_DevicePtr> + VersionedClause<ACCC_DevicePtr>, + VersionedClause<ACCC_Wait> ]; let allowedOnceClauses = [ VersionedClause<ACCC_Async>, @@ -307,8 +308,7 @@ def ACC_Kernels : Directive<"kernels"> { VersionedClause<ACCC_NumGangs>, VersionedClause<ACCC_NumWorkers>, VersionedClause<ACCC_Self>, - VersionedClause<ACCC_VectorLength>, - VersionedClause<ACCC_Wait> + VersionedClause<ACCC_VectorLength> ]; } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits