Skip to content

Commit

Permalink
[flang][openacc] Add clause validity tests for the kernels directive
Browse files Browse the repository at this point in the history
Add some clause validity tests for the kernels directive

Reviewed By: sameeranjoshi

Differential Revision: https://reviews.llvm.org/D91873
  • Loading branch information
clementval committed Dec 7, 2020
1 parent dd89249 commit 875b4fd
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 23 deletions.
130 changes: 110 additions & 20 deletions flang/test/Semantics/acc-clause-validity.f90
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions llvm/include/llvm/Frontend/OpenACC/ACC.td
Expand Up @@ -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>,
Expand All @@ -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>
];
}

Expand Down

0 comments on commit 875b4fd

Please sign in to comment.