Skip to content

Commit f1c9128

Browse files
authored
[flang][openacc] Align async check for combined construct (llvm#139744)
Align async clause check for combined construct to behave the same as parallel, kernels and serial.
1 parent 7e098be commit f1c9128

File tree

7 files changed

+119
-86
lines changed

7 files changed

+119
-86
lines changed

flang/test/Lower/OpenACC/acc-kernels-loop.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ subroutine acc_kernels_loop
102102
! CHECK: acc.terminator
103103
! CHECK-NEXT: }{{$}}
104104

105+
!$acc kernels loop async(async) device_type(nvidia) async(1)
106+
DO i = 1, n
107+
a(i) = b(i)
108+
END DO
109+
! CHECK: acc.kernels combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
110+
105111
!$acc kernels loop wait
106112
DO i = 1, n
107113
a(i) = b(i)

flang/test/Lower/OpenACC/acc-parallel-loop.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ subroutine acc_parallel_loop
104104
! CHECK: acc.yield
105105
! CHECK-NEXT: }{{$}}
106106

107+
!$acc parallel loop async(async) device_type(nvidia) async(1)
108+
DO i = 1, n
109+
a(i) = b(i)
110+
END DO
111+
! CHECK: acc.parallel combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
112+
107113
!$acc parallel loop wait
108114
DO i = 1, n
109115
a(i) = b(i)

flang/test/Lower/OpenACC/acc-serial-loop.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ subroutine acc_serial_loop
123123
! CHECK: acc.yield
124124
! CHECK-NEXT: }{{$}}
125125

126+
!$acc serial loop async(async) device_type(nvidia) async(1)
127+
DO i = 1, n
128+
a(i) = b(i)
129+
END DO
130+
! CHECK: acc.serial combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
131+
126132
!$acc serial loop wait
127133
DO i = 1, n
128134
a(i) = b(i)

flang/test/Semantics/OpenACC/acc-kernels-loop.f90

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,4 +295,13 @@ program openacc_kernels_loop_validity
295295
if(i == 10) cycle
296296
end do
297297

298+
!$acc kernels loop async(1) device_type(nvidia) async(3)
299+
do i = 1, n
300+
end do
301+
302+
!ERROR: At most one ASYNC clause can appear on the KERNELS LOOP directive or in group separated by the DEVICE_TYPE clause
303+
!$acc kernels loop async(1) device_type(nvidia) async async
304+
do i = 1, n
305+
end do
306+
298307
end program openacc_kernels_loop_validity

flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,13 @@ program openacc_parallel_loop_validity
141141
if(i == 10) cycle
142142
end do
143143

144+
!$acc parallel loop async(1) device_type(nvidia) async(3)
145+
do i = 1, n
146+
end do
147+
148+
!ERROR: At most one ASYNC clause can appear on the PARALLEL LOOP directive or in group separated by the DEVICE_TYPE clause
149+
!$acc parallel loop async(1) device_type(nvidia) async async
150+
do i = 1, n
151+
end do
152+
144153
end program openacc_parallel_loop_validity

flang/test/Semantics/OpenACC/acc-serial-loop.f90

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,13 @@ program openacc_serial_loop_validity
111111
if(i == 10) cycle
112112
end do
113113

114+
!$acc serial loop async(1) device_type(nvidia) async(3)
115+
do i = 1, n
116+
end do
117+
118+
!ERROR: At most one ASYNC clause can appear on the SERIAL LOOP directive or in group separated by the DEVICE_TYPE clause
119+
!$acc serial loop async(1) device_type(nvidia) async async
120+
do i = 1, n
121+
end do
122+
114123
end program openacc_serial_loop_validity

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

