@@ -230,17 +230,6 @@ struct MultiRegionOpConversion : public ConvertOpToLLVMPattern<OpType> {
230230
231231void mlir::configureOpenMPToLLVMConversionLegality (
232232 ConversionTarget &target, LLVMTypeConverter &typeConverter) {
233- target.addDynamicallyLegalOp <
234- mlir::omp::AtomicUpdateOp, mlir::omp::CriticalOp, mlir::omp::TargetOp,
235- mlir::omp::DataOp, mlir::omp::OrderedRegionOp, mlir::omp::ParallelOp,
236- mlir::omp::WsLoopOp, mlir::omp::SimdLoopOp, mlir::omp::MasterOp,
237- mlir::omp::SectionOp, mlir::omp::SectionsOp, mlir::omp::SingleOp,
238- mlir::omp::TaskGroupOp, mlir::omp::TaskOp, mlir::omp::PrivateClauseOp>(
239- [&](Operation *op) {
240- return typeConverter.isLegal (&op->getRegion (0 )) &&
241- typeConverter.isLegal (op->getOperandTypes ()) &&
242- typeConverter.isLegal (op->getResultTypes ());
243- });
244233 target.addDynamicallyLegalOp <
245234 mlir::omp::AtomicReadOp, mlir::omp::AtomicWriteOp, mlir::omp::FlushOp,
246235 mlir::omp::ThreadprivateOp, mlir::omp::YieldOp, mlir::omp::EnterDataOp,
@@ -252,14 +241,20 @@ void mlir::configureOpenMPToLLVMConversionLegality(
252241 target.addDynamicallyLegalOp <mlir::omp::ReductionOp>([&](Operation *op) {
253242 return typeConverter.isLegal (op->getOperandTypes ());
254243 });
255- target.addDynamicallyLegalOp <mlir::omp::ReductionDeclareOp>(
256- [&](Operation *op) {
257- return typeConverter.isLegal (&op->getRegion (0 )) &&
258- typeConverter.isLegal (&op->getRegion (1 )) &&
259- typeConverter.isLegal (&op->getRegion (2 )) &&
260- typeConverter.isLegal (op->getOperandTypes ()) &&
261- typeConverter.isLegal (op->getResultTypes ());
262- });
244+ target.addDynamicallyLegalOp <
245+ mlir::omp::AtomicUpdateOp, mlir::omp::CriticalOp, mlir::omp::TargetOp,
246+ mlir::omp::DataOp, mlir::omp::OrderedRegionOp, mlir::omp::ParallelOp,
247+ mlir::omp::WsLoopOp, mlir::omp::SimdLoopOp, mlir::omp::MasterOp,
248+ mlir::omp::SectionOp, mlir::omp::SectionsOp, mlir::omp::SingleOp,
249+ mlir::omp::TaskGroupOp, mlir::omp::TaskOp, mlir::omp::ReductionDeclareOp,
250+ mlir::omp::PrivateClauseOp>([&](Operation *op) {
251+ return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
252+ [&](Region ®ion) {
253+ return typeConverter.isLegal (®ion);
254+ }) &&
255+ typeConverter.isLegal (op->getOperandTypes ()) &&
256+ typeConverter.isLegal (op->getResultTypes ());
257+ });
263258}
264259
265260void mlir::populateOpenMPToLLVMConversionPatterns (LLVMTypeConverter &converter,
0 commit comments