https://github.com/skatrak updated 
https://github.com/llvm/llvm-project/pull/213648

>From d9fb1b3dfe5aa430c9877047b563f5cf7abcba68 Mon Sep 17 00:00:00 2001
From: Sergio Afonso <[email protected]>
Date: Tue, 21 Jul 2026 14:11:39 +0100
Subject: [PATCH] [MLIR][OpenMP] Refactor omp dialect utils headers, NFC

This patch implements some non-functional refactoring changes:
- It consolidates the two existing "utils" headers into one.
- It renames fields and arguments to the `OffloadModuleOpts` structure
  to follow the MLIR style guide and more closely match the
  corresponding `OffloadModuleInterface` attributes.
- It removes comments in OpenMP-to-LLVMIR translation referring to Flang
  frontend options associated to the `OffloadModuleInterface`.
---
 clang/lib/CIR/CodeGen/CIRGenModule.cpp        |   2 +-
 clang/tools/cir-translate/cir-translate.cpp   |   2 +-
 flang/tools/bbc/bbc.cpp                       |   3 +-
 .../mlir/Dialect/OpenMP/OpenMPDialect.h       |   2 +-
 .../include/mlir/Dialect/OpenMP/OpenMPUtils.h | 109 ------------------
 .../include/mlir/Dialect/OpenMP/Utils/Utils.h |  54 +++++++++
 mlir/lib/Dialect/OpenMP/Utils/Utils.cpp       |  40 +++++++
 .../OpenMP/OpenMPToLLVMIRTranslation.cpp      |  31 ++---
 8 files changed, 109 insertions(+), 134 deletions(-)
 delete mode 100644 mlir/include/mlir/Dialect/OpenMP/OpenMPUtils.h

diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp 
b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
index fa1bdd267fc8f..6c4e6d18a6c8c 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
@@ -16,7 +16,7 @@
 #include "CIRGenConstantEmitter.h"
 #include "CIRGenFunction.h"
 
-#include "mlir/Dialect/OpenMP/OpenMPUtils.h"
+#include "mlir/Dialect/OpenMP/Utils/Utils.h"
 #include "mlir/IR/SymbolTable.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/ASTLambda.h"
diff --git a/clang/tools/cir-translate/cir-translate.cpp 
b/clang/tools/cir-translate/cir-translate.cpp
index f99d89d9b0be4..4452741d7433e 100644
--- a/clang/tools/cir-translate/cir-translate.cpp
+++ b/clang/tools/cir-translate/cir-translate.cpp
@@ -14,7 +14,7 @@
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
 #include "mlir/Dialect/OpenMP/OpenMPDialect.h"
-#include "mlir/Dialect/OpenMP/OpenMPUtils.h"
+#include "mlir/Dialect/OpenMP/Utils/Utils.h"
 #include "mlir/IR/BuiltinOps.h"
 #include "mlir/IR/MLIRContext.h"
 #include "mlir/InitAllTranslations.h"
diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp
index e76808394becd..cfb3d20be6955 100644
--- a/flang/tools/bbc/bbc.cpp
+++ b/flang/tools/bbc/bbc.cpp
@@ -536,7 +536,8 @@ static llvm::LogicalResult convertFortranSourceToMLIR(
         setOpenMPTargetDebug, setOpenMPTeamSubscription,
         setOpenMPThreadSubscription, setOpenMPNoThreadState,
         setOpenMPNoNestedParallelism, enableOpenMPDevice, enableOpenMPGPU,
-        enableOpenMPForceUSM, setOpenMPVersion, "", targetTriples, 
setNoGPULib);
+        enableOpenMPForceUSM, setOpenMPVersion, /*hostIRFile=*/"",
+        targetTriples, setNoGPULib);
     mlir::omp::setOffloadModuleInterfaceAttributes(mlirModule,
                                                    offloadModuleOpts);
     mlir::omp::setOpenMPVersionAttribute(mlirModule, setOpenMPVersion);
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h 
b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
index d15ea19b9065c..a6854752f75b6 100644
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
@@ -17,7 +17,7 @@
 #include "mlir/Dialect/OpenACCMPCommon/Interfaces/AtomicInterfaces.h"
 #include "mlir/Dialect/OpenACCMPCommon/Interfaces/OpenACCMPOpsInterfaces.h"
 #include "mlir/Dialect/OpenMP/OpenMPInterfaces.h"
