[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