[flang-commits] [flang] [flang][cuda] Add option to set priority to the CUDA Fortran constructor (PR #212561)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Tue Jul 28 10:46:03 PDT 2026
https://github.com/clementval created https://github.com/llvm/llvm-project/pull/212561
None
>From c1d08c562974d3dbffc411ebf8381d81bac9aa45 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Tue, 28 Jul 2026 10:44:38 -0700
Subject: [PATCH] [flang][cuda] Add option to set priority to the CUDA Fortran
constructor
---
flang/include/flang/Optimizer/Transforms/Passes.td | 5 ++++-
flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp | 2 +-
flang/test/Fir/CUDA/cuda-constructor.f90 | 5 +++++
3 files changed, 10 insertions(+), 2 deletions(-)
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]
More information about the flang-commits
mailing list