[PATCH] D38154: [PassManager] Run global opts after the inliner

Davide Italiano via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 5 11:08:22 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL314997: [PassManager] Run global optimizations after the inliner. (authored by davide).

Changed prior to commit:
  https://reviews.llvm.org/D38154?vs=117443&id=117853#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D38154

Files:
  llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
  llvm/trunk/test/CodeGen/AMDGPU/early-inline.ll
  llvm/trunk/test/Other/pass-pipelines.ll


Index: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -489,9 +489,11 @@
   // Start of CallGraph SCC passes.
   if (!DisableUnitAtATime)
     MPM.add(createPruneEHPass()); // Remove dead EH info
+  bool RunInliner = false;
   if (Inliner) {
     MPM.add(Inliner);
     Inliner = nullptr;
+    RunInliner = true;
   }
   if (!DisableUnitAtATime)
     MPM.add(createPostOrderFunctionAttrsLegacyPass());
@@ -505,6 +507,18 @@
   // pass manager that we are specifically trying to avoid. To prevent this
   // we must insert a no-op module pass to reset the pass manager.
   MPM.add(createBarrierNoopPass());
+
+  // The inliner performs some kind of dead code elimination as it goes,
+  // but there are cases that are not really caught by it. We might
+  // at some point consider teaching the inliner about them, but it
+  // is OK for now to run GlobalOpt + GlobalDCE in tandem as their
+  // benefits generally outweight the cost, making the whole pipeline
+  // faster.
+  if (RunInliner) {
+    MPM.add(createGlobalOptimizerPass());
+    MPM.add(createGlobalDCEPass());
+  }
+
   if (RunPartialInlining)
     MPM.add(createPartialInliningPass());
 
Index: llvm/trunk/test/CodeGen/AMDGPU/early-inline.ll
===================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/early-inline.ll
+++ llvm/trunk/test/CodeGen/AMDGPU/early-inline.ll
@@ -1,6 +1,5 @@
 ; RUN: opt -mtriple=amdgcn-- -O1 -S -inline-threshold=1 -amdgpu-early-inline-all %s | FileCheck %s
 
-; CHECK: @c_alias
 @c_alias = alias i32 (i32), i32 (i32)* @callee
 
 define i32 @callee(i32 %x) {
@@ -17,6 +16,7 @@
 ; CHECK: mul i32
 ; CHECK-NOT: call i32
 
+; CHECK: define i32 @c_alias
 define amdgpu_kernel void @caller(i32 %x) {
 entry:
   %res = call i32 @callee(i32 %x)
Index: llvm/trunk/test/Other/pass-pipelines.ll
===================================================================
--- llvm/trunk/test/Other/pass-pipelines.ll
+++ llvm/trunk/test/Other/pass-pipelines.ll
@@ -56,6 +56,8 @@
 ; a barrier pass.
 ; CHECK-O2: A No-Op Barrier Pass
 ; Reduce the size of the IR ASAP after the inliner.
+; CHECK-O2-NEXT: Global Variable Optimizer
+; CHECK-O2: Dead Global Elimination
 ; CHECK-O2-NEXT: Eliminate Available Externally
 ; Inferring function attribute should be right after the CGSCC pipeline, before
 ; any other optimizations/analyses.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38154.117853.patch
Type: text/x-patch
Size: 2537 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171005/bdbebf4c/attachment.bin>


More information about the llvm-commits mailing list