[flang-commits] [flang] [flang][cuda] Handle variable with initialization in device global pass (PR #124307)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Fri Jan 24 08:45:55 PST 2025
https://github.com/clementval created https://github.com/llvm/llvm-project/pull/124307
None
>From f002353da5f5678cf0972ed4898fd62dc3e80cb6 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Fri, 24 Jan 2025 08:44:33 -0800
Subject: [PATCH] [flang][cuda] Handle variable with initialization in device
global pass
---
.../Optimizer/Transforms/CUFDeviceGlobal.cpp | 12 +++++------
.../Fir/CUDA/cuda-implicit-device-global.f90 | 21 +++++++++++++++++++
2 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp
index 5ce39f99bbb126..7486dde0e281e0 100644
--- a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp
+++ b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp
@@ -36,13 +36,11 @@ static void processAddrOfOp(fir::AddrOfOp addrOfOp,
addrOfOp.getSymbol().getRootReference().getValue())) {
// TO DO: limit candidates to non-scalars. Scalars appear to have been
// folded in already.
- if (globalOp.getConstant()) {
- if (recurseInGlobal)
- globalOp.walk([&](fir::AddrOfOp op) {
- processAddrOfOp(op, symbolTable, candidates, recurseInGlobal);
- });
- candidates.insert(globalOp);
- }
+ if (recurseInGlobal)
+ globalOp.walk([&](fir::AddrOfOp op) {
+ processAddrOfOp(op, symbolTable, candidates, recurseInGlobal);
+ });
+ candidates.insert(globalOp);
}
}
diff --git a/flang/test/Fir/CUDA/cuda-implicit-device-global.f90 b/flang/test/Fir/CUDA/cuda-implicit-device-global.f90
index 9b22ed86e419ce..11866d871a607e 100644
--- a/flang/test/Fir/CUDA/cuda-implicit-device-global.f90
+++ b/flang/test/Fir/CUDA/cuda-implicit-device-global.f90
@@ -308,3 +308,24 @@ // Test that global used in device function are flagged with the correct
// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.c.__builtin_c_devptr
// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.dt.__builtin_c_devptr
// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.n.__builtin_c_devptr
+
+// -----
+
+// Variables with initialization are promoted to non constant global.
+//
+// attributes(global) subroutine kernel4()
+// integer :: a = 4
+// end subroutine
+
+func.func @_QPkernel4() attributes {cuf.proc_attr = #cuf.cuda_proc<global>} {
+ %0 = fir.address_of(@_QFkernel4Ea) : !fir.ref<i32>
+ return
+}
+fir.global internal @_QFkernel4Ea : i32 {
+ %c4_i32 = arith.constant 4 : i32
+ fir.has_value %c4_i32 : i32
+}
+
+// CHECK-LABEL: fir.global internal @_QFkernel4Ea : i32
+// CHECK-LABEL: gpu.module @cuda_device_mod
+// CHECK: fir.global internal @_QFkernel4Ea : i32
More information about the flang-commits
mailing list