@@ -2602,6 +2602,10 @@ export class Module {
26022602 binaryen . _BinaryenSetAllowInliningFunctionsWithLoops ( enabled ) ;
26032603 }
26042604
2605+ setPartialInliningIfs ( value : i32 ) : void {
2606+ this . setPassArgument ( "partial-inlining-ifs" , value . toString ( ) ) ;
2607+ }
2608+
26052609 // meta (module)
26062610
26072611 getFeatures ( ) : FeatureFlags {
@@ -2666,6 +2670,7 @@ export class Module {
26662670 this . setOneCallerInlineMaxSize ( 80 ) ;
26672671 this . setAllowInliningFunctionsWithLoops ( false ) ;
26682672 }
2673+ this . setPartialInliningIfs ( optimizeLevel >= 2 ? 4 : 0 ) ;
26692674
26702675 // Pass order here differs substantially from Binaryen's defaults
26712676 // see: Binaryen/src/pass.cpp
@@ -2676,10 +2681,12 @@ export class Module {
26762681
26772682 passes . push ( "duplicate-function-elimination" ) ;
26782683 passes . push ( "remove-unused-module-elements" ) ; // +
2684+ if ( optimizeLevel >= 2 ) {
2685+ passes . push ( "once-reduction" ) ;
2686+ }
26792687
26802688 // --- PassRunner::addDefaultFunctionOptimizationPasses ---
26812689 if ( optimizeLevel >= 2 ) {
2682- passes . push ( "once-reduction" ) ;
26832690 passes . push ( "inlining" ) ;
26842691 passes . push ( "simplify-globals-optimizing" ) ;
26852692 }
@@ -2694,7 +2701,6 @@ export class Module {
26942701 passes . push ( "merge-blocks" ) ;
26952702 passes . push ( "precompute-propagate" ) ;
26962703 passes . push ( "simplify-globals-optimizing" ) ;
2697- passes . push ( "gufa-optimizing" ) ;
26982704 passes . push ( "dae-optimizing" ) ;
26992705 }
27002706 if ( this . getFeatures ( ) & FeatureFlags . MultiValue ) {
@@ -2709,16 +2715,19 @@ export class Module {
27092715 passes . push ( "vacuum" ) ;
27102716 passes . push ( "simplify-locals-notee-nostructure" ) ;
27112717 passes . push ( "vacuum" ) ;
2718+ passes . push ( "local-cse" ) ;
27122719 passes . push ( "licm" ) ;
27132720 passes . push ( "merge-locals" ) ;
27142721 passes . push ( "reorder-locals" ) ;
27152722 }
27162723 passes . push ( "optimize-instructions" ) ;
2717- if ( optimizeLevel >= 3 || shrinkLevel >= 1 ) {
2718- passes . push ( "dce " ) ;
2724+ if ( optimizeLevel >= 2 ) {
2725+ passes . push ( "avoid-reinterprets " ) ;
27192726 }
2727+ passes . push ( "dce" ) ;
27202728 passes . push ( "remove-unused-brs" ) ;
27212729 passes . push ( "remove-unused-names" ) ;
2730+ passes . push ( "merge-blocks" ) ;
27222731 if ( optimizeLevel >= 3 || shrinkLevel >= 2 ) {
27232732 passes . push ( "inlining" ) ;
27242733 passes . push ( "precompute-propagate" ) ;
@@ -2762,6 +2771,7 @@ export class Module {
27622771 // --- PassRunner::addDefaultGlobalOptimizationPostPasses ---
27632772
27642773 if ( optimizeLevel >= 2 || shrinkLevel >= 1 ) {
2774+ passes . push ( "generate-global-effects" ) ;
27652775 passes . push ( "simplify-globals-optimizing" ) ;
27662776 passes . push ( "dae-optimizing" ) ;
27672777 }
@@ -2797,6 +2807,10 @@ export class Module {
27972807 }
27982808 passes . push ( "directize" ) ; // replace indirect with direct calls
27992809 passes . push ( "dae-optimizing" ) ; // reduce arity
2810+ if ( optimizeLevel >= 3 || shrinkLevel >= 1 ) {
2811+ // whole-program value-flow analysis
2812+ passes . push ( "gufa-optimizing" ) ;
2813+ }
28002814 passes . push ( "inlining-optimizing" ) ; // and inline if possible
28012815 if ( optimizeLevel >= 2 || shrinkLevel >= 1 ) {
28022816 passes . push ( "code-folding" ) ;
@@ -2844,6 +2858,7 @@ export class Module {
28442858
28452859 passes . push ( "simplify-globals-optimizing" ) ;
28462860 passes . push ( "reorder-globals" ) ;
2861+ passes . push ( "reorder-functions" ) ;
28472862 passes . push ( "remove-unused-brs" ) ;
28482863 passes . push ( "optimize-instructions" ) ;
28492864 }
0 commit comments