Lines changed: 74 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -556,35 +556,31 @@ def ACC_HostData : Directive<"host_data"> {
556556

557557
// 2.11
558558
def ACC_KernelsLoop : Directive<"kernels loop"> {
559-
let allowedClauses = [
560-
VersionedClause<ACCC_Attach>,
561-
VersionedClause<ACCC_Collapse>,
562-
VersionedClause<ACCC_Copy>,
563-
VersionedClause<ACCC_Copyin>,
564-
VersionedClause<ACCC_Copyout>,
565-
VersionedClause<ACCC_Create>,
566-
VersionedClause<ACCC_DevicePtr>,
567-
VersionedClause<ACCC_DeviceType>,
568-
VersionedClause<ACCC_Gang>,
569-
VersionedClause<ACCC_NoCreate>,
570-
VersionedClause<ACCC_NumGangs>,
571-
VersionedClause<ACCC_NumWorkers>,
572-
VersionedClause<ACCC_Present>,
573-
VersionedClause<ACCC_Private>,
574-
VersionedClause<ACCC_Reduction>,
575-
VersionedClause<ACCC_ShortLoop>,
576-
VersionedClause<ACCC_Tile>,
577-
VersionedClause<ACCC_Vector>,
578-
VersionedClause<ACCC_VectorLength>,
579-
VersionedClause<ACCC_Wait>,
580-
VersionedClause<ACCC_Worker>
581-
];
582-
let allowedOnceClauses = [
583-
VersionedClause<ACCC_Async>,
584-
VersionedClause<ACCC_Default>,
585-
VersionedClause<ACCC_If>,
586-
VersionedClause<ACCC_Self>
587-
];
559+
let allowedClauses = [VersionedClause<ACCC_Async>,
560+
VersionedClause<ACCC_Attach>,
561+
VersionedClause<ACCC_Collapse>,
562+
VersionedClause<ACCC_Copy>,
563+
VersionedClause<ACCC_Copyin>,
564+
VersionedClause<ACCC_Copyout>,
565+
VersionedClause<ACCC_Create>,
566+
VersionedClause<ACCC_DevicePtr>,
567+
VersionedClause<ACCC_DeviceType>,
568+
VersionedClause<ACCC_Gang>,
569+
VersionedClause<ACCC_NoCreate>,
570+
VersionedClause<ACCC_NumGangs>,
571+
VersionedClause<ACCC_NumWorkers>,
572+
VersionedClause<ACCC_Present>,
573+
VersionedClause<ACCC_Private>,
574+
VersionedClause<ACCC_Reduction>,
575+
VersionedClause<ACCC_ShortLoop>,
576+
VersionedClause<ACCC_Tile>,
577+
VersionedClause<ACCC_Vector>,
578+
VersionedClause<ACCC_VectorLength>,
579+
VersionedClause<ACCC_Wait>,
580+
VersionedClause<ACCC_Worker>];
581+
let allowedOnceClauses = [VersionedClause<ACCC_Default>,
582+
VersionedClause<ACCC_If>,
583+
VersionedClause<ACCC_Self>];
588584
let allowedExclusiveClauses = [
589585
VersionedClause<ACCC_Auto>,
590586
VersionedClause<ACCC_Independent>,
@@ -596,36 +592,32 @@ def ACC_KernelsLoop : Directive<"kernels loop"> {
596592

597593
// 2.11
598594
def ACC_ParallelLoop : Directive<"parallel loop"> {
599-
let allowedClauses = [
600-
VersionedClause<ACCC_Attach>,
601-
VersionedClause<ACCC_Collapse>,
602-
VersionedClause<ACCC_Copy>,
603-
VersionedClause<ACCC_Copyin>,
604-
VersionedClause<ACCC_Copyout>,
605-
VersionedClause<ACCC_Create>,
606-
VersionedClause<ACCC_DevicePtr>,
607-
VersionedClause<ACCC_DeviceType>,
608-
VersionedClause<ACCC_FirstPrivate>,
609-
VersionedClause<ACCC_Gang>,
610-
VersionedClause<ACCC_NoCreate>,
611-
VersionedClause<ACCC_NumGangs>,
612-
VersionedClause<ACCC_NumWorkers>,
613-
VersionedClause<ACCC_Present>,
614-
VersionedClause<ACCC_Private>,
615-
VersionedClause<ACCC_Reduction>,
616-
VersionedClause<ACCC_ShortLoop>,
617-
VersionedClause<ACCC_Tile>,
618-
VersionedClause<ACCC_Vector>,
619-
VersionedClause<ACCC_VectorLength>,
620-
VersionedClause<ACCC_Wait>,
621-
VersionedClause<ACCC_Worker>
622-
];
623-
let allowedOnceClauses = [
624-
VersionedClause<ACCC_Async>,
625-
VersionedClause<ACCC_Default>,
626-
VersionedClause<ACCC_If>,
627-
VersionedClause<ACCC_Self>
628-
];
595+
let allowedClauses = [VersionedClause<ACCC_Async>,
596+
VersionedClause<ACCC_Attach>,
597+
VersionedClause<ACCC_Collapse>,
598+
VersionedClause<ACCC_Copy>,
599+
VersionedClause<ACCC_Copyin>,
600+
VersionedClause<ACCC_Copyout>,
601+
VersionedClause<ACCC_Create>,
602+
VersionedClause<ACCC_DevicePtr>,
603+
VersionedClause<ACCC_DeviceType>,
604+
VersionedClause<ACCC_FirstPrivate>,
605+
VersionedClause<ACCC_Gang>,
606+
VersionedClause<ACCC_NoCreate>,
607+
VersionedClause<ACCC_NumGangs>,
608+
VersionedClause<ACCC_NumWorkers>,
609+
VersionedClause<ACCC_Present>,
610+
VersionedClause<ACCC_Private>,
611+
VersionedClause<ACCC_Reduction>,
612+
VersionedClause<ACCC_ShortLoop>,
613+
VersionedClause<ACCC_Tile>,
614+
VersionedClause<ACCC_Vector>,
615+
VersionedClause<ACCC_VectorLength>,
616+
VersionedClause<ACCC_Wait>,
617+
VersionedClause<ACCC_Worker>];
618+
let allowedOnceClauses = [VersionedClause<ACCC_Default>,
619+
VersionedClause<ACCC_If>,
620+
VersionedClause<ACCC_Self>];
629621
let allowedExclusiveClauses = [
630622
VersionedClause<ACCC_Auto>,
631623
VersionedClause<ACCC_Independent>,
@@ -637,33 +629,29 @@ def ACC_ParallelLoop : Directive<"parallel loop"> {
637629

638630
// 2.11
639631
def ACC_SerialLoop : Directive<"serial loop"> {
640-
let allowedClauses = [
641-
VersionedClause<ACCC_Attach>,
642-
VersionedClause<ACCC_Collapse>,
643-
VersionedClause<ACCC_Copy>,
644-
VersionedClause<ACCC_Copyin>,
645-
VersionedClause<ACCC_Copyout>,
646-
VersionedClause<ACCC_Create>,
647-
VersionedClause<ACCC_DevicePtr>,
648-
VersionedClause<ACCC_DeviceType>,
649-
VersionedClause<ACCC_FirstPrivate>,
650-
VersionedClause<ACCC_Gang>,
651-
VersionedClause<ACCC_NoCreate>,
652-
VersionedClause<ACCC_Present>,
653-
VersionedClause<ACCC_Private>,
654-
VersionedClause<ACCC_Reduction>,
655-
VersionedClause<ACCC_ShortLoop>,
656-
VersionedClause<ACCC_Tile>,
657-
VersionedClause<ACCC_Vector>,
658-
VersionedClause<ACCC_Wait>,
659-
VersionedClause<ACCC_Worker>
660-
];
661-
let allowedOnceClauses = [
662-
VersionedClause<ACCC_Async>,
663-
VersionedClause<ACCC_Default>,
664-
VersionedClause<ACCC_If>,
665-
VersionedClause<ACCC_Self>
666-
];
632+
let allowedClauses = [VersionedClause<ACCC_Async>,
633+
VersionedClause<ACCC_Attach>,
634+
VersionedClause<ACCC_Collapse>,
635+
VersionedClause<ACCC_Copy>,
636+
VersionedClause<ACCC_Copyin>,
637+
VersionedClause<ACCC_Copyout>,
638+
VersionedClause<ACCC_Create>,
639+
VersionedClause<ACCC_DevicePtr>,
640+
VersionedClause<ACCC_DeviceType>,
641+
VersionedClause<ACCC_FirstPrivate>,
642+
VersionedClause<ACCC_Gang>,
643+
VersionedClause<ACCC_NoCreate>,
644+
VersionedClause<ACCC_Present>,
645+
VersionedClause<ACCC_Private>,
646+
VersionedClause<ACCC_Reduction>,
647+
VersionedClause<ACCC_ShortLoop>,
648+
VersionedClause<ACCC_Tile>,
649+
VersionedClause<ACCC_Vector>,
650+
VersionedClause<ACCC_Wait>,
651+
VersionedClause<ACCC_Worker>];
652+
let allowedOnceClauses = [VersionedClause<ACCC_Default>,
653+
VersionedClause<ACCC_If>,
654+
VersionedClause<ACCC_Self>];
667655
let allowedExclusiveClauses = [
668656
VersionedClause<ACCC_Auto>,
669657
VersionedClause<ACCC_Independent>,

0 commit comments

Comments
 (0)