@@ -77,6 +77,7 @@ struct RegionLessOpWithVarOperandsConversion
77
77
}
78
78
convertedOperands.emplace_back (adaptor.getOperands ()[idx]);
79
79
}
80
+
80
81
rewriter.replaceOpWithNewOp <T>(curOp, resTypes, convertedOperands,
81
82
curOp->getAttrs ());
82
83
return success ();
@@ -138,6 +139,23 @@ struct RegionLessOpConversion : public ConvertOpToLLVMPattern<T> {
138
139
}
139
140
};
140
141
142
+ struct AtomicReadOpConversion
143
+ : public ConvertOpToLLVMPattern<omp::AtomicReadOp> {
144
+ using ConvertOpToLLVMPattern<omp::AtomicReadOp>::ConvertOpToLLVMPattern;
145
+ LogicalResult
146
+ matchAndRewrite (omp::AtomicReadOp curOp, OpAdaptor adaptor,
147
+ ConversionPatternRewriter &rewriter) const override {
148
+ TypeConverter *converter = ConvertToLLVMPattern::getTypeConverter ();
149
+ Type curElementType = curOp.getElementType ();
150
+ auto newOp = rewriter.create <omp::AtomicReadOp>(
151
+ curOp.getLoc (), TypeRange (), adaptor.getOperands (), curOp->getAttrs ());
152
+ TypeAttr typeAttr = TypeAttr::get (converter->convertType (curElementType));
153
+ newOp.setElementTypeAttr (typeAttr);
154
+ rewriter.eraseOp (curOp);
155
+ return success ();
156
+ }
157
+ };
158
+
141
159
struct ReductionOpConversion : public ConvertOpToLLVMPattern <omp::ReductionOp> {
142
160
using ConvertOpToLLVMPattern<omp::ReductionOp>::ConvertOpToLLVMPattern;
143
161
LogicalResult
@@ -213,15 +231,14 @@ void mlir::configureOpenMPToLLVMConversionLegality(
213
231
void mlir::populateOpenMPToLLVMConversionPatterns (LLVMTypeConverter &converter,
214
232
RewritePatternSet &patterns) {
215
233
patterns.add <
216
- ReductionOpConversion, ReductionDeclareOpConversion,
217
- RegionOpConversion<omp::CriticalOp>, RegionOpConversion<omp::MasterOp>,
218
- ReductionOpConversion, RegionOpConversion<omp::ParallelOp>,
219
- RegionOpConversion<omp::WsLoopOp>, RegionOpConversion<omp::SectionsOp>,
220
- RegionOpConversion<omp::SectionOp>, RegionOpConversion<omp::SimdLoopOp>,
221
- RegionOpConversion<omp::SingleOp>, RegionOpConversion<omp::TaskGroupOp>,
222
- RegionOpConversion<omp::TaskOp>, RegionOpConversion<omp::DataOp>,
223
- RegionOpConversion<omp::TargetOp>,
224
- RegionLessOpWithVarOperandsConversion<omp::AtomicReadOp>,
234
+ AtomicReadOpConversion, ReductionOpConversion,
235
+ ReductionDeclareOpConversion, RegionOpConversion<omp::CriticalOp>,
236
+ RegionOpConversion<omp::MasterOp>, ReductionOpConversion,
237
+ RegionOpConversion<omp::ParallelOp>, RegionOpConversion<omp::WsLoopOp>,
238
+ RegionOpConversion<omp::SectionsOp>, RegionOpConversion<omp::SectionOp>,
239
+ RegionOpConversion<omp::SimdLoopOp>, RegionOpConversion<omp::SingleOp>,
240
+ RegionOpConversion<omp::TaskGroupOp>, RegionOpConversion<omp::TaskOp>,
241
+ RegionOpConversion<omp::DataOp>, RegionOpConversion<omp::TargetOp>,
225
242
RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>,
226
243
RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>,
227
244
RegionLessOpWithVarOperandsConversion<omp::FlushOp>,
0 commit comments