@@ -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,20 +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::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 ,
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::PrivateClauseOp,
239
- omp::SectionOp, omp::SectionsOp, omp::SimdOp, omp::SingleOp,
240
- omp::TargetDataOp, omp::TargetOp, omp::TaskgroupOp, omp::TaskloopOp,
241
- omp::TaskOp, omp::TeamsOp, omp::WsloopOp>([&](Operation *op) {
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,
268
+ omp::WsloopOp>([&](Operation *op) {
242
269
return std::all_of (op->getRegions ().begin (), op->getRegions ().end (),
243
270
[&](Region ®ion) {
244
271
return typeConverter.isLegal (®ion);
@@ -257,12 +284,13 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
257
284
[&](omp::MapBoundsType type) -> Type { return type; });
258
285
259
286
patterns.add <
260
- AtomicReadOpConversion, MapInfoOpConversion,
287
+ AtomicReadOpConversion, DeclMapperOpConversion, MapInfoOpConversion,
261
288
MultiRegionOpConversion<omp::DeclareReductionOp>,
262
289
MultiRegionOpConversion<omp::PrivateClauseOp>,
263
290
RegionLessOpConversion<omp::CancellationPointOp>,
264
291
RegionLessOpConversion<omp::CancelOp>,
265
292
RegionLessOpConversion<omp::CriticalDeclareOp>,
293
+ RegionLessOpConversion<omp::DeclareMapperInfoOp>,
266
294
RegionLessOpConversion<omp::OrderedOp>,
267
295
RegionLessOpConversion<omp::TargetEnterDataOp>,
268
296
RegionLessOpConversion<omp::TargetExitDataOp>,
0 commit comments