@@ -46,6 +46,17 @@ struct RegionOpConversion : public ConvertOpToLLVMPattern<OpType> {
4646 *this ->getTypeConverter ())))
4747 return failure ();
4848
49+ if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
50+ auto llvmType = this ->getTypeConverter ()->convertType (
51+ adaptor.getFunctionType ().getInput (0 ));
52+
53+ if (!llvmType)
54+ return rewriter.notifyMatchFailure (curOp,
55+ " signature conversion failed" );
56+ newOp.setFunctionType (
57+ FunctionType::get (rewriter.getContext (), {llvmType}, {llvmType}));
58+ }
59+
4960 rewriter.eraseOp (curOp);
5061 return success ();
5162 }
@@ -231,11 +242,12 @@ void mlir::configureOpenMPToLLVMConversionLegality(
231242 mlir::omp::DataOp, mlir::omp::OrderedRegionOp, mlir::omp::ParallelOp,
232243 mlir::omp::WsLoopOp, mlir::omp::SimdLoopOp, mlir::omp::MasterOp,
233244 mlir::omp::SectionOp, mlir::omp::SectionsOp, mlir::omp::SingleOp,
234- mlir::omp::TaskGroupOp, mlir::omp::TaskOp>([&](Operation *op) {
235- return typeConverter.isLegal (&op->getRegion (0 )) &&
236- typeConverter.isLegal (op->getOperandTypes ()) &&
237- typeConverter.isLegal (op->getResultTypes ());
238- });
245+ mlir::omp::TaskGroupOp, mlir::omp::TaskOp, mlir::omp::PrivateClauseOp>(
246+ [&](Operation *op) {
247+ return typeConverter.isLegal (&op->getRegion (0 )) &&
248+ typeConverter.isLegal (op->getOperandTypes ()) &&
249+ typeConverter.isLegal (op->getResultTypes ());
250+ });
239251 target.addDynamicallyLegalOp <
240252 mlir::omp::AtomicReadOp, mlir::omp::AtomicWriteOp, mlir::omp::FlushOp,
241253 mlir::omp::ThreadprivateOp, mlir::omp::YieldOp, mlir::omp::EnterDataOp,
@@ -275,6 +287,7 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
275287 RegionOpConversion<omp::SimdLoopOp>, RegionOpConversion<omp::SingleOp>,
276288 RegionOpConversion<omp::TaskGroupOp>, RegionOpConversion<omp::TaskOp>,
277289 RegionOpConversion<omp::DataOp>, RegionOpConversion<omp::TargetOp>,
290+ RegionOpConversion<omp::PrivateClauseOp>,
278291 RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>,
279292 RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>,
280293 RegionLessOpWithVarOperandsConversion<omp::FlushOp>,
0 commit comments