[flang-commits] [flang] [mlir] [flang][FIR] Represent fir.global linkage with a typed enum attribute (PR #220243)
via flang-commits
flang-commits at lists.llvm.org
Tue Sep 1 06:14:46 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-openacc
Author: Scott Manley (rscottmanley)
<details>
<summary>Changes</summary>
Replace the string linkName on fir.global with fir::LinkageAttr / LinkageEnum so only the supported linkages can be used, and CodeGen can map them without string compares.
---
Patch is 36.48 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/220243.diff
18 Files Affected:
- (modified) flang/include/flang/Lower/ConvertConstant.h (+1-1)
- (modified) flang/include/flang/Lower/ConvertVariable.h (+1-1)
- (modified) flang/include/flang/Optimizer/Builder/FIRBuilder.h (+21-13)
- (modified) flang/include/flang/Optimizer/Dialect/FIRAttr.td (+47)
- (modified) flang/include/flang/Optimizer/Dialect/FIROps.td (+5-5)
- (modified) flang/lib/Lower/ConvertConstant.cpp (+4-4)
- (modified) flang/lib/Lower/ConvertVariable.cpp (+12-12)
- (modified) flang/lib/Lower/IO.cpp (+2-2)
- (modified) flang/lib/Lower/OpenMP/OpenMP.cpp (+1-1)
- (modified) flang/lib/Optimizer/Builder/FIRBuilder.cpp (+2-2)
- (modified) flang/lib/Optimizer/Builder/Runtime/EnvironmentDefaults.cpp (+1-1)
- (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+12-10)
- (modified) flang/lib/Optimizer/Dialect/FIROps.cpp (+16-17)
- (modified) flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp (+1-1)
- (modified) flang/lib/Optimizer/Transforms/CUDA/CUFComputeSharedMemoryOffsetsAndSize.cpp (+1-1)
- (modified) flang/lib/Optimizer/Transforms/CUDA/CUFDeviceGlobal.cpp (+4-4)
- (modified) flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp (+5-8)
- (modified) mlir/lib/Dialect/OpenACC/Transforms/ACCDeclareGPUModuleInsertion.cpp (+1-1)
``````````diff
diff --git a/flang/include/flang/Lower/ConvertConstant.h b/flang/include/flang/Lower/ConvertConstant.h
index dd19507d4c005..df903783471eb 100644
--- a/flang/include/flang/Lower/ConvertConstant.h
+++ b/flang/include/flang/Lower/ConvertConstant.h
@@ -63,7 +63,7 @@ fir::ExtendedValue convertConstant(Fortran::lower::AbstractConverter &converter,
fir::GlobalOp tryCreatingDenseGlobal(fir::FirOpBuilder &builder,
mlir::Location loc, mlir::Type symTy,
llvm::StringRef globalName,
- mlir::StringAttr linkage, bool isConst,
+ fir::LinkageAttr linkage, bool isConst,
const Fortran::lower::SomeExpr &initExpr,
cuf::DataAttributeAttr dataAttr = {},
bool setDefaultAlignment = true);
diff --git a/flang/include/flang/Lower/ConvertVariable.h b/flang/include/flang/Lower/ConvertVariable.h
index a4ad984579410..c8f117e63040f 100644
--- a/flang/include/flang/Lower/ConvertVariable.h
+++ b/flang/include/flang/Lower/ConvertVariable.h
@@ -136,7 +136,7 @@ mlir::Value genInitialDataTarget(Fortran::lower::AbstractConverter &,
/// Create the global op and its init if it has one
fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
const Fortran::lower::pft::Variable &var,
- llvm::StringRef globalName, mlir::StringAttr linkage,
+ llvm::StringRef globalName, fir::LinkageAttr linkage,
cuf::DataAttributeAttr dataAttr = {});
/// Generate address \p addr inside an initializer.
diff --git a/flang/include/flang/Optimizer/Builder/FIRBuilder.h b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
index 22d0a6f7febbc..a29e3bf7063a5 100644
--- a/flang/include/flang/Optimizer/Builder/FIRBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
@@ -340,7 +340,7 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
/// Create a global value.
fir::GlobalOp createGlobal(mlir::Location loc, mlir::Type type,
llvm::StringRef name,
- mlir::StringAttr linkage = {},
+ fir::LinkageAttr linkage = {},
mlir::Attribute value = {}, bool isConst = false,
bool isTarget = false,
cuf::DataAttributeAttr dataAttr = {},
@@ -349,14 +349,14 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
fir::GlobalOp createGlobal(mlir::Location loc, mlir::Type type,
llvm::StringRef name, bool isConst, bool isTarget,
std::function<void(FirOpBuilder &)> bodyBuilder,
- mlir::StringAttr linkage = {},
+ fir::LinkageAttr linkage = {},
cuf::DataAttributeAttr dataAttr = {},
bool setDefaultAlignment = true);
/// Create a global constant (read-only) value.
fir::GlobalOp createGlobalConstant(mlir::Location loc, mlir::Type type,
llvm::StringRef name,
- mlir::StringAttr linkage = {},
+ fir::LinkageAttr linkage = {},
mlir::Attribute value = {}) {
return createGlobal(loc, type, name, linkage, value, /*isConst=*/true,
/*isTarget=*/false);
@@ -366,7 +366,7 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
createGlobalConstant(mlir::Location loc, mlir::Type type,
llvm::StringRef name,
std::function<void(FirOpBuilder &)> bodyBuilder,
- mlir::StringAttr linkage = {}) {
+ fir::LinkageAttr linkage = {}) {
return createGlobal(loc, type, name, /*isConst=*/true, /*isTarget=*/false,
bodyBuilder, linkage);
}
@@ -383,24 +383,32 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
// Linkage helpers (inline). The default linkage is external.
//===--------------------------------------------------------------------===//
- static mlir::StringAttr createCommonLinkage(mlir::MLIRContext *context) {
- return mlir::StringAttr::get(context, "common");
+ static fir::LinkageAttr createCommonLinkage(mlir::MLIRContext *context) {
+ return fir::LinkageAttr::get(context, fir::LinkageEnum::Common);
}
- mlir::StringAttr createCommonLinkage() {
+ fir::LinkageAttr createCommonLinkage() {
return createCommonLinkage(getContext());
}
- mlir::StringAttr createExternalLinkage() { return getStringAttr("external"); }
+ fir::LinkageAttr createExternalLinkage() {
+ return fir::LinkageAttr::get(getContext(), fir::LinkageEnum::External);
+ }
- mlir::StringAttr createInternalLinkage() { return getStringAttr("internal"); }
+ fir::LinkageAttr createInternalLinkage() {
+ return fir::LinkageAttr::get(getContext(), fir::LinkageEnum::Internal);
+ }
- mlir::StringAttr createLinkOnceLinkage() { return getStringAttr("linkonce"); }
+ fir::LinkageAttr createLinkOnceLinkage() {
+ return fir::LinkageAttr::get(getContext(), fir::LinkageEnum::Linkonce);
+ }
- mlir::StringAttr createLinkOnceODRLinkage() {
- return getStringAttr("linkonce_odr");
+ fir::LinkageAttr createLinkOnceODRLinkage() {
+ return fir::LinkageAttr::get(getContext(), fir::LinkageEnum::LinkonceODR);
}
- mlir::StringAttr createWeakLinkage() { return getStringAttr("weak"); }
+ fir::LinkageAttr createWeakLinkage() {
+ return fir::LinkageAttr::get(getContext(), fir::LinkageEnum::Weak);
+ }
/// Get a function by name. If the function exists in the current module, it
/// is returned. Otherwise, a null FuncOp is returned.
diff --git a/flang/include/flang/Optimizer/Dialect/FIRAttr.td b/flang/include/flang/Optimizer/Dialect/FIRAttr.td
index c53a2b869e968..cfe8e96e8e4a5 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRAttr.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRAttr.td
@@ -15,10 +15,57 @@
include "flang/Optimizer/Dialect/FIRDialect.td"
include "mlir/Dialect/OpenACC/OpenACCAttributes.td"
+include "mlir/IR/CommonAttrConstraints.td"
include "mlir/IR/EnumAttr.td"
class fir_Attr<string name> : AttrDef<FIROpsDialect, name>;
+//===----------------------------------------------------------------------===//
+// Linkage
+//===----------------------------------------------------------------------===//
+
+// Linkage attribute used on fir.global. This is a subset of LLVM linkage
+// types currently supported by FIR. The names match the keywords in the
+// custom assembly form of fir.global. External is the default when omitted.
+def FIR_LinkageExternal
+ : I64EnumAttrCase<"External", 0, "external">;
+def FIR_LinkageInternal
+ : I64EnumAttrCase<"Internal", 1, "internal">;
+def FIR_LinkageLinkonce
+ : I64EnumAttrCase<"Linkonce", 2, "linkonce">;
+def FIR_LinkageLinkonceODR
+ : I64EnumAttrCase<"LinkonceODR", 3, "linkonce_odr">;
+def FIR_LinkageWeak
+ : I64EnumAttrCase<"Weak", 4, "weak">;
+def FIR_LinkageCommon
+ : I64EnumAttrCase<"Common", 5, "common">;
+
+def fir_LinkageEnum : I64EnumAttr<
+ "LinkageEnum",
+ "FIR linkage types",
+ [FIR_LinkageExternal, FIR_LinkageInternal, FIR_LinkageLinkonce,
+ FIR_LinkageLinkonceODR, FIR_LinkageWeak, FIR_LinkageCommon]> {
+ let cppNamespace = "::fir";
+ let genSpecializedAttr = 0;
+}
+
+def fir_LinkageAttr : fir_Attr<"Linkage"> {
+ let mnemonic = "linkage";
+ let parameters = (ins "LinkageEnum":$linkage);
+ let assemblyFormat = "`<` $linkage `>`";
+}
+
+def fir_Linkage : DialectAttr<
+ FIROpsDialect,
+ CPred<"::llvm::isa<::fir::LinkageAttr>($_self)">,
+ "FIR linkage specification"> {
+ let storageType = "::fir::LinkageAttr";
+ let returnType = "::fir::LinkageEnum";
+ let convertFromStorage = "$_self.getLinkage()";
+ let constBuilderCall =
+ "::fir::LinkageAttr::get($_builder.getContext(), $0)";
+}
+
def FIRnoAttributes : I32BitEnumAttrCaseNone<"None">;
def FIRallocatable : I32BitEnumAttrCaseBit<"allocatable", 0>;
def FIRasynchronous : I32BitEnumAttrCaseBit<"asynchronous", 1>;
diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td
index fd0b5b16c87ad..1a5c29a6e991e 100644
--- a/flang/include/flang/Optimizer/Dialect/FIROps.td
+++ b/flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -2920,7 +2920,7 @@ def fir_GlobalOp : fir_Op<"global", [IsolatedFromAbove, SymbolName,
OptionalAttr<AnyAttr>:$initVal,
OptionalAttr<UnitAttr>:$constant,
OptionalAttr<UnitAttr>:$target,
- OptionalAttr<StrAttr>:$linkName,
+ OptionalAttr<fir_Linkage>:$linkage,
OptionalAttr<cuf_DataAttributeAttr>:$data_attr,
OptionalAttr<I64Attr>:$alignment,
OptionalAttr<StrAttr>:$sym_visibility
@@ -2938,18 +2938,18 @@ def fir_GlobalOp : fir_Op<"global", [IsolatedFromAbove, SymbolName,
"bool":$isTarget, "mlir::Type":$type,
CArg<"llvm::ArrayRef<mlir::NamedAttribute>", "{}">:$attrs)>,
OpBuilder<(ins "llvm::StringRef":$name, "mlir::Type":$type,
- CArg<"mlir::StringAttr", "{}">:$linkage,
+ CArg<"fir::LinkageAttr", "{}">:$linkage,
CArg<"llvm::ArrayRef<mlir::NamedAttribute>", "{}">:$attrs)>,
OpBuilder<(ins "llvm::StringRef":$name, "bool":$isConstant,
"bool":$isTarget,
- "mlir::Type":$type, CArg<"mlir::StringAttr", "{}">:$linkage,
+ "mlir::Type":$type, CArg<"fir::LinkageAttr", "{}">:$linkage,
CArg<"llvm::ArrayRef<mlir::NamedAttribute>", "{}">:$attrs)>,
OpBuilder<(ins "llvm::StringRef":$name, "mlir::Type":$type,
- "mlir::Attribute":$initVal, CArg<"mlir::StringAttr", "{}">:$linkage,
+ "mlir::Attribute":$initVal, CArg<"fir::LinkageAttr", "{}">:$linkage,
CArg<"llvm::ArrayRef<mlir::NamedAttribute>", "{}">:$attrs)>,
OpBuilder<(ins "llvm::StringRef":$name, "bool":$isConstant,
"bool":$isTarget, "mlir::Type":$type, "mlir::Attribute":$initVal,
- CArg<"mlir::StringAttr", "{}">:$linkage,
+ CArg<"fir::LinkageAttr", "{}">:$linkage,
CArg<"llvm::ArrayRef<mlir::NamedAttribute>", "{}">:$attrs)>,
];
diff --git a/flang/lib/Lower/ConvertConstant.cpp b/flang/lib/Lower/ConvertConstant.cpp
index 6525ce50f9fdc..f48dc9931e627 100644
--- a/flang/lib/Lower/ConvertConstant.cpp
+++ b/flang/lib/Lower/ConvertConstant.cpp
@@ -104,7 +104,7 @@ class DenseGlobalBuilder {
public:
static fir::GlobalOp
tryCreating(fir::FirOpBuilder &builder, mlir::Location loc, mlir::Type symTy,
- llvm::StringRef globalName, mlir::StringAttr linkage,
+ llvm::StringRef globalName, fir::LinkageAttr linkage,
bool isConst, const Fortran::lower::SomeExpr &initExpr,
cuf::DataAttributeAttr dataAttr, bool setDefaultAlignment) {
DenseGlobalBuilder globalBuilder;
@@ -130,7 +130,7 @@ class DenseGlobalBuilder {
template <Fortran::common::TypeCategory TC, int KIND>
static fir::GlobalOp tryCreating(
fir::FirOpBuilder &builder, mlir::Location loc, mlir::Type symTy,
- llvm::StringRef globalName, mlir::StringAttr linkage, bool isConst,
+ llvm::StringRef globalName, fir::LinkageAttr linkage, bool isConst,
const Fortran::evaluate::Constant<Fortran::evaluate::Type<TC, KIND>>
&constant,
cuf::DataAttributeAttr dataAttr, bool setDefaultAlignment = true) {
@@ -202,7 +202,7 @@ class DenseGlobalBuilder {
fir::GlobalOp tryCreatingGlobal(fir::FirOpBuilder &builder,
mlir::Location loc, mlir::Type symTy,
llvm::StringRef globalName,
- mlir::StringAttr linkage, bool isConst,
+ fir::LinkageAttr linkage, bool isConst,
cuf::DataAttributeAttr dataAttr,
bool setDefaultAlignment) const {
// Not a "trivial" intrinsic constant array, or empty array.
@@ -228,7 +228,7 @@ class DenseGlobalBuilder {
fir::GlobalOp Fortran::lower::tryCreatingDenseGlobal(
fir::FirOpBuilder &builder, mlir::Location loc, mlir::Type symTy,
- llvm::StringRef globalName, mlir::StringAttr linkage, bool isConst,
+ llvm::StringRef globalName, fir::LinkageAttr linkage, bool isConst,
const Fortran::lower::SomeExpr &initExpr, cuf::DataAttributeAttr dataAttr,
bool setDefaultAlignment) {
return DenseGlobalBuilder::tryCreating(builder, loc, symTy, globalName,
diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp
index a808905850922..8438b39c990a9 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -198,7 +198,7 @@ static void attachAccDeclareAttribute(fir::FirOpBuilder &builder,
static fir::GlobalOp declareGlobal(Fortran::lower::AbstractConverter &converter,
const Fortran::lower::pft::Variable &var,
llvm::StringRef globalName,
- mlir::StringAttr linkage) {
+ fir::LinkageAttr linkage) {
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
if (fir::GlobalOp global = builder.getNamedGlobal(globalName))
return global;
@@ -497,7 +497,7 @@ createGlobalInitialization(fir::FirOpBuilder &builder, fir::GlobalOp global,
fir::GlobalOp Fortran::lower::defineGlobal(
Fortran::lower::AbstractConverter &converter,
const Fortran::lower::pft::Variable &var, llvm::StringRef globalName,
- mlir::StringAttr linkage, cuf::DataAttributeAttr dataAttr) {
+ fir::LinkageAttr linkage, cuf::DataAttributeAttr dataAttr) {
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
const Fortran::semantics::Symbol &sym = var.getSymbol();
mlir::Location loc = genLocation(converter, sym);
@@ -628,7 +628,7 @@ fir::GlobalOp Fortran::lower::defineGlobal(
// with no other definitions, and to never link the resulting module
// object file.
if (sym.attrs().test(Fortran::semantics::Attr::BIND_C))
- global.setLinkName(builder.createCommonLinkage());
+ global.setLinkageAttr(builder.createCommonLinkage());
createGlobalInitialization(
builder, global, [&](fir::FirOpBuilder &builder) {
mlir::Value initValue;
@@ -647,7 +647,7 @@ fir::GlobalOp Fortran::lower::defineGlobal(
}
/// Return linkage attribute for \p var.
-static mlir::StringAttr
+static fir::LinkageAttr
getLinkageAttribute(Fortran::lower::AbstractConverter &converter,
const Fortran::lower::pft::Variable &var) {
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
@@ -680,7 +680,7 @@ static void instantiateGlobal(Fortran::lower::AbstractConverter &converter,
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
std::string globalName = converter.mangleName(sym);
mlir::Location loc = genLocation(converter, sym);
- mlir::StringAttr linkage = getLinkageAttribute(converter, var);
+ fir::LinkageAttr linkage = getLinkageAttribute(converter, var);
fir::GlobalOp global;
if (Fortran::evaluate::IsCoarray(sym)) {
@@ -905,7 +905,7 @@ genInlinedInitWithMemcpy(Fortran::lower::AbstractConverter &converter,
(converter.mangleName(*declTy->AsDerived()) + fir::kNameSeparator +
fir::kDerivedTypeInitSuffix)
.str());
- mlir::StringAttr linkage = builder.createInternalLinkage();
+ fir::LinkageAttr linkage = builder.createInternalLinkage();
fir::GlobalOp global = builder.getNamedGlobal(globalName);
if (!global && details->init()) {
global = builder.createGlobal(symLoc, symTy, globalName, linkage,
@@ -1398,7 +1398,7 @@ getAggregateType(Fortran::lower::AbstractConverter &converter,
static fir::GlobalOp defineGlobalAggregateStore(
Fortran::lower::AbstractConverter &converter,
const Fortran::lower::pft::Variable::AggregateStore &aggregate,
- llvm::StringRef aggName, mlir::StringAttr linkage) {
+ llvm::StringRef aggName, fir::LinkageAttr linkage) {
assert(aggregate.isGlobal() && "not a global interval");
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
fir::GlobalOp global = builder.getNamedGlobal(aggName);
@@ -1443,7 +1443,7 @@ static fir::GlobalOp defineGlobalAggregateStore(
static fir::GlobalOp declareGlobalAggregateStore(
Fortran::lower::AbstractConverter &converter, mlir::Location loc,
const Fortran::lower::pft::Variable::AggregateStore &aggregate,
- llvm::StringRef aggName, mlir::StringAttr linkage) {
+ llvm::StringRef aggName, fir::LinkageAttr linkage) {
assert(aggregate.isGlobal() && "not a global interval");
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
if (fir::GlobalOp global = builder.getNamedGlobal(aggName))
@@ -1467,7 +1467,7 @@ instantiateAggregateStore(Fortran::lower::AbstractConverter &converter,
if (var.isGlobal()) {
fir::GlobalOp global;
auto &aggregate = var.getAggregateStore();
- mlir::StringAttr linkage = getLinkageAttribute(converter, var);
+ fir::LinkageAttr linkage = getLinkageAttribute(converter, var);
if (var.isModuleOrSubmoduleVariable()) {
// A module global was or will be defined when lowering the module. Emit
// only a declaration if the global does not exist at that point.
@@ -1668,7 +1668,7 @@ declareCommonBlock(Fortran::lower::AbstractConverter &converter,
Fortran::semantics::MutableSymbolVector cmnBlkMems =
getCommonMembersWithInitAliases(common);
mlir::Location loc = converter.genLocation(common.name());
- mlir::StringAttr linkage = builder.createCommonLinkage();
+ fir::LinkageAttr linkage = builder.createCommonLinkage();
const auto *details =
common.detailsIf<Fortran::semantics::CommonBlockDetails>();
assert(details && "Expect CommonBlockDetails on the common symbol");
@@ -2708,7 +2708,7 @@ void Fortran::lower::defineModuleVariable(
AbstractConverter &converter, const Fortran::lower::pft::Variable &var) {
// Use empty linkage for module variables, which makes them available
// for use in another unit.
- mlir::StringAttr linkage = getLinkageAttribute(converter, var);
+ fir::LinkageAttr linkage = getLinkageAttribute(converter, var);
if (!var.isGlobal())
fir::emitFatalError(converter.getCurrentLocation(),
"attempting to lower module variable as local");
@@ -2845,7 +2845,7 @@ void Fortran::lower::createRuntimeTypeInfoGlobal(
const Fortran::semantics::Symbol &typeInfoSym) {
std::string globalName = converter.mangleName(typeInfoSym);
auto var = Fortran::lower::pft::Variable(typeInfoSym, /*global=*/true);
- mlir::StringAttr linkage = getLinkageAttribute(converter, var);
+ fir::LinkageAttr linkage = getLinkageAttribute(converter, var);
defineGlobal(converter, var, globalName, linkage);
}
diff --git a/flang/lib/Lower/IO.cpp b/flang/lib/Lower/IO.cpp
index 490db8cc1d1ba..611b6918fc46c 100644
--- a/flang/lib/Lower/IO.cpp
+++ b/flang/lib/Lower/IO.cpp
@@ -262,7 +262,7 @@ getNonTbpDefinedIoTableAddr(Fortran::lower::AbstractConverter &converter,
table.resultType(),
table.getSymbol()));
- mlir::StringAttr linkOnce = builder.createLinkOnceLinkage();
+ fir::LinkageAttr linkOnce = builder.createLinkOnceLinkage();
mlir::Type idxTy = builder.getIndexType();
mlir::Type sizeTy =
fir::runtime::getModel<std::size_t>()(builder.getContext());
@@ -426,7 +426,7 @@ getNamelistGroup(Fortran::lower::AbstractConverter &converter,
const auto &details =
symbol.GetUltimate().get<Fortran::semantics::NamelistDetails>();
mlir::MLIRContext *context = builder.getContext();
- mlir::StringAttr linkOnce = builder.createLinkOnceLinkage();
+ fir::LinkageAttr linkOnce = builder.createLinkOnceLinkage();
mlir::Type idxTy = builder.getIndexType();
mlir::Type sizeTy =
fir::runtime::getModel<std::size_t>()(builder.getContext());
diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
i...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/220243
More information about the flang-commits
mailing list