[flang-commits] [flang] [llvm] [flang][openacc] Allow multiple device_type clauses on init and shutdown (PR #135314)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Thu Apr 10 21:06:36 PDT 2025
https://github.com/clementval created https://github.com/llvm/llvm-project/pull/135314
Relax the restriction for init and shutdown directives for device_type clause. The clause can be allowed multiple times.
>From c9534c444d7b22f75c985f381872b0aaf0bc57dc Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Thu, 10 Apr 2025 21:03:28 -0700
Subject: [PATCH] [flang][openacc] Allow multiple device_type clauses on init
and shutdown
---
flang/test/Lower/OpenACC/acc-init.f90 | 3 +++
flang/test/Lower/OpenACC/acc-shutdown.f90 | 3 +++
.../test/Semantics/OpenACC/acc-init-validity.f90 | 2 +-
.../Semantics/OpenACC/acc-shutdown-validity.f90 | 2 +-
llvm/include/llvm/Frontend/OpenACC/ACC.td | 16 ++++++----------
5 files changed, 14 insertions(+), 12 deletions(-)
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;
}
More information about the flang-commits
mailing list