forked from OSchip/llvm-project
[PassManager] Move load/store motion pass after DSE in LTO pipeline.
As far as I am aware, the placement of MergedLoadStoreMotion in the pipeline is not heavily tuned currently. It seems to not matter much if we do it after DSE in the LTO pipeline (no binary changes for -O3 -flto on MultiSource/SPEC2000/SPEC2006). Moving it after DSE however has a major benefit: MemorySSA is constructed by LICM and is consumed by DSE, so if MergedLoadStoreMotion happens after DSE, we do not need to preserve MemorySSA in it. If there are any concerns with this move, I can also update MergedLoadStoreMotion to preserve MemorySSA. This patch together with D86651 (preserve MemSSA in MemCpyOpt) and D86534 (preserve MemSSA in GVN) are the remaining patches to bring down compile-time for DSE + MemorySSA to the levels outlined in http://lists.llvm.org/pipermail/llvm-dev/2020-August/144417.html Once they land, we should be able to start with flipping the switch on enabling DSE + MmeorySSA. Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D86967
This commit is contained in:
parent
9f18f3c858
commit
6de51189b0
|
@ -1011,13 +1011,13 @@ void PassManagerBuilder::addLTOOptimizationPasses(legacy::PassManagerBase &PM) {
|
|||
PM.add(createGlobalsAAWrapperPass()); // IP alias analysis.
|
||||
|
||||
PM.add(createLICMPass(LicmMssaOptCap, LicmMssaNoAccForPromotionCap));
|
||||
PM.add(createMergedLoadStoreMotionPass()); // Merge ld/st in diamonds.
|
||||
PM.add(NewGVN ? createNewGVNPass()
|
||||
: createGVNPass(DisableGVNLoadPRE)); // Remove redundancies.
|
||||
PM.add(createMemCpyOptPass()); // Remove dead memcpys.
|
||||
|
||||
// Nuke dead stores.
|
||||
PM.add(createDeadStoreEliminationPass());
|
||||
PM.add(createMergedLoadStoreMotionPass()); // Merge ld/st in diamonds.
|
||||
|
||||
// More loops are countable; try to optimize them.
|
||||
PM.add(createIndVarSimplifyPass());
|
||||
|
|
Loading…
Reference in New Issue