@@ -223,22 +223,21 @@ void MultiRegionOpConversion<omp::PrivateClauseOp>::forwardOpAttrs(
223223void mlir::configureOpenMPToLLVMConversionLegality (
224224 ConversionTarget &target, LLVMTypeConverter &typeConverter) {
225225 target.addDynamicallyLegalOp <
226- mlir:: omp::AtomicReadOp, mlir:: omp::AtomicWriteOp, mlir:: omp::FlushOp ,
227- mlir:: omp::ThreadprivateOp, mlir:: omp::YieldOp ,
228- mlir:: omp::TargetEnterDataOp, mlir:: omp::TargetExitDataOp ,
229- mlir:: omp::TargetUpdateOp, mlir:: omp::MapBoundsOp, mlir:: omp::MapInfoOp>(
230- [&](Operation *op) {
231- return typeConverter.isLegal (op->getOperandTypes ()) &&
232- typeConverter.isLegal (op->getResultTypes ());
233- });
226+ omp::AtomicReadOp, omp::AtomicWriteOp, omp::CancellationPointOp ,
227+ omp::CancelOp, omp::CriticalDeclareOp, omp::FlushOp, omp::MapBoundsOp ,
228+ omp::MapInfoOp, omp::OrderedOp, omp::TargetEnterDataOp ,
229+ omp::TargetExitDataOp, omp::TargetUpdateOp, omp::ThreadprivateOp,
230+ omp::YieldOp>( [&](Operation *op) {
231+ return typeConverter.isLegal (op->getOperandTypes ()) &&
232+ typeConverter.isLegal (op->getResultTypes ());
233+ });
234234 target.addDynamicallyLegalOp <
235- mlir::omp::AtomicUpdateOp, mlir::omp::CriticalOp, mlir::omp::TargetOp,
236- mlir::omp::TargetDataOp, mlir::omp::LoopNestOp,
237- mlir::omp::OrderedRegionOp, mlir::omp::ParallelOp, mlir::omp::WsloopOp,
238- mlir::omp::SimdOp, mlir::omp::MasterOp, mlir::omp::SectionOp,
239- mlir::omp::SectionsOp, mlir::omp::SingleOp, mlir::omp::TaskgroupOp,
240- mlir::omp::TaskOp, mlir::omp::DeclareReductionOp,
241- mlir::omp::PrivateClauseOp>([&](Operation *op) {
235+ omp::AtomicUpdateOp, omp::CriticalOp, omp::DeclareReductionOp,
236+ omp::DistributeOp, omp::LoopNestOp, omp::MasterOp, omp::OrderedRegionOp,
237+ omp::ParallelOp, omp::PrivateClauseOp, omp::SectionOp, omp::SectionsOp,
238+ omp::SimdOp, omp::SingleOp, omp::TargetDataOp, omp::TargetOp,
239+ omp::TaskgroupOp, omp::TaskloopOp, omp::TaskOp, omp::TeamsOp,
240+ omp::WsloopOp>([&](Operation *op) {
242241 return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243242 [&](Region ®ion) {
244243 return typeConverter.isLegal (®ion);
@@ -260,23 +259,31 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
260259 AtomicReadOpConversion, MapInfoOpConversion,
261260 MultiRegionOpConversion<omp::DeclareReductionOp>,
262261 MultiRegionOpConversion<omp::PrivateClauseOp>,
263- RegionOpConversion<omp::CriticalOp>, RegionOpConversion<omp::LoopNestOp>,
264- RegionOpConversion<omp::MasterOp>,
265- RegionOpConversion<omp::OrderedRegionOp>,
266- RegionOpConversion<omp::ParallelOp>, RegionOpConversion<omp::WsloopOp>,
267- RegionOpConversion<omp::SectionsOp>, RegionOpConversion<omp::SectionOp>,
268- RegionOpConversion<omp::SimdOp>, RegionOpConversion<omp::SingleOp>,
269- RegionOpConversion<omp::TaskgroupOp>, RegionOpConversion<omp::TaskOp>,
270- RegionOpConversion<omp::TargetDataOp>, RegionOpConversion<omp::TargetOp>,
271- RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>,
272- RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>,
273- RegionLessOpWithVarOperandsConversion<omp::FlushOp>,
274- RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>,
275- RegionLessOpConversion<omp::YieldOp>,
262+ RegionLessOpConversion<omp::CancellationPointOp>,
263+ RegionLessOpConversion<omp::CancelOp>,
264+ RegionLessOpConversion<omp::CriticalDeclareOp>,
265+ RegionLessOpConversion<omp::OrderedOp>,
276266 RegionLessOpConversion<omp::TargetEnterDataOp>,
277267 RegionLessOpConversion<omp::TargetExitDataOp>,
278268 RegionLessOpConversion<omp::TargetUpdateOp>,
279- RegionLessOpWithVarOperandsConversion<omp::MapBoundsOp>>(converter);
269+ RegionLessOpConversion<omp::YieldOp>,
270+ RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>,
271+ RegionLessOpWithVarOperandsConversion<omp::FlushOp>,
272+ RegionLessOpWithVarOperandsConversion<omp::MapBoundsOp>,
273+ RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>,
274+ RegionOpConversion<omp::AtomicCaptureOp>,
275+ RegionOpConversion<omp::CriticalOp>,
276+ RegionOpConversion<omp::DistributeOp>,
277+ RegionOpConversion<omp::LoopNestOp>, RegionOpConversion<omp::MaskedOp>,
278+ RegionOpConversion<omp::MasterOp>,
279+ RegionOpConversion<omp::OrderedRegionOp>,
280+ RegionOpConversion<omp::ParallelOp>, RegionOpConversion<omp::SectionOp>,
281+ RegionOpConversion<omp::SectionsOp>, RegionOpConversion<omp::SimdOp>,
282+ RegionOpConversion<omp::SingleOp>, RegionOpConversion<omp::TargetDataOp>,
283+ RegionOpConversion<omp::TargetOp>, RegionOpConversion<omp::TaskgroupOp>,
284+ RegionOpConversion<omp::TaskloopOp>, RegionOpConversion<omp::TaskOp>,
285+ RegionOpConversion<omp::TeamsOp>, RegionOpConversion<omp::WsloopOp>,
286+ RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>>(converter);
280287}
281288
282289namespace {
@@ -301,8 +308,8 @@ void ConvertOpenMPToLLVMPass::runOnOperation() {
301308 populateOpenMPToLLVMConversionPatterns (converter, patterns);
302309
303310 LLVMConversionTarget target (getContext ());
304- target.addLegalOp <omp::TerminatorOp , omp::TaskyieldOp , omp::FlushOp ,
305- omp::BarrierOp , omp::TaskwaitOp >();
311+ target.addLegalOp <omp::BarrierOp , omp::FlushOp , omp::TaskwaitOp ,
312+ omp::TaskyieldOp , omp::TerminatorOp >();
306313 configureOpenMPToLLVMConversionLegality (target, converter);
307314 if (failed (applyPartialConversion (module , target, std::move (patterns))))
308315 signalPassFailure ();
0 commit comments