[PATCH] D92447: [flang][openacc] Add clause validity tests for the update directive

Valentin Clement via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 1 19:03:23 PST 2020


clementval created this revision.
clementval added reviewers: sscalpone, kiranktp, SouraVX, kiranchandramohan, sameeranjoshi.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
clementval requested review of this revision.

Add couple of clause validity tests for the update directive and check for
the restriction where at least self, host or device clause must appear on the directive.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D92447

Files:
  flang/lib/Semantics/check-acc-structure.cpp
  flang/test/Semantics/acc-clause-validity.f90


Index: flang/test/Semantics/acc-clause-validity.f90
===================================================================
--- flang/test/Semantics/acc-clause-validity.f90
+++ flang/test/Semantics/acc-clause-validity.f90
@@ -138,9 +138,37 @@
   !ERROR: Unmatched PARALLEL directive
   !$acc end parallel
 
+  !ERROR: At least one of DEVICE, HOST, SELF clause must appear on the UPDATE directive
+  !$acc update
+
   !$acc update self(a, f) host(g) device(h)
 
-  !$acc update device(i) device_type(*) async
+  !$acc update host(aa) async(1)
+
+  !$acc update device(bb) async(async1)
+
+  !ERROR: At most one ASYNC clause can appear on the UPDATE directive
+  !$acc update host(aa, bb) async(1) async(2)
+
+  !$acc update self(bb, cc(:)) wait(1)
+
+  !$acc update device(aa, bb, cc) wait(wait1)
+
+  !$acc update host(aa) host(bb) device(cc) wait(1,2)
+
+  !$acc update device(aa, cc) wait(wait1, wait2)
+
+  !$acc update device(aa) device_type(*) async
+
+  !$acc update host(bb) device_type(*) wait
+
+  !$acc update self(cc) device_type(1,2) async device_type(3) wait
+
+  !ERROR: At most one IF clause can appear on the UPDATE directive
+  !$acc update device(aa) if(.true.) if(ifCondition)
+
+  !ERROR: At most one IF_PRESENT clause can appear on the UPDATE directive
+  !$acc update device(bb) if_present if_present
 
   !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the UPDATE directive
   !$acc update device(i) device_type(*) if(.TRUE.)
Index: flang/lib/Semantics/check-acc-structure.cpp
===================================================================
--- flang/lib/Semantics/check-acc-structure.cpp
+++ flang/lib/Semantics/check-acc-structure.cpp
@@ -201,6 +201,8 @@
     CheckRequireAtLeastOneOf();
     break;
   case llvm::acc::Directive::ACCD_update:
+    // Restriction - line 2636
+    CheckRequireAtLeastOneOf();
     // Restriction - 2301
     CheckOnlyAllowedAfter(llvm::acc::Clause::ACCC_device_type,
         updateOnlyAllowedAfterDeviceTypeClauses);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92447.308840.patch
Type: text/x-patch
Size: 1988 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201202/9b103ea3/attachment.bin>


More information about the llvm-commits mailing list