Skip to content

Commit 91806f3

Browse files
committed
Add conversion patttern for PrivateClauseOp.
1 parent b988994 commit 91806f3

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)