[flang-commits] [flang] 875b4fd - [flang][openacc] Add clause validity tests for the kernels directive
via flang-commits
flang-commits at lists.llvm.org
Mon Dec 7 11:27:28 PST 2020
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>
];
}
More information about the flang-commits
mailing list