@@ -1434,6 +1434,14 @@ export class Module {
14341434 binaryen . _BinaryenSetOneCallerInlineMaxSize ( size ) ;
14351435 }
14361436
1437+ getAllowInliningFunctionsWithLoops ( ) : bool {
1438+ return binaryen . _BinaryenGetAllowInliningFunctionsWithLoops ( ) ;
1439+ }
1440+
1441+ setAllowInliningFunctionsWithLoops ( enabled : bool ) : void {
1442+ binaryen . _BinaryenSetAllowInliningFunctionsWithLoops ( enabled ) ;
1443+ }
1444+
14371445 // meta (module)
14381446
14391447 getFeatures ( ) : FeatureFlags {
@@ -1474,23 +1482,26 @@ export class Module {
14741482 // Implicitly run costly non-LLVM optimizations on -O3 or -Oz
14751483 if ( optimizeLevel >= 3 || shrinkLevel >= 2 ) optimizeLevel = 4 ;
14761484
1477- binaryen . _BinaryenSetOptimizeLevel ( optimizeLevel ) ;
1478- binaryen . _BinaryenSetShrinkLevel ( shrinkLevel ) ;
1479- binaryen . _BinaryenSetDebugInfo ( debugInfo ) ;
1485+ this . setOptimizeLevel ( optimizeLevel ) ;
1486+ this . setShrinkLevel ( shrinkLevel ) ;
1487+ this . setDebugInfo ( debugInfo ) ;
1488+ this . clearPassArguments ( ) ;
14801489
14811490 // Tweak inlining limits based on optimization levels
1482- if ( optimizeLevel >= 2 && shrinkLevel === 0 ) {
1483- binaryen . _BinaryenSetAlwaysInlineMaxSize ( 12 ) ;
1484- binaryen . _BinaryenSetFlexibleInlineMaxSize ( 70 ) ;
1485- binaryen . _BinaryenSetOneCallerInlineMaxSize ( 200 ) ;
1491+ if ( optimizeLevel >= 2 && shrinkLevel == 0 ) {
1492+ this . setAlwaysInlineMaxSize ( 12 ) ;
1493+ this . setFlexibleInlineMaxSize ( 70 ) ;
1494+ this . setOneCallerInlineMaxSize ( 200 ) ;
1495+ this . setAllowInliningFunctionsWithLoops ( optimizeLevel >= 3 ) ;
14861496 } else {
1487- binaryen . _BinaryenSetAlwaysInlineMaxSize (
1497+ this . setAlwaysInlineMaxSize (
14881498 optimizeLevel == 0 && shrinkLevel >= 0
14891499 ? 2
14901500 : 4
14911501 ) ;
1492- binaryen . _BinaryenSetFlexibleInlineMaxSize ( 65 ) ;
1493- binaryen . _BinaryenSetOneCallerInlineMaxSize ( 80 ) ;
1502+ this . setFlexibleInlineMaxSize ( 65 ) ;
1503+ this . setOneCallerInlineMaxSize ( 80 ) ;
1504+ this . setAllowInliningFunctionsWithLoops ( false ) ;
14941505 }
14951506
14961507 // Pass order here differs substantially from Binaryen's defaults
@@ -1596,7 +1607,7 @@ export class Module {
15961607 if ( optimizeLevel >= 2 || shrinkLevel >= 2 ) {
15971608 passes . push ( "inlining-optimizing" ) ;
15981609 }
1599- if ( binaryen . _BinaryenGetLowMemoryUnused ( ) ) {
1610+ if ( this . getLowMemoryUnused ( ) ) {
16001611 if ( optimizeLevel >= 3 || shrinkLevel >= 1 ) {
16011612 passes . push ( "optimize-added-constants-propagate" ) ;
16021613 } else {
0 commit comments