-#include "mlir/Dialect/OpenMP/OpenMPUtils.h"
+#include "mlir/Dialect/OpenMP/Utils/Utils.h"
 #include "mlir/IR/Dialect.h"
 #include "mlir/IR/OpDefinition.h"
 #include "mlir/IR/PatternMatch.h"
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPUtils.h 
b/mlir/include/mlir/Dialect/OpenMP/OpenMPUtils.h
deleted file mode 100644
index 002377ae6d24a..0000000000000
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPUtils.h
+++ /dev/null
@@ -1,109 +0,0 @@
-//===- OpenMPUtils.h - OpenMP utilities -------------------------*- C++ 
-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file
-/// Shared utilities for setting OpenMP offload module interface attributes.
-/// These are used by both Flang and Clang (CIR) frontends.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_DIALECT_OPENMP_OPENMPUTILS_H_
-#define MLIR_DIALECT_OPENMP_OPENMPUTILS_H_
-
-#include "mlir/Dialect/OpenMP/OpenMPInterfaces.h"
-#include "mlir/Dialect/OpenMP/OpenMPOpsAttributes.h"
-#include "mlir/IR/BuiltinOps.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/TargetParser/Triple.h"
-#include <cstdint>
-#include <string>
-#include <vector>
-
-namespace mlir::omp {
-
-struct OffloadModuleOpts {
-  OffloadModuleOpts() = default;
-  OffloadModuleOpts(uint32_t openMPTargetDebug, bool openMPTeamSubscription,
-                    bool openMPThreadSubscription, bool openMPNoThreadState,
-                    bool openMPNoNestedParallelism, bool openMPIsTargetDevice,
-                    bool openMPIsGPU, bool openMPForceUSM,
-                    uint32_t openMPVersion, std::string ompHostIRFile = {},
-                    const std::vector<llvm::Triple> &ompTargetTriples = {},
-                    bool noGPULib = false)
-      : OpenMPTargetDebug(openMPTargetDebug),
-        OpenMPTeamSubscription(openMPTeamSubscription),
-        OpenMPThreadSubscription(openMPThreadSubscription),
-        OpenMPNoThreadState(openMPNoThreadState),
-        OpenMPNoNestedParallelism(openMPNoNestedParallelism),
-        OpenMPIsTargetDevice(openMPIsTargetDevice), OpenMPIsGPU(openMPIsGPU),
-        OpenMPForceUSM(openMPForceUSM), OpenMPVersion(openMPVersion),
-        OMPHostIRFile(std::move(ompHostIRFile)),
-        OMPTargetTriples(ompTargetTriples.begin(), ompTargetTriples.end()),
-        NoGPULib(noGPULib) {}
-
-  uint32_t OpenMPTargetDebug = 0;
-  bool OpenMPTeamSubscription = false;
-  bool OpenMPThreadSubscription = false;
-  bool OpenMPNoThreadState = false;
-  bool OpenMPNoNestedParallelism = false;
-  bool OpenMPIsTargetDevice = false;
-  bool OpenMPIsGPU = false;
-  bool OpenMPForceUSM = false;
-  uint32_t OpenMPVersion = 31;
-  std::string OMPHostIRFile = {};
-  std::vector<llvm::Triple> OMPTargetTriples = {};
-  bool NoGPULib = false;
-};
-
-/// Sets OpenMP offload module interface attributes on a ModuleOp, shared
-/// between Flang and Clang (CIR) frontends.
-[[maybe_unused]] static void
-setOffloadModuleInterfaceAttributes(ModuleOp module, OffloadModuleOpts opts) {
-  if (auto offloadMod =
-          llvm::dyn_cast<OffloadModuleInterface>(module.getOperation())) {
-    offloadMod.setIsTargetDevice(opts.OpenMPIsTargetDevice);
-    offloadMod.setIsGPU(opts.OpenMPIsGPU);
-    if (opts.OpenMPForceUSM)
-      offloadMod.setRequires(ClauseRequires::unified_shared_memory);
-    offloadMod.setFlags(opts.OpenMPTargetDebug, opts.OpenMPTeamSubscription,
-                        opts.OpenMPThreadSubscription, 
opts.OpenMPNoThreadState,
-                        opts.OpenMPNoNestedParallelism, opts.OpenMPVersion,
-                        opts.NoGPULib);
-    if (opts.OpenMPIsTargetDevice && !opts.OMPHostIRFile.empty())
-      offloadMod.setHostIRFilePath(opts.OMPHostIRFile);
-
-    auto strTriples = llvm::to_vector(
-        llvm::map_range(opts.OMPTargetTriples, [](llvm::Triple triple) {
-          return triple.normalize();
-        }));
-    offloadMod.setTargetTriples(strTriples);
-  }
-}
-
-[[maybe_unused]] static void setOpenMPVersionAttribute(ModuleOp module,
-                                                       int64_t version) {
-  module.getOperation()->setAttr(
-      StringAttr::get(module.getContext(), llvm::Twine{"omp.version"}),
-      VersionAttr::get(module.getContext(), version));
-}
-
-[[maybe_unused]] static int64_t
-getOpenMPVersionAttribute(ModuleOp module, int64_t fallback = -1) {
-  if (Attribute verAttr = module->getAttr("omp.version"))
-    return llvm::cast<VersionAttr>(verAttr).getVersion();
-  return fallback;
-}
-
-/// Returns true if the given module contains OpenMP code.
-[[maybe_unused]] static bool isOpenMPModule(ModuleOp module) {
-  return module->hasAttr("omp.version");
-}
-
-} // namespace mlir::omp
-
-#endif // MLIR_DIALECT_OPENMP_OPENMPUTILS_H_
diff --git a/mlir/include/mlir/Dialect/OpenMP/Utils/Utils.h 
b/mlir/include/mlir/Dialect/OpenMP/Utils/Utils.h
index ce625c7170efe..16b6970441ef6 100644
--- a/mlir/include/mlir/Dialect/OpenMP/Utils/Utils.h
+++ b/mlir/include/mlir/Dialect/OpenMP/Utils/Utils.h
@@ -13,12 +13,66 @@
 #ifndef MLIR_DIALECT_OPENMP_UTILS_UTILS_H_
 #define MLIR_DIALECT_OPENMP_UTILS_UTILS_H_
 
