[flang-commits] [flang] 15c447e - [flang][FIR] Make global section an inherent attribute (#225963)
via flang-commits
flang-commits at lists.llvm.org
Wed Sep 23 18:20:40 PDT 2026
Author: Mehdi Amini
Date: 2026-09-24T01:20:34Z
New Revision: 15c447ea081640069246bb22147ed3cc4ab4e1d3
URL: https://github.com/llvm/llvm-project/commit/15c447ea081640069246bb22147ed3cc4ab4e1d3
DIFF: https://github.com/llvm/llvm-project/commit/15c447ea081640069246bb22147ed3cc4ab4e1d3.diff
LOG: [flang][FIR] Make global section an inherent attribute (#225963)
Preserve the section when lowering fir.global to an LLVM global.
Assisted-by: Codex
Added:
Modified:
flang/include/flang/Optimizer/Dialect/FIROps.td
flang/lib/Optimizer/CodeGen/CodeGen.cpp
flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
flang/test/Fir/global-attributes.fir
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td
index 215118f915e29..0ab176cba2c8e 100644
--- a/flang/include/flang/Optimizer/Dialect/FIROps.td
+++ b/flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -2931,6 +2931,7 @@ def fir_GlobalOp : fir_Op<"global", [IsolatedFromAbove, SymbolName,
OptionalAttr<fir_Linkage>:$linkage,
OptionalAttr<cuf_DataAttributeAttr>:$data_attr,
OptionalAttr<I64Attr>:$alignment,
+ OptionalAttr<StrAttr>:$section,
OptionalAttr<StrAttr>:$sym_visibility
);
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index cb9f49f217851..a8f70e9453b75 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -3830,6 +3830,8 @@ struct GlobalOpConversion : public fir::FIROpConversion<fir::GlobalOp> {
if (global.getAlignment() && *global.getAlignment() > 0)
g.setAlignment(*global.getAlignment());
+ if (auto section = global.getSection())
+ g.setSection(*section);
auto module = global->getParentOfType<mlir::ModuleOp>();
diff --git a/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp b/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
index 6d60868c57044..ee51703b62caf 100644
--- a/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
+++ b/flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
@@ -96,16 +96,12 @@ static fir::GlobalOp createManagedPointerGlobal(fir::FirOpBuilder &builder,
mlir::OpBuilder::InsertionGuard guard(builder);
builder.setInsertionPointAfter(globalOp);
- llvm::SmallVector<mlir::NamedAttribute> attrs;
- attrs.push_back(
- mlir::NamedAttribute(mlir::StringAttr::get(ctx, "section"),
- mlir::StringAttr::get(ctx, "__nv_managed_data__")));
-
mlir::DenseElementsAttr initAttr = {};
auto ptrGlobal = fir::GlobalOp::create(
builder, globalOp.getLoc(), ptrGlobalName, /*isConstant=*/false,
/*isTarget=*/false, ptrTy, initAttr,
- /*linkage=*/builder.createInternalLinkage(), attrs);
+ /*linkage=*/builder.createInternalLinkage());
+ ptrGlobal.setSectionAttr(builder.getStringAttr("__nv_managed_data__"));
mlir::Region ®ion = ptrGlobal.getRegion();
mlir::Block *block = builder.createBlock(®ion);
diff --git a/flang/test/Fir/global-attributes.fir b/flang/test/Fir/global-attributes.fir
index 24442d671504f..1003804abc23a 100644
--- a/flang/test/Fir/global-attributes.fir
+++ b/flang/test/Fir/global-attributes.fir
@@ -2,6 +2,7 @@
// RUN: tco --fir-to-llvm-ir %s | FileCheck %s
// RUN: fir-opt %s | FileCheck %s --check-prefix=READ-OUT
// RUN: tco --emit-fir %s | FileCheck %s --check-prefix=READ-OUT
+// RUN: fir-opt --mlir-print-op-generic %s | FileCheck %s --check-prefix=GENERIC
// CHECK: llvm.mlir.global external @_QMtest_0Edata_int() {{{.*}}test = "string_attribute_maintained"{{.*}}} : i32 {
// CHECK: [[CST0:%.*]] = llvm.mlir.constant(10 : i32) : i32
@@ -15,3 +16,8 @@ fir.global @_QMtest_0Edata_int {test = "string_attribute_maintained"} : i32 {
%c10_i32 = arith.constant 10 : i32
fir.has_value %c10_i32 : i32
}
+
+// READ-OUT: fir.global @sectioned {section = ".my_section"} : i32
+// GENERIC: "fir.global"() <{section = ".my_section"
+// CHECK: llvm.mlir.global external @sectioned() {{{.*}}section = ".my_section"{{.*}}} : i32
+fir.global @sectioned {section = ".my_section"} : i32
More information about the flang-commits
mailing list