aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Clement <clementval@gmail.com>2020-12-04 15:12:05 -0500
committerclementval <clementval@gmail.com>2020-12-04 15:12:15 -0500
commita366188d801ccefb4ef3f9d89415e97accc77443 (patch)
treea2fbf4f1f641e26a3bf708b68817ba483590d9c6
parent88c21f8488646b6809d46c197077cfb40b5ac15b (diff)
downloadllvm-a366188d801ccefb4ef3f9d89415e97accc77443.zip
llvm-a366188d801ccefb4ef3f9d89415e97accc77443.tar.gz
llvm-a366188d801ccefb4ef3f9d89415e97accc77443.tar.bz2
[flang][openacc] Add clause validaty tests for data construct + fix default restriction
Add clause validity tests for the data construct. The default clause can appear only once and this was not enforce in the ACC.td. Reviewed By: sameeranjoshi Differential Revision: https://reviews.llvm.org/D91888
-rw-r--r--flang/test/Semantics/acc-clause-validity.f9037
-rw-r--r--llvm/include/llvm/Frontend/OpenACC/ACC.td3
2 files changed, 38 insertions, 2 deletions
diff --git a/flang/test/Semantics/acc-clause-validity.f90 b/flang/test/Semantics/acc-clause-validity.f90
index b2fb577..64e6ca8 100644
--- a/flang/test/Semantics/acc-clause-validity.f90
+++ b/flang/test/Semantics/acc-clause-validity.f90
@@ -131,7 +131,42 @@ program openacc_clause_validity
!$acc data
!$acc end data
- !$acc data copyin(i)
+ !$acc data copy(aa) if(.true.)
+ !$acc end data
+
+ !$acc data copy(aa) if(ifCondition)
+ !$acc end data
+
+ !$acc data copy(aa, bb, cc)
+ !$acc end data
+
+ !$acc data copyin(aa) copyin(readonly: bb) copyout(cc)
+ !$acc end data
+
+ !$acc data copyin(readonly: aa, bb) copyout(zero: cc)
+ !$acc end data
+
+ !$acc data create(aa, bb(:,:)) create(zero: cc(:,:))
+ !$acc end data
+
+ !$acc data no_create(aa) present(bb, cc)
+ !$acc end data
+
+ !$acc data deviceptr(aa) attach(bb, cc)
+ !$acc end data
+
+ !$acc data copy(aa, bb) default(none)
+ !$acc end data
+
+ !$acc data copy(aa, bb) default(present)
+ !$acc end data
+
+ !ERROR: At most one DEFAULT clause can appear on the DATA directive
+ !$acc data copy(aa, bb) default(none) default(present)
+ !$acc end data
+
+ !ERROR: At most one IF clause can appear on the DATA directive
+ !$acc data copy(aa) if(.true.) if(ifCondition)
!$acc end data
!$acc data copyin(i)
diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td
index 10fe344..eaca44f 100644
--- a/llvm/include/llvm/Frontend/OpenACC/ACC.td
+++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td
@@ -257,7 +257,8 @@ def ACC_Atomic : Directive<"atomic"> {}
// 2.6.5
def ACC_Data : Directive<"data"> {
let allowedOnceClauses = [
- VersionedClause<ACCC_If>
+ VersionedClause<ACCC_If>,
+ VersionedClause<ACCC_Default>
];
let requiredClauses = [
VersionedClause<ACCC_Attach>,