-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[flang][openacc] Align async check for combined construct #139744
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-flang-fir-hlfir @llvm/pr-subscribers-flang-semantics Author: Valentin Clement (バレンタイン クレメン) (clementval) ChangesAlign async clause check for combined construct to behave the same as parallel, kernels and serial. Full diff: https://github.com/llvm/llvm-project/pull/139744.diff 4 Files Affected:
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>,
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this! Should this have codegen tests? Else I'm fine with it.
Just added some |
Align async clause check for combined construct to behave the same as parallel, kernels and serial.