[PATCH] D19813: Move "Eliminate Available Externally" immediately after the inliner
Mehdi AMINI via llvm-commits
llvm-commits at lists.llvm.org
Mon May 2 10:09:12 PDT 2016
joker.eph created this revision.
joker.eph added a reviewer: chandlerc.
joker.eph added a subscriber: llvm-commits.
Herald added a subscriber: joker.eph.
This pass is supposed to reduce the size of the IR for compile time
purpose. We should run it ASAP.
http://reviews.llvm.org/D19813
Files:
lib/Transforms/IPO/PassManagerBuilder.cpp
test/Other/pass-pipelines.ll
Index: test/Other/pass-pipelines.ll
===================================================================
--- test/Other/pass-pipelines.ll
+++ test/Other/pass-pipelines.ll
@@ -55,7 +55,10 @@
; Next we break out of the main Function passes inside the CGSCC pipeline with
; a barrier pass.
; CHECK-O2: A No-Op Barrier Pass
-; Inferring function attribute should be immediately after the CGSCC pipeline.
+; Reduce the size of the IR ASAP after the inliner.
+; CHECK-O2-NEXT: Eliminate Available Externally
+; Inferring function attribute should be right after the CGSCC pipeline, before
+; any other optimizations/analyses.
; CHECK-O2-NEXT: CallGraph
; CHECK-O2-NEXT: Deduce function attributes in RPO
; CHECK-O2-NOT: Manager
Index: lib/Transforms/IPO/PassManagerBuilder.cpp
===================================================================
--- lib/Transforms/IPO/PassManagerBuilder.cpp
+++ lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -404,6 +404,18 @@
// we must insert a no-op module pass to reset the pass manager.
MPM.add(createBarrierNoopPass());
+ if (!DisableUnitAtATime && OptLevel > 1 && !PrepareForLTO)
+ // Remove avail extern fns and globals definitions if we aren't
+ // compiling an object file for later LTO. For LTO we want to preserve
+ // these so they are eligible for inlining at link-time. Note if they
+ // are unreferenced they will be removed by GlobalDCE later, so
+ // this only impacts referenced available externally globals.
+ // Eventually they will be suppressed during codegen, but eliminating
+ // here enables more opportunity for GlobalDCE as it may make
+ // globals referenced by available external functions dead
+ // and saves running remaining passes on the eliminated functions.
+ MPM.add(createEliminateAvailableExternallyPass());
+
if (!DisableUnitAtATime)
MPM.add(createReversePostOrderFunctionAttrsPass());
@@ -428,18 +440,6 @@
MPM.add(createLICMPass()); // Hoist loop invariants
}
- if (!DisableUnitAtATime && OptLevel > 1 && !PrepareForLTO)
- // Remove avail extern fns and globals definitions if we aren't
- // compiling an object file for later LTO. For LTO we want to preserve
- // these so they are eligible for inlining at link-time. Note if they
- // are unreferenced they will be removed by GlobalDCE later, so
- // this only impacts referenced available externally globals.
- // Eventually they will be suppressed during codegen, but eliminating
- // here enables more opportunity for GlobalDCE as it may make
- // globals referenced by available external functions dead
- // and saves running remaining passes on the eliminated functions.
- MPM.add(createEliminateAvailableExternallyPass());
-
if (PerformThinLTO) {
// Remove dead fns and globals. Removing unreferenced functions could lead
// to more opportunities for globalopt.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19813.55838.patch
Type: text/x-patch
Size: 2911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160502/abb84be2/attachment.bin>
More information about the llvm-commits
mailing list