[flang-commits] [PATCH] D130484: [flang] Runs FIR SimplifyRegionLitePass pass after calling the inliner

Jean Perier via Phabricator via flang-commits flang-commits at lists.llvm.org
Mon Jul 25 07:16:25 PDT 2022


jeanPerier created this revision.
jeanPerier added reviewers: awarzynski, clementval, PeteSteinfeld.
jeanPerier added a project: Flang.
Herald added subscribers: bzcheeseman, sdasgup3, wenzhicui, wrengr, cota, teijeong, rdzhabarov, tatianashp, msifontes, jurahul, Kayjukh, grosul1, Joonsoo, liufengdb, aartbik, mgester, arpith-jacob, antiagainst, shauheen, rriddle, mehdi_amini, jdoerfert.
Herald added a reviewer: sscalpone.
Herald added a project: All.
jeanPerier requested review of this revision.
Herald added subscribers: stephenneuendorffer, nicolasvasilache.

In flang pipeline, the inliner calls createCanonicalizerPass with the region
simplification disabled. The inliner pass does canonicalization even if
no inlining happens. After canonicalization, FIR lite region simplification
must be called to get rid of unreachable regions.
This code exposes the need to run SimplifyRegionLitePass after the inliner is
called with FIR pipeline.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D130484

Files:
  flang/include/flang/Tools/CLOptions.inc
  flang/test/Driver/bbc-mlir-pass-pipeline.f90
  flang/test/Driver/mlir-pass-pipeline.f90
  flang/test/Fir/basic-program.fir
  flang/test/Fir/simplify-region-lite-after-inliner.fir


Index: flang/test/Fir/simplify-region-lite-after-inliner.fir
===================================================================
--- /dev/null
+++ flang/test/Fir/simplify-region-lite-after-inliner.fir
@@ -0,0 +1,36 @@
+// RUN: tco %s | FileCheck %s
+
+
+// In flang pipeline, the inliner calls createCanonicalizerPass with the region
+// simplification disabled. The inliner pass does canonicalization even if
+// no inlining happens. After canonicalization, FIR lite region simplification
+// must be called to get rid of unreachable regions.
+// This code exposes the need to run SimplifyRegionLitePass after the inliner is
+// called with FIR pipeline.
+
+
+func.func @repro(%arg0: i8, %arg1: i8) {
+  %c34_i8 = arith.constant 34 : i8
+  %c-1_i8 = arith.constant -1 : i8
+  %2 = arith.xori %c34_i8, %c-1_i8 : i8
+  %3 = arith.andi %arg0, %c34_i8 : i8
+  %4 = arith.andi %arg1, %2 : i8
+  %5 = arith.ori %3, %4 : i8
+  %c34_i8_0 = arith.constant 34 : i8
+  %7 = arith.andi %arg0, %c34_i8_0 : i8
+  %c-35_i8 = arith.constant -35 : i8
+  %9 = arith.andi %arg1, %c-35_i8 : i8
+  %10 = arith.ori %7, %9 : i8
+  %11 = arith.cmpi ne, %5, %10 : i8
+  cf.cond_br %11, ^bb1, ^bb2
+^bb1:  // pred: ^bb0
+  %13 = func.call @foo() : () -> none
+  cf.br ^bb2
+^bb2:  // pred: ^bb0, ^bb2
+  return
+}
+func.func private @foo() -> none
+
+
+// CHECK: define void @repro(i8 %0, i8 %1)
+//   CHECK-NEXT  ret void
Index: flang/test/Fir/basic-program.fir
===================================================================
--- flang/test/Fir/basic-program.fir
+++ flang/test/Fir/basic-program.fir
@@ -35,6 +35,7 @@
 // PASSES-NEXT:   MemoryAllocationOpt
 
 // PASSES-NEXT: Inliner
+// PASSES-NEXT: SimplifyRegionLite
 // PASSES-NEXT: CSE
 // PASSES-NEXT:   (S) 0 num-cse'd - Number of operations CSE'd
 // PASSES-NEXT:   (S) 0 num-dce'd - Number of operations DCE'd
Index: flang/test/Driver/mlir-pass-pipeline.f90
===================================================================
--- flang/test/Driver/mlir-pass-pipeline.f90
+++ flang/test/Driver/mlir-pass-pipeline.f90
@@ -35,6 +35,7 @@
 ! ALL-NEXT:   MemoryAllocationOpt
 
 ! ALL-NEXT: Inliner
+! ALL-NEXT: SimplifyRegionLite
 ! ALL-NEXT: CSE
 ! ALL-NEXT:   (S) 0 num-cse'd - Number of operations CSE'd
 ! ALL-NEXT:   (S) 0 num-dce'd - Number of operations DCE'd
Index: flang/test/Driver/bbc-mlir-pass-pipeline.f90
===================================================================
--- flang/test/Driver/bbc-mlir-pass-pipeline.f90
+++ flang/test/Driver/bbc-mlir-pass-pipeline.f90
@@ -29,6 +29,7 @@
 ! CHECK-NEXT:   MemoryAllocationOpt
 
 ! CHECK-NEXT: Inliner
+! CHECK-NEXT: SimplifyRegionLite
 ! CHECK-NEXT: CSE
 ! CHECK-NEXT:   (S) 0 num-cse'd - Number of operations CSE'd
 ! CHECK-NEXT:   (S) 0 num-dce'd - Number of operations DCE'd
Index: flang/include/flang/Tools/CLOptions.inc
===================================================================
--- flang/include/flang/Tools/CLOptions.inc
+++ flang/include/flang/Tools/CLOptions.inc
@@ -176,6 +176,7 @@
   llvm::StringMap<mlir::OpPassManager> pipelines;
   pm.addPass(
       mlir::createInlinerPass(pipelines, defaultFlangInlinerOptPipeline));
+  pm.addPass(fir::createSimplifyRegionLitePass());
   pm.addPass(mlir::createCSEPass());
 
   // convert control flow to CFG form


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130484.447327.patch
Type: text/x-patch
Size: 3271 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220725/d3e23b06/attachment-0001.bin>


More information about the flang-commits mailing list