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

Davide Italiano via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 2 16:19:14 PDT 2017


davide updated this revision to Diff 117443.
davide added a comment.
Herald added subscribers: eraman, nhaehnle.

Put the pass in the correct place in the pipeline (after CGSCC, so all the failures are gone).
Update all the tests.


https://reviews.llvm.org/D38154

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


Index: test/Other/pass-pipelines.ll
===================================================================
--- test/Other/pass-pipelines.ll
+++ 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.
Index: test/CodeGen/AMDGPU/early-inline.ll
===================================================================
--- test/CodeGen/AMDGPU/early-inline.ll
+++ 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: lib/Transforms/IPO/PassManagerBuilder.cpp
===================================================================
--- lib/Transforms/IPO/PassManagerBuilder.cpp
+++ lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -499,10 +499,14 @@
   // 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());
   if (OptLevel > 2)
@@ -515,6 +519,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. See PR34652.
+  if (RunInliner) {
+    MPM.add(createGlobalOptimizerPass());
+    MPM.add(createGlobalDCEPass());
+  }
+
   if (RunPartialInlining)
     MPM.add(createPartialInliningPass());
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38154.117443.patch
Type: text/x-patch
Size: 2477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171002/3ae977ac/attachment.bin>


More information about the llvm-commits mailing list