@@ -223,22 +223,21 @@ void MultiRegionOpConversion<omp::PrivateClauseOp>::forwardOpAttrs(
223
223
void mlir::configureOpenMPToLLVMConversionLegality (
224
224
ConversionTarget &target, LLVMTypeConverter &typeConverter) {
225
225
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
+ });
234
234
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) {
242
241
return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243
242
[&](Region ®ion) {
244
243
return typeConverter.isLegal (®ion);
@@ -260,23 +259,31 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
260
259
AtomicReadOpConversion, MapInfoOpConversion,
261
260
MultiRegionOpConversion<omp::DeclareReductionOp>,
262
261
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>,
276
266
RegionLessOpConversion<omp::TargetEnterDataOp>,
277
267
RegionLessOpConversion<omp::TargetExitDataOp>,
278
268
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);
280
287
}
281
288
282
289
namespace {
@@ -301,8 +308,8 @@ void ConvertOpenMPToLLVMPass::runOnOperation() {
301
308
populateOpenMPToLLVMConversionPatterns (converter, patterns);
302
309
303
310
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 >();
306
313
configureOpenMPToLLVMConversionLegality (target, converter);
307
314
if (failed (applyPartialConversion (module , target, std::move (patterns))))
308
315
signalPassFailure ();
0 commit comments