[Mlir-commits] [flang] [mlir] [flang][OpenMP] Support for "omp assumes no_openmp". (PR #233252)
Krzysztof Parzyszek
llvmlistbot at llvm.org
Thu Oct 22 15:30:16 PDT 2026
================
@@ -6507,6 +6509,28 @@ class FirConverter : public Fortran::lower::AbstractConverter {
builder->setFPMaxminBehavior(
bridge.getLoweringOptions().getFPMaxminBehavior());
builder->setInsertionPointToStart(&func.front());
+ const auto &langOptions = bridge.getSemanticsContext().langOptions();
+ const auto *assumptionScopeEnd =
+ langOptions.getOpenMPVersion() >= 60
+ ? &Fortran::semantics::omp::GetProgramUnit(scope).parent()
+ : nullptr;
+ for (const auto *assumptionScope = &scope;
+ !langOptions.OpenMPSimd && !assumptionScope->IsGlobal() &&
+ assumptionScope != assumptionScopeEnd;
+ assumptionScope = &assumptionScope->parent()) {
+ const auto *symbol = assumptionScope->symbol();
+ if (!symbol ||
+ !symbol->test(Fortran::semantics::Symbol::Flag::OmpAssumesNoOpenmp))
+ continue;
+ llvm::SmallVector<mlir::Attribute> llvmAttrs;
+ if (auto existing =
+ func->getAttrOfType<mlir::ArrayAttr>("llvm.passthrough"))
+ llvm::append_range(llvmAttrs, existing);
+ llvmAttrs.push_back(
+ builder->getStrArrayAttr({llvm::AssumptionAttrKey, "omp_no_openmp"}));
+ func->setAttr("llvm.passthrough", builder->getArrayAttr(llvmAttrs));
+ break;
+ }
----------------
kparzysz wrote:
Could you extract this whole addition into a separate function?
https://github.com/llvm/llvm-project/pull/233252
More information about the Mlir-commits
mailing list