[flang-commits] [flang] bfa6ded - [flang][cuda] Do managed array initialization on the device (#182171)
via flang-commits
flang-commits at lists.llvm.org
Wed Feb 18 15:53:50 PST 2026
Author: Valentin Clement (バレンタイン クレメン)
Date: 2026-02-18T15:53:45-08:00
New Revision: bfa6ded81afc2e532b8e9a46e1927acf3ae484a9
URL: https://github.com/llvm/llvm-project/commit/bfa6ded81afc2e532b8e9a46e1927acf3ae484a9
DIFF: https://github.com/llvm/llvm-project/commit/bfa6ded81afc2e532b8e9a46e1927acf3ae484a9.diff
LOG: [flang][cuda] Do managed array initialization on the device (#182171)
Added:
Modified:
flang/include/flang/Evaluate/tools.h
flang/test/Lower/CUDA/cuda-data-transfer.cuf
Removed:
################################################################################
diff --git a/flang/include/flang/Evaluate/tools.h b/flang/include/flang/Evaluate/tools.h
index 0776a0afb4d92..0fded08456bcf 100644
--- a/flang/include/flang/Evaluate/tools.h
+++ b/flang/include/flang/Evaluate/tools.h
@@ -1349,6 +1349,11 @@ inline bool IsCUDADataTransfer(const A &lhs, const B &rhs) {
int rhsNbManagedSymbols{GetNbOfCUDAManagedOrUnifiedSymbols(rhs)};
int rhsNbSymbols{GetNbOfCUDADeviceSymbols(rhs)};
+ if (lhsNbManagedSymbols >= 1 && lhs.Rank() > 0 && rhsNbSymbols == 0 &&
+ rhsNbManagedSymbols == 0 && (IsVariable(rhs) || IsConstantExpr(rhs))) {
+ return true; // Managed arrays initialization is performed on the device.
+ }
+
// Special cases performed on the host:
// - Only managed or unifed symbols are involved on RHS and LHS.
// - LHS is managed or unified and the RHS is host only.
diff --git a/flang/test/Lower/CUDA/cuda-data-transfer.cuf b/flang/test/Lower/CUDA/cuda-data-transfer.cuf
index 4e96a350a61f3..9da766157f7ea 100644
--- a/flang/test/Lower/CUDA/cuda-data-transfer.cuf
+++ b/flang/test/Lower/CUDA/cuda-data-transfer.cuf
@@ -604,3 +604,15 @@ end subroutine
! CHECK: cuf.alloc !fir.box<!fir.heap<!fir.array<?x!fir.type<_QFsub31Tt30{q:!fir.box<!fir.heap<!fir.array<?xf32>>>}>>>>
! CHECK: hlfir.assign
! CHECK-NOT: cuf.data_transfer
+
+subroutine sub32()
+ integer, managed :: adev(10)
+ integer :: a
+
+ adev = a
+
+ adev = 0
+end subroutine
+
+! CHECK-LABEL: func.func @_QPsub32()
+! CHECK-COUNT-2: cuf.data_transfer
More information about the flang-commits
mailing list