static void addLateLoopOptPassPipeline(SILPassPipelinePlan &P) { P.startPipeline("LateLoopOpt"); // Delete dead code and drop the bodies of shared functions. P.addDeadFunctionElimination(); // Perform the final lowering transformations. P.addCodeSinking(); // Optimize access markers for better LICM: might merge accesses // It will also set the no_nested_conflict for dynamic accesses P.addAccessEnforcementOpts(); P.addLICM(); // Simplify CFG after LICM that creates new exit blocks P.addSimplifyCFG(); // Optimize overflow checks. P.addRedundantOverflowCheckRemoval(); P.addMergeCondFails(); // Remove dead code. P.addDCE(); P.addSILCombine(); P.addSimplifyCFG(); // Try to hoist all releases, including epilogue releases. This should be // after FSO. P.addLateReleaseHoisting(); }
// Run passes that // - should only run after all general SIL transformations. // - have no reason to run before any other SIL optimizations. // - don't require IRGen information. static void addLastChanceOptPassPipeline(SILPassPipelinePlan &P) { // Optimize access markers for improved IRGen after all other optimizations. P.addAccessEnforcementOpts(); // Only has an effect if the -assume-single-thread option is specified. P.addAssumeSingleThreaded(); }
/// Perform semantic annotation/loop base optimizations. void addHighLevelLoopOptPasses(SILPassPipelinePlan &P) { // Perform classic SSA optimizations for cleanup. P.addLowerAggregateInstrs(); P.addSILCombine(); P.addSROA(); P.addMem2Reg(); P.addDCE(); P.addSILCombine(); addSimplifyCFGSILCombinePasses(P); // Run high-level loop opts. P.addLoopRotate(); // Cleanup. P.addDCE(); // Also CSE semantic calls. P.addHighLevelCSE(); P.addSILCombine(); P.addSimplifyCFG(); // Optimize access markers for better LICM: might merge accesses // It will also set the no_nested_conflict for dynamic accesses P.addAccessEnforcementOpts(); P.addHighLevelLICM(); // Simplify CFG after LICM that creates new exit blocks P.addSimplifyCFG(); // Start of loop unrolling passes. P.addArrayCountPropagation(); // To simplify induction variable. P.addSILCombine(); P.addLoopUnroll(); P.addSimplifyCFG(); P.addPerformanceConstantPropagation(); P.addSimplifyCFG(); P.addArrayElementPropagation(); // End of unrolling passes. P.addRemovePins(); P.addABCOpt(); // Cleanup. P.addDCE(); P.addCOWArrayOpts(); // Cleanup. P.addDCE(); P.addSwiftArrayOpts(); }