[flang-commits] [flang] [flang][cuda] Add option to set priority to the CUDA Fortran constructor (PR #212561)
via flang-commits
flang-commits at lists.llvm.org
Tue Jul 28 10:47:04 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/212561.diff
3 Files Affected:
- (modified) flang/include/flang/Optimizer/Transforms/Passes.td (+4-1)
- (modified) flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp (+1-1)
- (modified) flang/test/Fir/CUDA/cuda-constructor.f90 (+5)
``````````diff
diff --git a/flang/include/flang/Optimizer/Transforms/Passes.td b/flang/include/flang/Optimizer/Transforms/Passes.td
index 8573c0e4f3f00..e51ac93596546 100644
--- a/flang/include/flang/Optimizer/Transforms/Passes.td
+++ b/flang/include/flang/Optimizer/Transforms/Passes.td
@@ -558,7 +558,10 @@ def CUFAddConstructor : Pass<"cuf-add-constructor", "mlir::ModuleOp"> {
"register every plain host module global that is mirrored in the "
"GPU module via cuf.register_variable_static, so the CUDA driver "
"maps the device-side symbol to the host pointer at module-load "
- "time and HMM/ATS handles migration.">
+ "time and HMM/ATS handles migration.">,
+ Option<"priority", "priority", "int32_t", /*default=*/"0",
+ "Priority for the CUDA Fortran global constructor in "
+ "llvm.mlir.global_ctors.">
];
}
diff --git a/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp b/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
index 2c788b2947070..8727e8318c1cb 100644
--- a/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
+++ b/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
@@ -445,7 +445,7 @@ struct CUFAddConstructor
mlir::FlatSymbolRefAttr::get(mod.getContext(), func.getSymName()));
llvm::SmallVector<int> priorities;
llvm::SmallVector<mlir::Attribute> data;
- priorities.push_back(0);
+ priorities.push_back(priority);
data.push_back(mlir::LLVM::ZeroAttr::get(mod.getContext()));
mlir::LLVM::GlobalCtorsOp::create(
builder, mod.getLoc(), builder.getArrayAttr(funcs),
diff --git a/flang/test/Fir/CUDA/cuda-constructor.f90 b/flang/test/Fir/CUDA/cuda-constructor.f90
index f81d26ccd78b5..5ac76f9108f78 100644
--- a/flang/test/Fir/CUDA/cuda-constructor.f90
+++ b/flang/test/Fir/CUDA/cuda-constructor.f90
@@ -2,6 +2,9 @@
! RUN: bbc -fcuda -emit-fir %s -o - | fir-opt \
! RUN: --cuf-add-constructor="allocator-registration-function=custom_register" \
! RUN: | FileCheck %s --check-prefix=CUSTOM
+! RUN: bbc -fcuda -emit-fir %s -o - | fir-opt \
+! RUN: --cuf-add-constructor="priority=100" \
+! RUN: | FileCheck %s --check-prefix=PRIORITY
program main
real, allocatable, device :: ahost(:)
@@ -18,3 +21,5 @@ program main
! CUSTOM: llvm.call @custom_register() : () -> ()
! CUSTOM: }
! CUSTOM: llvm.func @custom_register() attributes {sym_visibility = "private"}
+
+! PRIORITY: llvm.mlir.global_ctors ctors = [@__cudaFortranConstructor], priorities = [100 : i32], data = [#llvm.zero]
``````````
</details>
https://github.com/llvm/llvm-project/pull/212561
More information about the flang-commits
mailing list