@@ -186,6 +186,32 @@ struct MapInfoOpConversion : public ConvertOpToLLVMPattern<omp::MapInfoOp> {
186186 }
187187};
188188
189+ struct DeclMapperOpConversion
190+ : public ConvertOpToLLVMPattern<omp::DeclareMapperOp> {
191+ using ConvertOpToLLVMPattern<omp::DeclareMapperOp>::ConvertOpToLLVMPattern;
192+ LogicalResult
193+ matchAndRewrite (omp::DeclareMapperOp curOp, OpAdaptor adaptor,
194+ ConversionPatternRewriter &rewriter) const override {
195+ const TypeConverter *converter = ConvertToLLVMPattern::getTypeConverter ();
196+ SmallVector<NamedAttribute> newAttrs;
197+ newAttrs.emplace_back (curOp.getSymNameAttrName (), curOp.getSymNameAttr ());
198+ newAttrs.emplace_back (
199+ curOp.getVarTypeAttrName (),
200+ TypeAttr::get (converter->convertType (curOp.getVarType ())));
201+
202+ auto newOp = rewriter.create <omp::DeclareMapperOp>(
203+ curOp.getLoc (), TypeRange (), adaptor.getOperands (), newAttrs);
204+ rewriter.inlineRegionBefore (curOp.getRegion (), newOp.getRegion (),
205+ newOp.getRegion ().end ());
206+ if (failed (rewriter.convertRegionTypes (&newOp.getRegion (),
207+ *this ->getTypeConverter ())))
208+ return failure ();
209+
210+ rewriter.eraseOp (curOp);
211+ return success ();
212+ }
213+ };
214+
189215template <typename OpType>
190216struct MultiRegionOpConversion : public ConvertOpToLLVMPattern <OpType> {
191217 using ConvertOpToLLVMPattern<OpType>::ConvertOpToLLVMPattern;
@@ -225,19 +251,20 @@ void mlir::configureOpenMPToLLVMConversionLegality(
225251 ConversionTarget &target, const LLVMTypeConverter &typeConverter) {
226252 target.addDynamicallyLegalOp <
227253 omp::AtomicReadOp, omp::AtomicWriteOp, omp::CancellationPointOp,
228- omp::CancelOp, omp::CriticalDeclareOp, omp::FlushOp, omp::MapBoundsOp ,
229- omp::MapInfoOp , omp::OrderedOp , omp::ScanOp , omp::TargetEnterDataOp ,
230- omp::TargetExitDataOp , omp::TargetUpdateOp , omp::ThreadprivateOp ,
231- omp::YieldOp>([&](Operation *op) {
254+ omp::CancelOp, omp::CriticalDeclareOp, omp::DeclareMapperInfoOp ,
255+ omp::FlushOp , omp::MapBoundsOp , omp::MapInfoOp , omp::OrderedOp, omp::ScanOp ,
256+ omp::TargetEnterDataOp , omp::TargetExitDataOp , omp::TargetUpdateOp ,
257+ omp::ThreadprivateOp, omp:: YieldOp>([&](Operation *op) {
232258 return typeConverter.isLegal (op->getOperandTypes ()) &&
233259 typeConverter.isLegal (op->getResultTypes ());
234260 });
235261 target.addDynamicallyLegalOp <
236- omp::AtomicUpdateOp, omp::CriticalOp, omp::DeclareReductionOp,
237- omp::DistributeOp, omp::LoopNestOp, omp::LoopOp, omp::MasterOp,
238- omp::OrderedRegionOp, omp::ParallelOp, omp::SectionOp, omp::SectionsOp,
239- omp::SimdOp, omp::SingleOp, omp::TargetDataOp, omp::TargetOp,
240- omp::TaskgroupOp, omp::TaskloopOp, omp::TaskOp, omp::TeamsOp,
262+ omp::AtomicUpdateOp, omp::CriticalOp, omp::DeclareMapperOp,
263+ omp::DeclareReductionOp, omp::DistributeOp, omp::LoopNestOp, omp::LoopOp,
264+ omp::MasterOp, omp::OrderedRegionOp, omp::ParallelOp,
265+ omp::PrivateClauseOp, omp::SectionOp, omp::SectionsOp, omp::SimdOp,
266+ omp::SingleOp, omp::TargetDataOp, omp::TargetOp, omp::TaskgroupOp,
267+ omp::TaskloopOp, omp::TaskOp, omp::TeamsOp,
241268 omp::WsloopOp>([&](Operation *op) {
242269 return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243270 [&](Region ®ion) {
@@ -267,12 +294,13 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
267294 [&](omp::MapBoundsType type) -> Type { return type; });
268295
269296 patterns.add <
270- AtomicReadOpConversion, MapInfoOpConversion,
297+ AtomicReadOpConversion, DeclMapperOpConversion, MapInfoOpConversion,
271298 MultiRegionOpConversion<omp::DeclareReductionOp>,
272299 MultiRegionOpConversion<omp::PrivateClauseOp>,
273300 RegionLessOpConversion<omp::CancellationPointOp>,
274301 RegionLessOpConversion<omp::CancelOp>,
275302 RegionLessOpConversion<omp::CriticalDeclareOp>,
303+ RegionLessOpConversion<omp::DeclareMapperInfoOp>,
276304 RegionLessOpConversion<omp::OrderedOp>,
277305 RegionLessOpConversion<omp::ScanOp>,
278306 RegionLessOpConversion<omp::TargetEnterDataOp>,
0 commit comments