diff --git a/flang/include/flang/Optimizer/CodeGen/CGPasses.td b/flang/include/flang/Optimizer/CodeGen/CGPasses.td --- a/flang/include/flang/Optimizer/CodeGen/CGPasses.td +++ b/flang/include/flang/Optimizer/CodeGen/CGPasses.td @@ -16,7 +16,7 @@ include "mlir/Pass/PassBase.td" -def CodeGenRewrite : Pass<"cg-rewrite", "mlir::ModuleOp"> { +def CodeGenRewrite : Pass<"cg-rewrite"> { let summary = "Rewrite some FIR ops into their code-gen forms."; let description = [{ Fuse specific subgraphs into single Ops for code generation. diff --git a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp --- a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp +++ b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp @@ -231,7 +231,7 @@ class CodeGenRewrite : public CodeGenRewriteBase { public: - void runOn(mlir::Operation *op, mlir::Region ®ion) { + void runOnOperation() override final { auto &context = getContext(); mlir::OpBuilder rewriter(&context); mlir::ConversionTarget target(context); @@ -243,26 +243,18 @@ return !(embox.getShape() || embox.getType().cast().getEleTy().isa()); }); - mlir::OwningRewritePatternList patterns; + mlir::OwningRewritePatternList patterns(&context); patterns.insert( &context); - if (mlir::failed( - mlir::applyPartialConversion(op, target, std::move(patterns)))) { + if (mlir::failed(mlir::applyPartialConversion(getOperation(), target, + std::move(patterns)))) { mlir::emitError(mlir::UnknownLoc::get(&context), "error in running the pre-codegen conversions"); signalPassFailure(); } // Erase any residual. - simplifyRegion(region); - } - - void runOnOperation() override final { - // Call runOn on all top level regions that may contain emboxOp/arrayCoorOp. - auto mod = getOperation(); - for (auto func : mod.getOps()) - runOn(func, func.getBody()); - for (auto global : mod.getOps()) - runOn(global, global.getRegion()); + for (Region ®ion : getOperation()->getRegions()) + simplifyRegion(region); } // Clean up the region. diff --git a/flang/test/Fir/cg-ops.fir b/flang/test/Fir/cg-ops.fir --- a/flang/test/Fir/cg-ops.fir +++ b/flang/test/Fir/cg-ops.fir @@ -1,4 +1,4 @@ -// RUN: fir-opt --cg-rewrite %s | FileCheck %s +// RUN: fir-opt --pass-pipeline="func(cg-rewrite),fir.global(cg-rewrite)" %s | FileCheck %s // CHECK-LABEL: func @codegen( // CHECK-SAME: %[[arg:.*]]: !fir