[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