Loading js/src/ion/Ion.h +7 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,12 @@ struct IonOptions // Default: 800 uint32 inlineMaxTotalBytecodeLength; // Minimal ratio between the use counts of the caller and the callee to // enable inlining of functions. // // Default: 128 uint32 inlineUseCountRatio; // Whether functions are compiled immediately. // // Default: false Loading Loading @@ -170,6 +176,7 @@ struct IonOptions smallFunctionUsesBeforeInlining(usesBeforeInlining / 4), polyInlineMax(4), inlineMaxTotalBytecodeLength(800), inlineUseCountRatio(128), eagerCompilation(false), slowCallLimit(512) { Loading js/src/ion/IonBuilder.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -2898,6 +2898,10 @@ IonBuilder::makeInliningDecision(AutoObjectVector &targets) // 2. The cost of inlining (in terms of size expansion of the SSA graph), // and size expansion of the ultimately generated code, will be // less significant. // 3. Do not inline functions which are not called as frequently as their // callers. uint32_t callerUses = script_->getUseCount(); uint32_t totalSize = 0; uint32_t checkUses = js_IonOptions.usesBeforeInlining; Loading @@ -2908,12 +2912,18 @@ IonBuilder::makeInliningDecision(AutoObjectVector &targets) return false; JSScript *script = target->script(); uint32_t calleeUses = script->getUseCount(); totalSize += script->length; if (totalSize > js_IonOptions.inlineMaxTotalBytecodeLength) return false; if (script->length > js_IonOptions.smallFunctionMaxBytecodeLength) allFunctionsAreSmall = false; if (calleeUses * js_IonOptions.inlineUseCountRatio < callerUses) { IonSpew(IonSpew_Inlining, "Not inlining, callee is not hot"); return false; } } if (allFunctionsAreSmall) checkUses = js_IonOptions.smallFunctionUsesBeforeInlining; Loading Loading
js/src/ion/Ion.h +7 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,12 @@ struct IonOptions // Default: 800 uint32 inlineMaxTotalBytecodeLength; // Minimal ratio between the use counts of the caller and the callee to // enable inlining of functions. // // Default: 128 uint32 inlineUseCountRatio; // Whether functions are compiled immediately. // // Default: false Loading Loading @@ -170,6 +176,7 @@ struct IonOptions smallFunctionUsesBeforeInlining(usesBeforeInlining / 4), polyInlineMax(4), inlineMaxTotalBytecodeLength(800), inlineUseCountRatio(128), eagerCompilation(false), slowCallLimit(512) { Loading
js/src/ion/IonBuilder.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -2898,6 +2898,10 @@ IonBuilder::makeInliningDecision(AutoObjectVector &targets) // 2. The cost of inlining (in terms of size expansion of the SSA graph), // and size expansion of the ultimately generated code, will be // less significant. // 3. Do not inline functions which are not called as frequently as their // callers. uint32_t callerUses = script_->getUseCount(); uint32_t totalSize = 0; uint32_t checkUses = js_IonOptions.usesBeforeInlining; Loading @@ -2908,12 +2912,18 @@ IonBuilder::makeInliningDecision(AutoObjectVector &targets) return false; JSScript *script = target->script(); uint32_t calleeUses = script->getUseCount(); totalSize += script->length; if (totalSize > js_IonOptions.inlineMaxTotalBytecodeLength) return false; if (script->length > js_IonOptions.smallFunctionMaxBytecodeLength) allFunctionsAreSmall = false; if (calleeUses * js_IonOptions.inlineUseCountRatio < callerUses) { IonSpew(IonSpew_Inlining, "Not inlining, callee is not hot"); return false; } } if (allFunctionsAreSmall) checkUses = js_IonOptions.smallFunctionUsesBeforeInlining; Loading