[Mlir-commits] [mlir] [NFC][OpenMP][MLIR] Refactor code related to collecting privatizer info into a shared util (PR #131582)

Sergio Afonso llvmlistbot at llvm.org
Tue Mar 18 05:47:30 PDT 2025


================
@@ -696,20 +696,42 @@ convertOmpCritical(Operation &opInst, llvm::IRBuilderBase &builder,
   return success();
 }
 
-/// Populates `privatizations` with privatization declarations used for the
-/// given op.
-template <class OP>
-static void collectPrivatizationDecls(
-    OP op, SmallVectorImpl<omp::PrivateClauseOp> &privatizations) {
-  std::optional<ArrayAttr> attr = op.getPrivateSyms();
-  if (!attr)
-    return;
+/// A util to collect info needed to convert delayed privatizers from MLIR to
+/// LLVM.
+struct PrivateVarsInfo {
+  template <typename OP>
+  PrivateVarsInfo(OP op)
+      : privateBlockArgs(
+            cast<omp::BlockArgOpenMPOpInterface>(*op).getPrivateBlockArgs()) {
+    mlirPrivateVars.reserve(privateBlockArgs.size());
+    llvmPrivateVars.reserve(privateBlockArgs.size());
+    collectPrivatizationDecls<OP>(op, privateDecls);
 
-  privatizations.reserve(privatizations.size() + attr->size());
-  for (auto symbolRef : attr->getAsRange<SymbolRefAttr>()) {
-    privatizations.push_back(findPrivatizer(op, symbolRef));
+    for (mlir::Value privateVar : op.getPrivateVars())
+      mlirPrivateVars.push_back(privateVar);
   }
-}
+
+  MutableArrayRef<BlockArgument> privateBlockArgs;
+  SmallVector<mlir::Value> mlirPrivateVars;
+  SmallVector<llvm::Value *> llvmPrivateVars;
+  SmallVector<omp::PrivateClauseOp> privateDecls;
+
+private:
+  /// Populates `privatizations` with privatization declarations used for the
+  /// given op.
+  template <class OP>
+  static void collectPrivatizationDecls(
+      OP op, SmallVectorImpl<omp::PrivateClauseOp> &privatizations) {
----------------
skatrak wrote:

Nit: Couldn't this access `privateDecls` directly rather than being `static`?

https://github.com/llvm/llvm-project/pull/131582


More information about the Mlir-commits mailing list