[flang] [llvm] [flang][openacc] Allow multiple device_type clauses on init and shutdown (PR #135314)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 10 21:07:09 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
Relax the restriction for init and shutdown directives for device_type clause. The clause can be allowed multiple times.
---
Full diff: https://github.com/llvm/llvm-project/pull/135314.diff
5 Files Affected:
- (modified) flang/test/Lower/OpenACC/acc-init.f90 (+3)
- (modified) flang/test/Lower/OpenACC/acc-shutdown.f90 (+3)
- (modified) flang/test/Semantics/OpenACC/acc-init-validity.f90 (+1-1)
- (modified) flang/test/Semantics/OpenACC/acc-shutdown-validity.f90 (+1-1)
- (modified) llvm/include/llvm/Frontend/OpenACC/ACC.td (+6-10)
``````````diff
diff --git a/flang/test/Lower/OpenACC/acc-init.f90 b/flang/test/Lower/OpenACC/acc-init.f90
index 2fbb9550548a9..cc1abc4b294c7 100644
--- a/flang/test/Lower/OpenACC/acc-init.f90
+++ b/flang/test/Lower/OpenACC/acc-init.f90
@@ -35,4 +35,7 @@ subroutine acc_init
!$acc init device_type(nvidia)
!CHECK: acc.init attributes {device_types = [#acc.device_type<nvidia>]}
+ !$acc init device_type(host) device_type(multicore)
+!CHECK: acc.init attributes {device_types = [#acc.device_type<host>, #acc.device_type<multicore>]}
+
end subroutine acc_init
diff --git a/flang/test/Lower/OpenACC/acc-shutdown.f90 b/flang/test/Lower/OpenACC/acc-shutdown.f90
index 6c080b932f92e..304dd4fae6db5 100644
--- a/flang/test/Lower/OpenACC/acc-shutdown.f90
+++ b/flang/test/Lower/OpenACC/acc-shutdown.f90
@@ -25,4 +25,7 @@ subroutine acc_shutdown
!CHECK: [[DEVNUM:%.*]] = arith.constant 1 : i32
!CHECK: acc.shutdown device_num([[DEVNUM]] : i32) attributes {device_types = [#acc.device_type<default>, #acc.device_type<nvidia>]}
+ !$acc shutdown device_type(default) device_type(nvidia)
+!CHECK: acc.shutdown attributes {device_types = [#acc.device_type<default>, #acc.device_type<nvidia>]}
+
end subroutine acc_shutdown
diff --git a/flang/test/Semantics/OpenACC/acc-init-validity.f90 b/flang/test/Semantics/OpenACC/acc-init-validity.f90
index 3b594a25217c0..083a2415a5d77 100644
--- a/flang/test/Semantics/OpenACC/acc-init-validity.f90
+++ b/flang/test/Semantics/OpenACC/acc-init-validity.f90
@@ -93,7 +93,7 @@ program openacc_init_validity
!ERROR: At most one DEVICE_NUM clause can appear on the INIT directive
!$acc init device_num(1) device_num(i)
- !ERROR: At most one DEVICE_TYPE clause can appear on the INIT directive
+ ! OK
!$acc init device_type(nvidia) device_type(default, *)
!ERROR: Must have LOGICAL or INTEGER type
diff --git a/flang/test/Semantics/OpenACC/acc-shutdown-validity.f90 b/flang/test/Semantics/OpenACC/acc-shutdown-validity.f90
index 43aed4fc98f42..163130d41bdcc 100644
--- a/flang/test/Semantics/OpenACC/acc-shutdown-validity.f90
+++ b/flang/test/Semantics/OpenACC/acc-shutdown-validity.f90
@@ -90,7 +90,7 @@ program openacc_shutdown_validity
!ERROR: At most one DEVICE_NUM clause can appear on the SHUTDOWN directive
!$acc shutdown device_num(1) device_num(i)
- !ERROR: At most one DEVICE_TYPE clause can appear on the SHUTDOWN directive
+ ! OK
!$acc shutdown device_type(*) device_type(host, default)
end program openacc_shutdown_validity
diff --git a/llvm/include/llvm/Frontend/OpenACC/ACC.td b/llvm/include/llvm/Frontend/OpenACC/ACC.td
index f3eefb52fc46d..8729d4505205b 100644
--- a/llvm/include/llvm/Frontend/OpenACC/ACC.td
+++ b/llvm/include/llvm/Frontend/OpenACC/ACC.td
@@ -432,11 +432,9 @@ def ACC_Cache : Directive<"cache"> {
// 2.14.1
def ACC_Init : Directive<"init"> {
- let allowedOnceClauses = [
- VersionedClause<ACCC_DeviceNum>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_If>
- ];
+ let allowedOnceClauses = [VersionedClause<ACCC_DeviceNum>,
+ VersionedClause<ACCC_If>];
+ let allowedClauses = [VersionedClause<ACCC_DeviceType>];
let association = AS_None;
let category = CA_Executable;
}
@@ -480,11 +478,9 @@ def ACC_Set : Directive<"set"> {
// 2.14.2
def ACC_Shutdown : Directive<"shutdown"> {
- let allowedOnceClauses = [
- VersionedClause<ACCC_DeviceNum>,
- VersionedClause<ACCC_DeviceType>,
- VersionedClause<ACCC_If>
- ];
+ let allowedOnceClauses = [VersionedClause<ACCC_DeviceNum>,
+ VersionedClause<ACCC_If>];
+ let allowedClauses = [VersionedClause<ACCC_DeviceType>];
let association = AS_None;
let category = CA_Executable;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/135314
More information about the llvm-commits
mailing list