@@ -46,6 +46,17 @@ struct RegionOpConversion : public ConvertOpToLLVMPattern<OpType> {
46
46
*this ->getTypeConverter ())))
47
47
return failure ();
48
48
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
+
49
60
rewriter.eraseOp (curOp);
50
61
return success ();
51
62
}
@@ -231,11 +242,12 @@ void mlir::configureOpenMPToLLVMConversionLegality(
231
242
mlir::omp::DataOp, mlir::omp::OrderedRegionOp, mlir::omp::ParallelOp,
232
243
mlir::omp::WsLoopOp, mlir::omp::SimdLoopOp, mlir::omp::MasterOp,
233
244
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
+ });
239
251
target.addDynamicallyLegalOp <
240
252
mlir::omp::AtomicReadOp, mlir::omp::AtomicWriteOp, mlir::omp::FlushOp,
241
253
mlir::omp::ThreadprivateOp, mlir::omp::YieldOp, mlir::omp::EnterDataOp,
@@ -275,6 +287,7 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
275
287
RegionOpConversion<omp::SimdLoopOp>, RegionOpConversion<omp::SingleOp>,
276
288
RegionOpConversion<omp::TaskGroupOp>, RegionOpConversion<omp::TaskOp>,
277
289
RegionOpConversion<omp::DataOp>, RegionOpConversion<omp::TargetOp>,
290
+ RegionOpConversion<omp::PrivateClauseOp>,
278
291
RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>,
279
292
RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>,
280
293
RegionLessOpWithVarOperandsConversion<omp::FlushOp>,
0 commit comments