[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