@@ -186,6 +186,32 @@ struct MapInfoOpConversion : public ConvertOpToLLVMPattern<omp::MapInfoOp> {
186
186
}
187
187
};
188
188
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
+
189
215
template <typename OpType>
190
216
struct MultiRegionOpConversion : public ConvertOpToLLVMPattern <OpType> {
191
217
using ConvertOpToLLVMPattern<OpType>::ConvertOpToLLVMPattern;
@@ -225,19 +251,20 @@ void mlir::configureOpenMPToLLVMConversionLegality(
225
251
ConversionTarget &target, const LLVMTypeConverter &typeConverter) {
226
252
target.addDynamicallyLegalOp <
227
253
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) {
232
258
return typeConverter.isLegal (op->getOperandTypes ()) &&
233
259
typeConverter.isLegal (op->getResultTypes ());
234
260
});
235
261
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,
241
268
omp::WsloopOp>([&](Operation *op) {
242
269
return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243
270
[&](Region ®ion) {
@@ -267,12 +294,13 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
267
294
[&](omp::MapBoundsType type) -> Type { return type; });
268
295
269
296
patterns.add <
270
- AtomicReadOpConversion, MapInfoOpConversion,
297
+ AtomicReadOpConversion, DeclMapperOpConversion, MapInfoOpConversion,
271
298
MultiRegionOpConversion<omp::DeclareReductionOp>,
272
299
MultiRegionOpConversion<omp::PrivateClauseOp>,
273
300
RegionLessOpConversion<omp::CancellationPointOp>,
274
301
RegionLessOpConversion<omp::CancelOp>,
275
302
RegionLessOpConversion<omp::CriticalDeclareOp>,
303
+ RegionLessOpConversion<omp::DeclareMapperInfoOp>,
276
304
RegionLessOpConversion<omp::OrderedOp>,
277
305
RegionLessOpConversion<omp::ScanOp>,
278
306
RegionLessOpConversion<omp::TargetEnterDataOp>,
0 commit comments