@@ -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.getTypeAttrName (),
200
+ TypeAttr::get (converter->convertType (curOp.getType ())));
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,21 @@ 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) {
232
- return typeConverter.isLegal (op->getOperandTypes ()) &&
233
- typeConverter.isLegal (op->getResultTypes ());
234
- });
254
+ omp::CancelOp, omp::CriticalDeclareOp, omp::DeclareMapperInfoOp,
255
+ omp::FlushOp, omp::MapBoundsOp, omp::MapInfoOp, omp::OrderedOp,
256
+ omp::ScanOp, omp::TargetEnterDataOp, omp::TargetExitDataOp,
257
+ omp::TargetUpdateOp, omp::ThreadprivateOp, omp::YieldOp>(
258
+ [&](Operation *op) {
259
+ return typeConverter.isLegal (op->getOperandTypes ()) &&
260
+ typeConverter.isLegal (op->getResultTypes ());
261
+ });
235
262
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,
263
+ omp::AtomicUpdateOp, omp::CriticalOp, omp::DeclareMapperOp,
264
+ omp::DeclareReductionOp, omp::DistributeOp, omp::LoopNestOp, omp::LoopOp,
265
+ omp::MasterOp, omp::OrderedRegionOp, omp::ParallelOp,
266
+ omp::PrivateClauseOp, omp::SectionOp, omp::SectionsOp, omp::SimdOp,
267
+ omp::SingleOp, omp::TargetDataOp, omp::TargetOp, omp::TaskgroupOp,
268
+ omp::TaskloopOp, omp::TaskOp, omp::TeamsOp,
241
269
omp::WsloopOp>([&](Operation *op) {
242
270
return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243
271
[&](Region ®ion) {
@@ -267,12 +295,13 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
267
295
[&](omp::MapBoundsType type) -> Type { return type; });
268
296
269
297
patterns.add <
270
- AtomicReadOpConversion, MapInfoOpConversion,
298
+ AtomicReadOpConversion, DeclMapperOpConversion, MapInfoOpConversion,
271
299
MultiRegionOpConversion<omp::DeclareReductionOp>,
272
300
MultiRegionOpConversion<omp::PrivateClauseOp>,
273
301
RegionLessOpConversion<omp::CancellationPointOp>,
274
302
RegionLessOpConversion<omp::CancelOp>,
275
303
RegionLessOpConversion<omp::CriticalDeclareOp>,
304
+ RegionLessOpConversion<omp::DeclareMapperInfoOp>,
276
305
RegionLessOpConversion<omp::OrderedOp>,
277
306
RegionLessOpConversion<omp::ScanOp>,
278
307
RegionLessOpConversion<omp::TargetEnterDataOp>,
0 commit comments