+#include "mlir/IR/BuiltinOps.h"
 #include "mlir/IR/Operation.h"
 #include "mlir/IR/Value.h"
+#include "llvm/TargetParser/Triple.h"
+#include <cstdint>
+#include <string>
+#include <vector>
 
 namespace mlir {
 namespace omp {
 
+/// Offload-specific OpenMP module attributes, associated to the
+/// OffloadModuleInterface.
+struct OffloadModuleOpts {
+  OffloadModuleOpts() = default;
+  OffloadModuleOpts(uint32_t targetDebugKind, bool assumeTeamsOversubscription,
+                    bool assumeThreadsOversubscription,
+                    bool assumeNoThreadState, bool assumeNoNestedParallelism,
+                    bool isTargetDevice, bool isGPU, bool forceUSM,
+                    uint32_t openMPDeviceVersion, const Twine &hostIRFile,
+                    ArrayRef<llvm::Triple> targetTriples = {},
+                    bool noGPULib = false)
+      : targetDebugKind(targetDebugKind),
+        assumeTeamsOversubscription(assumeTeamsOversubscription),
+        assumeThreadsOversubscription(assumeThreadsOversubscription),
+        assumeNoThreadState(assumeNoThreadState),
+        assumeNoNestedParallelism(assumeNoNestedParallelism),
+        isTargetDevice(isTargetDevice), isGPU(isGPU), forceUSM(forceUSM),
+        openMPDeviceVersion(openMPDeviceVersion), hostIRFile(hostIRFile.str()),
+        targetTriples(targetTriples.begin(), targetTriples.end()),
+        noGPULib(noGPULib) {}
+
+  uint32_t targetDebugKind = 0;
+  bool assumeTeamsOversubscription = false;
+  bool assumeThreadsOversubscription = false;
+  bool assumeNoThreadState = false;
+  bool assumeNoNestedParallelism = false;
+  bool isTargetDevice = false;
+  bool isGPU = false;
+  bool forceUSM = false;
+  uint32_t openMPDeviceVersion = 31;
+  std::string hostIRFile = {};
+  std::vector<llvm::Triple> targetTriples = {};
+  bool noGPULib = false;
+};
+
+/// Sets OpenMP offload module interface attributes on a ModuleOp, shared
+/// between Flang and Clang (CIR) frontends.
+void setOffloadModuleInterfaceAttributes(ModuleOp module,
+                                         const OffloadModuleOpts &opts);
+
+/// Adds or updates the omp.version attribute.
+void setOpenMPVersionAttribute(ModuleOp module, int64_t version);
+
+/// Returns the value of the omp.version attribute, if present, or the 
fallback.
+int64_t getOpenMPVersionAttribute(ModuleOp module, int64_t fallback = -1);
+
+/// Checks whether this is an OpenMP-enabled module.
+bool isOpenMPModule(ModuleOp module);
+
 /// Check whether the value representing an allocation, assumed to have been
 /// defined in a shared device context, is used in a manner that would require
 /// device shared memory for correctness.
diff --git a/mlir/lib/Dialect/OpenMP/Utils/Utils.cpp 
b/mlir/lib/Dialect/OpenMP/Utils/Utils.cpp
index 84fa6703263f2..dca02584e32c6 100644
--- a/mlir/lib/Dialect/OpenMP/Utils/Utils.cpp
+++ b/mlir/lib/Dialect/OpenMP/Utils/Utils.cpp
@@ -17,6 +17,46 @@
 
 using namespace mlir;
 
+void mlir::omp::setOffloadModuleInterfaceAttributes(
+    ModuleOp module, const OffloadModuleOpts &opts) {
+  if (auto offloadMod = llvm::dyn_cast<OffloadModuleInterface>(*module)) {
+    offloadMod.setIsTargetDevice(opts.isTargetDevice);
+    offloadMod.setIsGPU(opts.isGPU);
+    if (opts.forceUSM)
+      offloadMod.setRequires(ClauseRequires::unified_shared_memory);
+    offloadMod.setFlags(opts.targetDebugKind, opts.assumeTeamsOversubscription,
+                        opts.assumeThreadsOversubscription,
+                        opts.assumeNoThreadState,
+                        opts.assumeNoNestedParallelism,
+                        opts.openMPDeviceVersion, opts.noGPULib);
+    if (opts.isTargetDevice && !opts.hostIRFile.empty())
+      offloadMod.setHostIRFilePath(opts.hostIRFile);
+
+    auto strTriples = llvm::to_vector(
+        llvm::map_range(opts.targetTriples, [](const llvm::Triple &triple) {
+          return triple.normalize();
+        }));
+    offloadMod.setTargetTriples(strTriples);
+  }
+}
+
+void mlir::omp::setOpenMPVersionAttribute(ModuleOp module, int64_t version) {
+  module->setAttr(
+      StringAttr::get(module.getContext(), llvm::Twine{"omp.version"}),
+      VersionAttr::get(module.getContext(), version));
+}
+
+int64_t mlir::omp::getOpenMPVersionAttribute(ModuleOp module,
+                                             int64_t fallback) {
+  if (Attribute verAttr = module->getAttr("omp.version"))
+    return llvm::cast<VersionAttr>(verAttr).getVersion();
+  return fallback;
+}
+
+bool mlir::omp::isOpenMPModule(ModuleOp module) {
+  return module->hasAttr("omp.version");
+}
+
 static bool allocaUseRequiresSharedMem(const OpOperand &use) {
   Operation *owner = use.getOwner();
   if (auto parallelOp = dyn_cast<omp::ParallelOp>(owner)) {
diff --git 
a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp 
b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index e09bb720ced2d..2c81c9231a9b7 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
@@ -8184,27 +8184,16 @@ convertFlagsAttr(Operation *op, mlir::omp::FlagsAttr 
attribute,
   if (attribute.getNoGpuLib())
     return success();
 
-  ompBuilder->createGlobalFlag(
-      attribute.getDebugKind() /*LangOpts().OpenMPTargetDebug*/,
-      "__omp_rtl_debug_kind");
-  ompBuilder->createGlobalFlag(
-      attribute
-          .getAssumeTeamsOversubscription() 
/*LangOpts().OpenMPTeamSubscription*/
-      ,
-      "__omp_rtl_assume_teams_oversubscription");
-  ompBuilder->createGlobalFlag(
-      attribute
-          .getAssumeThreadsOversubscription() 
/*LangOpts().OpenMPThreadSubscription*/
-      ,
-      "__omp_rtl_assume_threads_oversubscription");
-  ompBuilder->createGlobalFlag(
-      attribute.getAssumeNoThreadState() /*LangOpts().OpenMPNoThreadState*/,
-      "__omp_rtl_assume_no_thread_state");
-  ompBuilder->createGlobalFlag(
-      attribute
-          .getAssumeNoNestedParallelism() 
/*LangOpts().OpenMPNoNestedParallelism*/
-      ,
-      "__omp_rtl_assume_no_nested_parallelism");
+  ompBuilder->createGlobalFlag(attribute.getDebugKind(),
+                               "__omp_rtl_debug_kind");
+  ompBuilder->createGlobalFlag(attribute.getAssumeTeamsOversubscription(),
+                               "__omp_rtl_assume_teams_oversubscription");
+  ompBuilder->createGlobalFlag(attribute.getAssumeThreadsOversubscription(),
+                               "__omp_rtl_assume_threads_oversubscription");
+  ompBuilder->createGlobalFlag(attribute.getAssumeNoThreadState(),
+                               "__omp_rtl_assume_no_thread_state");
+  ompBuilder->createGlobalFlag(attribute.getAssumeNoNestedParallelism(),
+                               "__omp_rtl_assume_no_nested_parallelism");
   return success();
 }
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to