[flang][openacc] Add clause validity tests for the parallel directive
authorValentin Clement <clementval@gmail.com>
Sat, 21 Nov 2020 01:04:54 +0000 (20:04 -0500)
committerclementval <clementval@gmail.com>
Sat, 21 Nov 2020 01:05:10 +0000 (20:05 -0500)
Add some clause validity tests for parallel directive.

Reviewed By: sameeranjoshi

Differential Revision: https://reviews.llvm.org/D91871

flang/test/Semantics/acc-clause-validity.f90

index 3bc36cb..7b3a56e 100644 (file)
@@ -25,9 +25,11 @@ program openacc_clause_validity
   integer, parameter :: N = 256
   integer, dimension(N) :: c
   logical, dimension(N) :: d, e
+  integer :: async1
+  integer :: wait1, wait2
   real :: reduction_r
   logical :: reduction_l
-  real(8), dimension(N, N) :: aa
+  real(8), dimension(N, N) :: aa, bb, cc
   logical :: ifCondition = .TRUE.
 
   !ERROR: At least one clause is required on the DECLARE directive
@@ -304,6 +306,107 @@ program openacc_clause_validity
   end do
   !$acc end parallel
 
+  !$acc parallel async
+  !$acc end parallel
+
+  !$acc parallel async(1)
+  !$acc end parallel
+
+  !$acc parallel async(async1)
+  !$acc end parallel
+
+  !$acc parallel wait
+  !$acc end parallel
+
+  !$acc parallel wait(1)
+  !$acc end parallel
+
+  !$acc parallel wait(wait1)
+  !$acc end parallel
+
+  !$acc parallel wait(1,2)
+  !$acc end parallel
+
+  !$acc parallel wait(wait1, wait2)
+  !$acc end parallel
+
+  !$acc parallel num_gangs(8)
+  !$acc end parallel
+
+  !$acc parallel num_workers(8)
+  !$acc end parallel
+
+  !$acc parallel vector_length(128)
+  !$acc end parallel
+
+  !$acc parallel if(.true.)
+  !$acc end parallel
+
+  !$acc parallel if(ifCondition)
+  !$acc end parallel
+
+  !$acc parallel self
+  !$acc end parallel
+
+  !$acc parallel self(.true.)
+  !$acc end parallel
+
+  !$acc parallel self(ifCondition)
+  !$acc end parallel
+
+  !$acc parallel copy(aa) copyin(bb) copyout(cc)
+  !$acc end parallel
+
+  !$acc parallel copy(aa, bb) copyout(zero: cc)
+  !$acc end parallel
+
+  !$acc parallel present(aa, bb) create(cc)
+  !$acc end parallel
+
+  !$acc parallel copyin(readonly: aa, bb) create(zero: cc)
+  !$acc end parallel
+
+  !$acc parallel deviceptr(aa, bb) no_create(cc)
+  !$acc end parallel
+
+  !$acc parallel attach(aa, bb, cc)
+  !$acc end parallel
+
+  !$acc parallel private(aa) firstprivate(bb, cc)
+  !$acc end parallel
+
+  !$acc parallel default(none)
+  !$acc end parallel
+
+  !$acc parallel default(present)
+  !$acc end parallel
+
+  !$acc parallel device_type(*)
+  !$acc end parallel
+
+  !$acc parallel device_type(1)
+  !$acc end parallel
+
+  !$acc parallel device_type(1, 3)
+  !$acc end parallel
+
+  !ERROR: Clause PRIVATE is not allowed after clause DEVICE_TYPE on the PARALLEL directive
+  !ERROR: Clause FIRSTPRIVATE is not allowed after clause DEVICE_TYPE on the PARALLEL directive
+  !$acc parallel device_type(*) private(aa) firstprivate(bb)
+  !$acc end parallel
+
+  !$acc parallel device_type(*) async
+  !$acc end parallel
+
+  !$acc parallel device_type(*) wait
+  !$acc end parallel
+
+  !$acc parallel device_type(*) num_gangs(8)
+  !$acc end parallel
+
+  !$acc parallel device_type(1) async device_type(2) wait
+  !$acc end parallel
+
   !$acc parallel
   !ERROR: The parameter of the COLLAPSE clause must be a constant positive integer expression
   !$acc loop collapse(-1)