forked from OSchip/llvm-project
[PassManager] Improve the interaction between -O2 and ThinLTO.
Run GDCE slightly later so that we don't have to repeat it twice when preparing for Thin. Thanks to Mehdi for the suggestion. llvm-svn: 314999
This commit is contained in:
parent
957151bd86
commit
c8708e59e8
|
@ -508,17 +508,6 @@ void PassManagerBuilder::populateModulePassManager(
|
|||
// 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());
|
||||
|
||||
|
@ -538,12 +527,21 @@ void PassManagerBuilder::populateModulePassManager(
|
|||
if (!DisableUnitAtATime)
|
||||
MPM.add(createReversePostOrderFunctionAttrsPass());
|
||||
|
||||
// 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 we are planning to perform ThinLTO later, let's not bloat the code with
|
||||
// unrolling/vectorization/... now. We'll first run the inliner + CGSCC passes
|
||||
// during ThinLTO and perform the rest of the optimizations afterward.
|
||||
if (PrepareForThinLTO) {
|
||||
// Reduce the size of the IR as much as possible.
|
||||
MPM.add(createGlobalOptimizerPass());
|
||||
// Rename anon globals to be able to export them in the summary.
|
||||
MPM.add(createNameAnonGlobalPass());
|
||||
return;
|
||||
|
|
|
@ -55,15 +55,15 @@
|
|||
; Next we break out of the main Function passes inside the CGSCC pipeline with
|
||||
; 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.
|
||||
; CHECK-O2-NEXT: CallGraph
|
||||
; CHECK-O2-NEXT: Deduce function attributes in RPO
|
||||
; CHECK-O2-NOT: Manager
|
||||
; Reduce the size of the IR ASAP after the inliner.
|
||||
; CHECK-O2-NEXT: Global Variable Optimizer
|
||||
; CHECK-O2: Dead Global Elimination
|
||||
; Next is the late function pass pipeline.
|
||||
; CHECK-O2: FunctionPass Manager
|
||||
; CHECK-O2-NOT: Manager
|
||||
|
|
Loading…
Reference in New Issue