29
29
#include " mlir/Transforms/DialectConversion.h"
30
30
#include " llvm/ADT/SmallSet.h"
31
31
#include " llvm/Support/CommandLine.h"
32
- #include < mutex>
33
32
34
33
namespace fir {
35
34
#define GEN_PASS_DEF_POLYMORPHICOPCONVERSION
@@ -48,9 +47,8 @@ class SelectTypeConv : public OpConversionPattern<fir::SelectTypeOp> {
48
47
public:
49
48
using OpConversionPattern<fir::SelectTypeOp>::OpConversionPattern;
50
49
51
- SelectTypeConv (mlir::MLIRContext *ctx, std::mutex *moduleMutex)
52
- : mlir::OpConversionPattern<fir::SelectTypeOp>(ctx),
53
- moduleMutex (moduleMutex) {}
50
+ SelectTypeConv (mlir::MLIRContext *ctx)
51
+ : mlir::OpConversionPattern<fir::SelectTypeOp>(ctx) {}
54
52
55
53
mlir::LogicalResult
56
54
matchAndRewrite (fir::SelectTypeOp selectType, OpAdaptor adaptor,
@@ -72,9 +70,6 @@ class SelectTypeConv : public OpConversionPattern<fir::SelectTypeOp> {
72
70
73
71
llvm::SmallSet<llvm::StringRef, 4 > collectAncestors (fir::TypeInfoOp dt,
74
72
mlir::ModuleOp mod) const ;
75
-
76
- // Mutex used to guard insertion of mlir::func::FuncOp in the module.
77
- std::mutex *moduleMutex;
78
73
};
79
74
80
75
// / Lower `fir.dispatch` operation. A virtual call to a method in a dispatch
@@ -223,21 +218,18 @@ class PolymorphicOpConversion
223
218
: public fir::impl::PolymorphicOpConversionBase<PolymorphicOpConversion> {
224
219
public:
225
220
mlir::LogicalResult initialize (mlir::MLIRContext *ctx) override {
226
- moduleMutex = new std::mutex ();
227
221
return mlir::success ();
228
222
}
229
223
230
224
void runOnOperation () override {
231
225
auto *context = &getContext ();
232
- auto mod = mlir::dyn_cast_or_null<mlir::ModuleOp>(getOperation ());
233
- if (!mod)
234
- mod = getOperation ()->getParentOfType <ModuleOp>();
226
+ mlir::ModuleOp mod = getOperation ();
235
227
mlir::RewritePatternSet patterns (context);
236
228
237
229
BindingTables bindingTables;
238
230
buildBindingTables (bindingTables, mod);
239
231
240
- patterns.insert <SelectTypeConv>(context, moduleMutex );
232
+ patterns.insert <SelectTypeConv>(context);
241
233
patterns.insert <DispatchOpConv>(context, bindingTables);
242
234
mlir::ConversionTarget target (*context);
243
235
target.addLegalDialect <mlir::affine::AffineDialect,
@@ -255,9 +247,6 @@ class PolymorphicOpConversion
255
247
signalPassFailure ();
256
248
}
257
249
}
258
-
259
- private:
260
- std::mutex *moduleMutex;
261
250
};
262
251
} // namespace
263
252
@@ -410,7 +399,6 @@ mlir::LogicalResult SelectTypeConv::genTypeLadderStep(
410
399
{
411
400
// Since conversion is done in parallel for each fir.select_type
412
401
// operation, the runtime function insertion must be threadsafe.
413
- std::lock_guard<std::mutex> lock (*moduleMutex);
414
402
callee =
415
403
fir::createFuncOp (rewriter.getUnknownLoc (), mod, fctName,
416
404
rewriter.getFunctionType ({descNoneTy, typeDescTy},
0 commit comments