[flang-commits] [flang] [llvm] [flang][openacc] Make num_gangs, num_workers and vector_length behavior homogenous with parallel (PR #136341)
via flang-commits
flang-commits at lists.llvm.org
Fri Apr 18 11:20:49 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
The num_gangs, num_workers and vector_length clauses should behave the same way as with the parallel directive. Update the ACC.td file to allow the clauses multiple times and let the semantic check the device_type sections.
Add some tests.
---
Full diff: https://github.com/llvm/llvm-project/pull/136341.diff
2 Files Affected:
- (modified) flang/test/Semantics/OpenACC/acc-kernels.f90 (+33)
- (modified) llvm/include/llvm/Frontend/OpenACC/ACC.td (+17-21)
``````````diff
diff --git a/flang/test/Semantics/OpenACC/acc-kernels.f90 b/flang/test/Semantics/OpenACC/acc-kernels.f90
index 8a209040a7793..33e253ca8d874 100644
--- a/flang/test/Semantics/OpenACC/acc-kernels.f90
+++ b/flang/test/Semantics/OpenACC/acc-kernels.f90
@@ -61,12 +61,45 @@ program openacc_kernels_validity
!$acc kernels num_gangs(8)
!$acc end kernels
+ !ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels num_gangs(8) num_gangs(10)
+ !$acc end kernels
+
+ !ERROR: At most one NUM_GANGS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels device_type(nvidia) num_gangs(8) num_gangs(10)
+ !$acc end kernels
+
+ !$acc kernels device_type(nvidia) num_gangs(8) device_type(radeon) num_gangs(10)
+ !$acc end kernels
+
!$acc kernels num_workers(8)
!$acc end kernels
+ !ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels num_workers(8) num_workers(4)
+ !$acc end kernels
+
+ !ERROR: At most one NUM_WORKERS clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels device_type(nvidia) num_workers(8) num_workers(4)
+ !$acc end kernels
+
+ !$acc kernels device_type(nvidia) num_workers(8) device_type(radeon) num_workers(4)
+ !$acc end kernels
+
!$acc kernels vector_length(128)
!$acc end kernels
+ !ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels vector_length(128) vector_length(124)
+ !$acc end kernels
+
+ !ERROR: At most one VECTOR_LENGTH clause can appear on the KERNELS directive or in group separated by the DEVICE_TYPE clause
+ !$acc kernels device_type(nvidia) vector_length(256) vector_length(128)
+ !$acc end kernels
+
+ !$acc kernels device_type(nvidia) vector_length(256) device_type(radeon) vector_length(128)
+ !$acc end kernels
+
!$acc kernels if(.true.)
!$acc end kernels
diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td
index e1a4183785d1f..898b7dc9e230f 100644
--- a/llvm/include/llvm/Frontend/OpenACC/ACC.td
+++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td
@@ -319,27 +319,23 @@ def ACC_Declare : Directive<"declare"> {
// 2.5.3
def ACC_Kernels : Directive<"kernels"> {
- let allowedClauses = [
- VersionedClause<ACCC_Attach>,
- VersionedClause<ACCC_Copy>,
- VersionedClause<ACCC_Copyin>,
- VersionedClause<ACCC_Copyout>,
- VersionedClause<ACCC_Create>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_NoCreate>,
- VersionedClause<ACCC_Present>,
- VersionedClause<ACCC_DevicePtr>,
- VersionedClause<ACCC_Wait>
- ];
- let allowedOnceClauses = [
- VersionedClause<ACCC_Async>,
- VersionedClause<ACCC_Default>,
- VersionedClause<ACCC_If>,
- VersionedClause<ACCC_NumGangs>,
- VersionedClause<ACCC_NumWorkers>,
- VersionedClause<ACCC_Self>,
- VersionedClause<ACCC_VectorLength>
- ];
+ let allowedClauses = [VersionedClause<ACCC_Attach>,
+ VersionedClause<ACCC_Copy>,
+ VersionedClause<ACCC_Copyin>,
+ VersionedClause<ACCC_Copyout>,
+ VersionedClause<ACCC_Create>,
+ VersionedClause<ACCC_DeviceType>,
+ VersionedClause<ACCC_NoCreate>,
+ VersionedClause<ACCC_NumGangs>,
+ VersionedClause<ACCC_NumWorkers>,
+ VersionedClause<ACCC_Present>,
+ VersionedClause<ACCC_DevicePtr>,
+ VersionedClause<ACCC_VectorLength>,
+ VersionedClause<ACCC_Wait>];
+ let allowedOnceClauses = [VersionedClause<ACCC_Async>,
+ VersionedClause<ACCC_Default>,
+ VersionedClause<ACCC_If>,
+ VersionedClause<ACCC_Self>];
let association = AS_Block;
let category = CA_Executable;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/136341
More information about the flang-commits
mailing list