[flang-commits] [flang] [flang][OpenMP] Add `reduction` clause support to `loop` directive (PR #128849)

Kareem Ergawy via flang-commits flang-commits at lists.llvm.org
Thu Feb 27 05:13:33 PST 2025


================
@@ -288,20 +294,51 @@ class GenericLoopConversionPattern
     rewriter.createBlock(&distributeOp.getRegion());
 
     mlir::omp::WsloopOperands wsloopClauseOps;
+    populateReductionClauseOps(loopOp, wsloopClauseOps);
+    Fortran::common::openmp::EntryBlockArgs wsloopArgs;
+    wsloopArgs.reduction.vars = wsloopClauseOps.reductionVars;
+
     auto wsloopOp =
         rewriter.create<mlir::omp::WsloopOp>(loopOp.getLoc(), wsloopClauseOps);
     wsloopOp.setComposite(true);
-    rewriter.createBlock(&wsloopOp.getRegion());
+    mlir::Block *loopBlock =
+        genEntryBlock(rewriter, wsloopArgs, wsloopOp.getRegion());
 
     mlir::IRMapping mapper;
-    mlir::Block &loopBlock = *loopOp.getRegion().begin();
 
-    for (auto [loopOpArg, parallelOpArg] : llvm::zip_equal(
-             loopBlock.getArguments(), parallelBlock->getArguments()))
+    auto loopBlockInterface =
+        llvm::cast<mlir::omp::BlockArgOpenMPOpInterface>(*loopOp);
+
+    for (auto [loopOpArg, parallelOpArg] :
----------------
ergawy wrote:

Used the `BlockArgOpenMPInterface` to access the relevant args.

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


More information about the flang-commits mailing list