@@ -270,12 +270,20 @@ class ArrayCoorConversion : public mlir::OpRewritePattern<fir::ArrayCoorOp> {
270270};
271271
272272class DeclareOpConversion : public mlir ::OpRewritePattern<fir::DeclareOp> {
273+ bool preserveDeclare;
274+
273275public:
274276 using OpRewritePattern::OpRewritePattern;
277+ DeclareOpConversion (mlir::MLIRContext *ctx, bool preserveDecl)
278+ : OpRewritePattern(ctx), preserveDeclare(preserveDecl) {}
275279
276280 mlir::LogicalResult
277281 matchAndRewrite (fir::DeclareOp declareOp,
278282 mlir::PatternRewriter &rewriter) const override {
283+ if (!preserveDeclare) {
284+ rewriter.replaceOp (declareOp, declareOp.getMemref ());
285+ return mlir::success ();
286+ }
279287 auto loc = declareOp.getLoc ();
280288 llvm::SmallVector<mlir::Value> shapeOpers;
281289 llvm::SmallVector<mlir::Value> shiftOpers;
@@ -319,6 +327,7 @@ class DummyScopeOpConversion
319327
320328class CodeGenRewrite : public fir ::impl::CodeGenRewriteBase<CodeGenRewrite> {
321329public:
330+ CodeGenRewrite (fir::CodeGenRewriteOptions opts) : Base(opts) {}
322331 void runOnOperation () override final {
323332 mlir::ModuleOp mod = getOperation ();
324333
@@ -336,7 +345,7 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
336345 mlir::cast<fir::BaseBoxType>(embox.getType ()).getEleTy ()));
337346 });
338347 mlir::RewritePatternSet patterns (&context);
339- fir::populatePreCGRewritePatterns (patterns);
348+ fir::populatePreCGRewritePatterns (patterns, preserveDeclare );
340349 if (mlir::failed (
341350 mlir::applyPartialConversion (mod, target, std::move (patterns)))) {
342351 mlir::emitError (mlir::UnknownLoc::get (&context),
@@ -352,12 +361,14 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
352361
353362} // namespace
354363
355- std::unique_ptr<mlir::Pass> fir::createFirCodeGenRewritePass () {
356- return std::make_unique<CodeGenRewrite>();
364+ std::unique_ptr<mlir::Pass>
365+ fir::createFirCodeGenRewritePass (fir::CodeGenRewriteOptions Options) {
366+ return std::make_unique<CodeGenRewrite>(Options);
357367}
358368
359- void fir::populatePreCGRewritePatterns (mlir::RewritePatternSet &patterns) {
369+ void fir::populatePreCGRewritePatterns (mlir::RewritePatternSet &patterns,
370+ bool preserveDeclare) {
360371 patterns.insert <EmboxConversion, ArrayCoorConversion, ReboxConversion,
361- DeclareOpConversion, DummyScopeOpConversion>(
362- patterns.getContext ());
372+ DummyScopeOpConversion>(patterns. getContext ());
373+ patterns.add <DeclareOpConversion>(patterns. getContext (), preserveDeclare );
363374}
0 commit comments