Skip to content

Commit 875b4fd

Browse files
committed
[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
1 parent dd89249 commit 875b4fd

File tree

2 files changed

+113
-23
lines changed

2 files changed

+113
-23
lines changed

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

Lines changed: 110 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -506,26 +506,6 @@ program openacc_clause_validity
506506
end do
507507
!$acc end parallel loop
508508

509-
!$acc kernels device_type(*) async
510-
do i = 1, N
511-
a(i) = 3.14
512-
end do
513-
!$acc end kernels
514-
515-
!ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS directive
516-
!$acc kernels device_type(*) if(.TRUE.)
517-
do i = 1, N
518-
a(i) = 3.14
519-
end do
520-
!$acc end kernels
521-
522-
!ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive
523-
!$acc kernels loop device_type(*) if(.TRUE.)
524-
do i = 1, N
525-
a(i) = 3.14
526-
end do
527-
!$acc end kernels loop
528-
529509
!$acc serial device_type(*) async
530510
do i = 1, N
531511
a(i) = 3.14
@@ -622,18 +602,128 @@ program openacc_clause_validity
622602
reduction_l = d(i) .neqv. e(i)
623603
end do
624604

605+
!$acc kernels async
606+
!$acc end kernels
607+
608+
!$acc kernels async(1)
609+
!$acc end kernels
610+
611+
!$acc kernels async(async1)
612+
!$acc end kernels
613+
614+
!$acc kernels wait(wait1)
615+
!$acc end kernels
616+
617+
!$acc kernels wait(wait1, wait2)
618+
!$acc end kernels
619+
625620
!$acc kernels wait(1, 2) async(3)
626621
!$acc end kernels
627622

628623
!$acc kernels wait(queues: 1, 2) async(3)
629624
!$acc end kernels
630625

626+
!$acc kernels wait(1) wait(2) async(3)
627+
!$acc end kernels
628+
631629
!$acc kernels wait(devnum: 1: 1, 2) async(3)
632630
!$acc end kernels
633631

634632
!$acc kernels wait(devnum: 1: queues: 1, 2) async(3)
635633
!$acc end kernels
636634

635+
!$acc kernels num_gangs(8)
636+
!$acc end kernels
637+
638+
!$acc kernels num_workers(8)
639+
!$acc end kernels
640+
641+
!$acc kernels vector_length(128)
642+
!$acc end kernels
643+
644+
!$acc kernels if(.true.)
645+
!$acc end kernels
646+
647+
!$acc kernels if(ifCondition)
648+
!$acc end kernels
649+
650+
!ERROR: At most one IF clause can appear on the KERNELS directive
651+
!$acc kernels if(.true.) if(ifCondition)
652+
!$acc end kernels
653+
654+
!$acc kernels self
655+
!$acc end kernels
656+
657+
!$acc kernels self(.true.)
658+
!$acc end kernels
659+
660+
!$acc kernels self(ifCondition)
661+
!$acc end kernels
662+
663+
!$acc kernels copy(aa) copyin(bb) copyout(cc)
664+
!$acc end kernels
665+
666+
!$acc kernels copy(aa, bb) copyout(zero: cc)
667+
!$acc end kernels
668+
669+
!$acc kernels present(aa, bb) create(cc)
670+
!$acc end kernels
671+
672+
!$acc kernels copyin(readonly: aa, bb) create(zero: cc)
673+
!$acc end kernels
674+
675+
!$acc kernels deviceptr(aa, bb) no_create(cc)
676+
!$acc end kernels
677+
678+
!$acc kernels attach(aa, bb, cc)
679+
!$acc end kernels
680+
681+
!ERROR: PRIVATE clause is not allowed on the KERNELS directive
682+
!$acc kernels private(aa, bb, cc)
683+
!$acc end kernels
684+
685+
!$acc kernels default(none)
686+
!$acc end kernels
687+
688+
!$acc kernels default(present)
689+
!$acc end kernels
690+
691+
!ERROR: At most one DEFAULT clause can appear on the KERNELS directive
692+
!$acc kernels default(none) default(present)
693+
!$acc end kernels
694+
695+
!$acc kernels device_type(*)
696+
!$acc end kernels
697+
698+
!$acc kernels device_type(1)
699+
!$acc end kernels
700+
701+
!$acc kernels device_type(1, 3)
702+
!$acc end kernels
703+
704+
!$acc kernels device_type(*) async wait num_gangs(8) num_workers(8) vector_length(128)
705+
!$acc end kernels
706+
707+
!$acc kernels device_type(*) async
708+
do i = 1, N
709+
a(i) = 3.14
710+
end do
711+
!$acc end kernels
712+
713+
!ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS directive
714+
!$acc kernels device_type(*) if(.TRUE.)
715+
do i = 1, N
716+
a(i) = 3.14
717+
end do
718+
!$acc end kernels
719+
720+
!ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive
721+
!$acc kernels loop device_type(*) if(.TRUE.)
722+
do i = 1, N
723+
a(i) = 3.14
724+
end do
725+
!$acc end kernels loop
726+
637727
!$acc wait
638728

639729
!$acc wait async

llvm/include/llvm/Frontend/OpenACC/ACC.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,8 @@ def ACC_Kernels : Directive<"kernels"> {
298298
VersionedClause<ACCC_DeviceType>,
299299
VersionedClause<ACCC_NoCreate>,
300300
VersionedClause<ACCC_Present>,
301-
VersionedClause<ACCC_DevicePtr>
301+
VersionedClause<ACCC_DevicePtr>,
302+
VersionedClause<ACCC_Wait>
302303
];
303304
let allowedOnceClauses = [
304305
VersionedClause<ACCC_Async>,
@@ -307,8 +308,7 @@ def ACC_Kernels : Directive<"kernels"> {
307308
VersionedClause<ACCC_NumGangs>,
308309
VersionedClause<ACCC_NumWorkers>,
309310
VersionedClause<ACCC_Self>,
310-
VersionedClause<ACCC_VectorLength>,
311-
VersionedClause<ACCC_Wait>
311+
VersionedClause<ACCC_VectorLength>
312312
];
313313
}
314314

0 commit comments

Comments
 (0)