[PATCH] D99132: Make the CodeGenRewrite pass able to operate at any level of the IR (NFC)

Mehdi AMINI via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 22 18:45:43 PDT 2021


mehdi_amini created this revision.
mehdi_amini requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D99132

Files:
  flang/include/flang/Optimizer/CodeGen/CGPasses.td
  flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
  flang/test/Fir/cg-ops.fir


Index: flang/test/Fir/cg-ops.fir
===================================================================
--- flang/test/Fir/cg-ops.fir
+++ 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
Index: flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
===================================================================
--- flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+++ flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
@@ -231,7 +231,7 @@
 
 class CodeGenRewrite : public CodeGenRewriteBase<CodeGenRewrite> {
 public:
-  void runOn(mlir::Operation *op, mlir::Region &region) {
+  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<BoxType>().getEleTy().isa<SequenceType>());
     });
-    mlir::OwningRewritePatternList patterns;
+    mlir::OwningRewritePatternList patterns(&context);
     patterns.insert<EmboxConversion, ArrayCoorConversion, ReboxConversion>(
         &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<mlir::FuncOp>())
-      runOn(func, func.getBody());
-    for (auto global : mod.getOps<fir::GlobalOp>())
-      runOn(global, global.getRegion());
+    for (Region &region : getOperation()->getRegions())
+      simplifyRegion(region);
   }
 
   // Clean up the region.
Index: flang/include/flang/Optimizer/CodeGen/CGPasses.td
===================================================================
--- flang/include/flang/Optimizer/CodeGen/CGPasses.td
+++ 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.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99132.332496.patch
Type: text/x-patch
Size: 2761 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210323/d9bca73b/attachment.bin>


More information about the llvm-commits mailing list