diff options
author | Valentin Clement <clementval@gmail.com> | 2020-12-04 15:12:05 -0500 |
---|---|---|
committer | clementval <clementval@gmail.com> | 2020-12-04 15:12:15 -0500 |
commit | a366188d801ccefb4ef3f9d89415e97accc77443 (patch) | |
tree | a2fbf4f1f641e26a3bf708b68817ba483590d9c6 | |
parent | 88c21f8488646b6809d46c197077cfb40b5ac15b (diff) | |
download | llvm-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.f90 | 37 | ||||
-rw-r--r-- | llvm/include/llvm/Frontend/OpenACC/ACC.td | 3 |
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>, |