[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
This commit is contained in:
Valentin Clement 2020-12-07 14:26:50 -05:00 committed by clementval
parent dd89249498
commit 875b4fd5ee
2 changed files with 113 additions and 23 deletions

View File

@ -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

View File

@ -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>
];
}