[llvm] f1c9128 - [flang][openacc] Align async check for combined construct (#139744)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 13 23:24:39 PDT 2025
Author: Valentin Clement (バレンタイン クレメン)
Date: 2025-05-14T08:24:35+02:00
New Revision: f1c9128115f1cf8b9638513f85093837fa593f01
URL: https://github.com/llvm/llvm-project/commit/f1c9128115f1cf8b9638513f85093837fa593f01
DIFF: https://github.com/llvm/llvm-project/commit/f1c9128115f1cf8b9638513f85093837fa593f01.diff
LOG: [flang][openacc] Align async check for combined construct (#139744)
Align async clause check for combined construct to behave the same as
parallel, kernels and serial.
Added:
Modified:
flang/test/Lower/OpenACC/acc-kernels-loop.f90
flang/test/Lower/OpenACC/acc-parallel-loop.f90
flang/test/Lower/OpenACC/acc-serial-loop.f90
flang/test/Semantics/OpenACC/acc-kernels-loop.f90
flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
flang/test/Semantics/OpenACC/acc-serial-loop.f90
llvm/include/llvm/Frontend/OpenACC/ACC.td
Removed:
################################################################################
diff --git a/flang/test/Lower/OpenACC/acc-kernels-loop.f90 b/flang/test/Lower/OpenACC/acc-kernels-loop.f90
index 0ded708cb1a3b..a330b7d491d06 100644
--- a/flang/test/Lower/OpenACC/acc-kernels-loop.f90
+++ b/flang/test/Lower/OpenACC/acc-kernels-loop.f90
@@ -102,6 +102,12 @@ subroutine acc_kernels_loop
! CHECK: acc.terminator
! CHECK-NEXT: }{{$}}
+ !$acc kernels loop async(async) device_type(nvidia) async(1)
+ DO i = 1, n
+ a(i) = b(i)
+ END DO
+! CHECK: acc.kernels combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
+
!$acc kernels loop wait
DO i = 1, n
a(i) = b(i)
diff --git a/flang/test/Lower/OpenACC/acc-parallel-loop.f90 b/flang/test/Lower/OpenACC/acc-parallel-loop.f90
index ccd37d87262e3..1e1fc7448a513 100644
--- a/flang/test/Lower/OpenACC/acc-parallel-loop.f90
+++ b/flang/test/Lower/OpenACC/acc-parallel-loop.f90
@@ -104,6 +104,12 @@ subroutine acc_parallel_loop
! CHECK: acc.yield
! CHECK-NEXT: }{{$}}
+ !$acc parallel loop async(async) device_type(nvidia) async(1)
+ DO i = 1, n
+ a(i) = b(i)
+ END DO
+! CHECK: acc.parallel combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
+
!$acc parallel loop wait
DO i = 1, n
a(i) = b(i)
diff --git a/flang/test/Lower/OpenACC/acc-serial-loop.f90 b/flang/test/Lower/OpenACC/acc-serial-loop.f90
index 478dfa0d96c3b..98fc28990265a 100644
--- a/flang/test/Lower/OpenACC/acc-serial-loop.f90
+++ b/flang/test/Lower/OpenACC/acc-serial-loop.f90
@@ -123,6 +123,12 @@ subroutine acc_serial_loop
! CHECK: acc.yield
! CHECK-NEXT: }{{$}}
+ !$acc serial loop async(async) device_type(nvidia) async(1)
+ DO i = 1, n
+ a(i) = b(i)
+ END DO
+! CHECK: acc.serial combined(loop) async(%{{.*}} : i32, %c1{{.*}} : i32 [#acc.device_type<nvidia>])
+
!$acc serial loop wait
DO i = 1, n
a(i) = b(i)
diff --git a/flang/test/Semantics/OpenACC/acc-kernels-loop.f90 b/flang/test/Semantics/OpenACC/acc-kernels-loop.f90
index 8653978fb6249..29985a02eb6ef 100644
--- a/flang/test/Semantics/OpenACC/acc-kernels-loop.f90
+++ b/flang/test/Semantics/OpenACC/acc-kernels-loop.f90
@@ -295,4 +295,13 @@ program openacc_kernels_loop_validity
if(i == 10) cycle
end do
+ !$acc kernels loop async(1) device_type(nvidia) async(3)
+ do i = 1, n
+ end do
+
+!ERROR: At most one ASYNC clause can appear on the KERNELS LOOP directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels loop async(1) device_type(nvidia) async async
+ do i = 1, n
+ end do
+
end program openacc_kernels_loop_validity
diff --git a/flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90 b/flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
index 7f33f9e145110..78e1a7ad7c452 100644
--- a/flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
+++ b/flang/test/Semantics/OpenACC/acc-parallel-loop-validity.f90
@@ -141,4 +141,13 @@ program openacc_parallel_loop_validity
if(i == 10) cycle
end do
+ !$acc parallel loop async(1) device_type(nvidia) async(3)
+ do i = 1, n
+ end do
+
+!ERROR: At most one ASYNC clause can appear on the PARALLEL LOOP directive or in group separated by the DEVICE_TYPE clause
+ !$acc parallel loop async(1) device_type(nvidia) async async
+ do i = 1, n
+ end do
+
end program openacc_parallel_loop_validity
diff --git a/flang/test/Semantics/OpenACC/acc-serial-loop.f90 b/flang/test/Semantics/OpenACC/acc-serial-loop.f90
index 2832274680eca..5d2be7f7c6474 100644
--- a/flang/test/Semantics/OpenACC/acc-serial-loop.f90
+++ b/flang/test/Semantics/OpenACC/acc-serial-loop.f90
@@ -111,4 +111,13 @@ program openacc_serial_loop_validity
if(i == 10) cycle
end do
+ !$acc serial loop async(1) device_type(nvidia) async(3)
+ do i = 1, n
+ end do
+
+!ERROR: At most one ASYNC clause can appear on the SERIAL LOOP directive or in group separated by the DEVICE_TYPE clause
+ !$acc serial loop async(1) device_type(nvidia) async async
+ do i = 1, n
+ end do
+
end program openacc_serial_loop_validity
diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td
index d372fc221e4b4..46cba9f2400e1 100644
--- a/llvm/include/llvm/Frontend/OpenACC/ACC.td
+++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td
@@ -556,35 +556,31 @@ def ACC_HostData : Directive<"host_data"> {
// 2.11
def ACC_KernelsLoop : Directive<"kernels loop"> {
- let allowedClauses = [
- VersionedClause<ACCC_Attach>,
- VersionedClause<ACCC_Collapse>,
- VersionedClause<ACCC_Copy>,
- VersionedClause<ACCC_Copyin>,
- VersionedClause<ACCC_Copyout>,
- VersionedClause<ACCC_Create>,
- VersionedClause<ACCC_DevicePtr>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_Gang>,
- VersionedClause<ACCC_NoCreate>,
- VersionedClause<ACCC_NumGangs>,
- VersionedClause<ACCC_NumWorkers>,
- VersionedClause<ACCC_Present>,
- VersionedClause<ACCC_Private>,
- VersionedClause<ACCC_Reduction>,
- VersionedClause<ACCC_ShortLoop>,
- VersionedClause<ACCC_Tile>,
- VersionedClause<ACCC_Vector>,
- VersionedClause<ACCC_VectorLength>,
- VersionedClause<ACCC_Wait>,
- VersionedClause<ACCC_Worker>
- ];
- let allowedOnceClauses = [
- VersionedClause<ACCC_Async>,
- VersionedClause<ACCC_Default>,
- VersionedClause<ACCC_If>,
- VersionedClause<ACCC_Self>
- ];
+ let allowedClauses = [VersionedClause<ACCC_Async>,
+ VersionedClause<ACCC_Attach>,
+ VersionedClause<ACCC_Collapse>,
+ VersionedClause<ACCC_Copy>,
+ VersionedClause<ACCC_Copyin>,
+ VersionedClause<ACCC_Copyout>,
+ VersionedClause<ACCC_Create>,
+ VersionedClause<ACCC_DevicePtr>,
+ VersionedClause<ACCC_DeviceType>,
+ VersionedClause<ACCC_Gang>,
+ VersionedClause<ACCC_NoCreate>,
+ VersionedClause<ACCC_NumGangs>,
+ VersionedClause<ACCC_NumWorkers>,
+ VersionedClause<ACCC_Present>,
+ VersionedClause<ACCC_Private>,
+ VersionedClause<ACCC_Reduction>,
+ VersionedClause<ACCC_ShortLoop>,
+ VersionedClause<ACCC_Tile>,
+ VersionedClause<ACCC_Vector>,
+ VersionedClause<ACCC_VectorLength>,
+ VersionedClause<ACCC_Wait>,
+ VersionedClause<ACCC_Worker>];
+ let allowedOnceClauses = [VersionedClause<ACCC_Default>,
+ VersionedClause<ACCC_If>,
+ VersionedClause<ACCC_Self>];
let allowedExclusiveClauses = [
VersionedClause<ACCC_Auto>,
VersionedClause<ACCC_Independent>,
@@ -596,36 +592,32 @@ def ACC_KernelsLoop : Directive<"kernels loop"> {
// 2.11
def ACC_ParallelLoop : Directive<"parallel loop"> {
- let allowedClauses = [
- VersionedClause<ACCC_Attach>,
- VersionedClause<ACCC_Collapse>,
- VersionedClause<ACCC_Copy>,
- VersionedClause<ACCC_Copyin>,
- VersionedClause<ACCC_Copyout>,
- VersionedClause<ACCC_Create>,
- VersionedClause<ACCC_DevicePtr>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_FirstPrivate>,
- VersionedClause<ACCC_Gang>,
- VersionedClause<ACCC_NoCreate>,
- VersionedClause<ACCC_NumGangs>,
- VersionedClause<ACCC_NumWorkers>,
- VersionedClause<ACCC_Present>,
- VersionedClause<ACCC_Private>,
- VersionedClause<ACCC_Reduction>,
- VersionedClause<ACCC_ShortLoop>,
- VersionedClause<ACCC_Tile>,
- VersionedClause<ACCC_Vector>,
- VersionedClause<ACCC_VectorLength>,
- VersionedClause<ACCC_Wait>,
- VersionedClause<ACCC_Worker>
- ];
- let allowedOnceClauses = [
- VersionedClause<ACCC_Async>,
- VersionedClause<ACCC_Default>,
- VersionedClause<ACCC_If>,
- VersionedClause<ACCC_Self>
- ];
+ let allowedClauses = [VersionedClause<ACCC_Async>,
+ VersionedClause<ACCC_Attach>,
+ VersionedClause<ACCC_Collapse>,
+ VersionedClause<ACCC_Copy>,
+ VersionedClause<ACCC_Copyin>,
+ VersionedClause<ACCC_Copyout>,
+ VersionedClause<ACCC_Create>,
+ VersionedClause<ACCC_DevicePtr>,
+ VersionedClause<ACCC_DeviceType>,
+ VersionedClause<ACCC_FirstPrivate>,
+ VersionedClause<ACCC_Gang>,
+ VersionedClause<ACCC_NoCreate>,
+ VersionedClause<ACCC_NumGangs>,
+ VersionedClause<ACCC_NumWorkers>,
+ VersionedClause<ACCC_Present>,
+ VersionedClause<ACCC_Private>,
+ VersionedClause<ACCC_Reduction>,
+ VersionedClause<ACCC_ShortLoop>,
+ VersionedClause<ACCC_Tile>,
+ VersionedClause<ACCC_Vector>,
+ VersionedClause<ACCC_VectorLength>,
+ VersionedClause<ACCC_Wait>,
+ VersionedClause<ACCC_Worker>];
+ let allowedOnceClauses = [VersionedClause<ACCC_Default>,
+ VersionedClause<ACCC_If>,
+ VersionedClause<ACCC_Self>];
let allowedExclusiveClauses = [
VersionedClause<ACCC_Auto>,
VersionedClause<ACCC_Independent>,
@@ -637,33 +629,29 @@ def ACC_ParallelLoop : Directive<"parallel loop"> {
// 2.11
def ACC_SerialLoop : Directive<"serial loop"> {
- let allowedClauses = [
- VersionedClause<ACCC_Attach>,
- VersionedClause<ACCC_Collapse>,
- VersionedClause<ACCC_Copy>,
- VersionedClause<ACCC_Copyin>,
- VersionedClause<ACCC_Copyout>,
- VersionedClause<ACCC_Create>,
- VersionedClause<ACCC_DevicePtr>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_FirstPrivate>,
- VersionedClause<ACCC_Gang>,
- VersionedClause<ACCC_NoCreate>,
- VersionedClause<ACCC_Present>,
- VersionedClause<ACCC_Private>,
- VersionedClause<ACCC_Reduction>,
- VersionedClause<ACCC_ShortLoop>,
- VersionedClause<ACCC_Tile>,
- VersionedClause<ACCC_Vector>,
- VersionedClause<ACCC_Wait>,
- VersionedClause<ACCC_Worker>
- ];
- let allowedOnceClauses = [
- VersionedClause<ACCC_Async>,
- VersionedClause<ACCC_Default>,
- VersionedClause<ACCC_If>,
- VersionedClause<ACCC_Self>
- ];
+ let allowedClauses = [VersionedClause<ACCC_Async>,
+ VersionedClause<ACCC_Attach>,
+ VersionedClause<ACCC_Collapse>,
+ VersionedClause<ACCC_Copy>,
+ VersionedClause<ACCC_Copyin>,
+ VersionedClause<ACCC_Copyout>,
+ VersionedClause<ACCC_Create>,
+ VersionedClause<ACCC_DevicePtr>,
+ VersionedClause<ACCC_DeviceType>,
+ VersionedClause<ACCC_FirstPrivate>,
+ VersionedClause<ACCC_Gang>,
+ VersionedClause<ACCC_NoCreate>,
+ VersionedClause<ACCC_Present>,
+ VersionedClause<ACCC_Private>,
+ VersionedClause<ACCC_Reduction>,
+ VersionedClause<ACCC_ShortLoop>,
+ VersionedClause<ACCC_Tile>,
+ VersionedClause<ACCC_Vector>,
+ VersionedClause<ACCC_Wait>,
+ VersionedClause<ACCC_Worker>];
+ let allowedOnceClauses = [VersionedClause<ACCC_Default>,
+ VersionedClause<ACCC_If>,
+ VersionedClause<ACCC_Self>];
let allowedExclusiveClauses = [
VersionedClause<ACCC_Auto>,
VersionedClause<ACCC_Independent>,
More information about the llvm-commits
mailing list