[Mlir-commits] [mlir] [flang][OpenMP] Translate OpenMP scopes when compiling for target device (PR #130078)
Pranav Bhandarkar
llvmlistbot at llvm.org
Mon Mar 10 12:56:32 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);
+ });
----------------
bhandarkar-pranav wrote:
Yes, I was going to say if there is a foolproof way of making sure we have an exhaustive and complete list of ops that can have `omp.target` ops nested in them and will need to forward their args, it'd be very useful.
https://github.com/llvm/llvm-project/pull/130078
More information about the Mlir-commits
mailing list