[Mlir-commits] [mlir] [flang][OpenMP] Translate OpenMP scopes when compiling for target device (PR #130078)

Sergio Afonso llvmlistbot at llvm.org
Mon Mar 10 06:46:46 PDT 2025


================
@@ -5255,6 +5283,51 @@ convertTargetOpsInNest(Operation *op, llvm::IRBuilderBase &builder,
               return WalkResult::interrupt();
             return WalkResult::skip();
           }
+
+          // Non-target ops might nest target-related ops, therefore, we
+          // translate them as non-OpenMP scopes. Translating them is needed by
+          // nested target-related ops since they might LLVM values defined in
+          // their parent non-target ops.
+          if (isa<omp::OpenMPDialect>(oper->getDialect()) &&
+              oper->getParentOfType<LLVM::LLVMFuncOp>() &&
+              !oper->getRegions().empty()) {
+
+            // TODO Handle other ops with entry block args.
+            llvm::TypeSwitch<Operation &>(*oper)
+                .Case([&](omp::WsloopOp wsloopOp) {
+                  forwardPrivateArgs(wsloopOp, moduleTranslation);
+                  forwardReductionArgs(wsloopOp, moduleTranslation);
+                })
+                .Case([&](omp::ParallelOp parallelOp) {
+                  forwardPrivateArgs(parallelOp, moduleTranslation);
+                  forwardReductionArgs(parallelOp, moduleTranslation);
+                })
+                .Case([&](omp::TaskOp taskOp) {
+                  forwardPrivateArgs(taskOp, moduleTranslation);
+                });
----------------
skatrak wrote:

One way to figure out which ops we need to look at here is to search for `OpenMP_InReductionClause`, `OpenMP_PrivateClause`, `OpenMP_ReductionClause`, `OpenMP_TaskReductionClause`, `OpenMP_UseDeviceAddrClause`, `OpenMP_UseDevicePtrClause` in OpenMPOps.td. I think we need to have cases for all of them before merging this, to avoid crashing the compiler.

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


More information about the Mlir-commits mailing list