forked from OSchip/llvm-project
Move createEliminateAvailableExternallyPass earlier in the pass pipeline
to save running many ModulePasses on available external functions that are thrown away anyhow. llvm-svn: 246619
This commit is contained in:
parent
2ea5393ca1
commit
611c7cff53
|
@ -331,6 +331,19 @@ void PassManagerBuilder::populateModulePassManager(
|
|||
// 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 (EnableNonLTOGlobalsModRef)
|
||||
// We add a fresh GlobalsModRef run at this point. This is particularly
|
||||
// useful as the above will have inlined, DCE'ed, and function-attr
|
||||
|
@ -438,17 +451,6 @@ void PassManagerBuilder::populateModulePassManager(
|
|||
// GlobalOpt already deletes dead functions and globals, at -O2 try a
|
||||
// late pass of GlobalDCE. It is capable of deleting dead cycles.
|
||||
if (OptLevel > 1) {
|
||||
if (!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 below, 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.
|
||||
MPM.add(createEliminateAvailableExternallyPass());
|
||||
}
|
||||
MPM.add(createGlobalDCEPass()); // Remove dead fns and globals.
|
||||
MPM.add(createConstantMergePass()); // Merge dup global constants
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue