[Mlir-commits] [mlir] [mlir][OpenMP] - MLIR to LLVMIR translation support for delayed privatization in `omp.target` ops. (PR #109668)
Pranav Bhandarkar
llvmlistbot at llvm.org
Wed Sep 25 15:21:57 PDT 2024
================
@@ -3435,6 +3450,59 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
const auto &arg = targetRegion.front().getArgument(argIndex);
moduleTranslation.mapValue(arg, mapOpValue);
}
+
+ // Do privatization after moduleTranslation has already recorded
+ // mapped values.
+ if (!targetOp.getPrivateVars().empty()) {
+ auto oldIP = builder.saveIP();
+ builder.restoreIP(allocaIP);
+
+ OperandRange privateVars = targetOp.getPrivateVars();
+ std::optional<ArrayAttr> privateSyms = targetOp.getPrivateSyms();
+ unsigned numMapVars = targetOp.getMapVars().size();
+ Block &firstTargetBlock = targetRegion.front();
+ BlockArgument *blockArgsStart = firstTargetBlock.getArguments().begin();
+ BlockArgument *privArgsStart = blockArgsStart + numMapVars;
+ BlockArgument *privArgsEnd =
+ privArgsStart + targetOp.getPrivateVars().size();
+ MutableArrayRef privateBlockArgs(privArgsStart, privArgsEnd);
+
+ for (auto [privVar, privatizerNameAttr, privBlockArg] :
+ llvm::zip_equal(privateVars, *privateSyms, privateBlockArgs)) {
+
+ SymbolRefAttr privSym = llvm::cast<SymbolRefAttr>(privatizerNameAttr);
+ omp::PrivateClauseOp privatizer = findPrivatizer(&opInst, privSym);
+ if (privatizer.getDataSharingType() ==
+ omp::DataSharingClauseType::FirstPrivate ||
+ !privatizer.getDeallocRegion().empty()) {
+ opInst.emitError("Translation of omp.target from MLIR to LLVMIR "
+ "failed because translation of firstprivate and "
+ " private allocatables is not supported yet");
+ bodyGenStatus = failure();
+ } else {
+ omp::PrivateClauseOp clonedPrivatizer =
+ clonePrivatizer(moduleTranslation, privatizer, &opInst);
+ Region &allocRegion = clonedPrivatizer.getAllocRegion();
+ BlockArgument allocRegionArg = allocRegion.getArgument(0);
+ replaceAllUsesInRegionWith(allocRegionArg, privVar, allocRegion);
----------------
bhandarkar-pranav wrote:
Thanks for the suggestion @tblah. I have made these changes now. Please take a look.
https://github.com/llvm/llvm-project/pull/109668
More information about the Mlir-commits
mailing list