Bug 853394 follow-up - Ensure original script is compiled too for callsite clones. r=bhackett on IRC

This commit is contained in:
Jan de Mooij 2013-03-22 14:17:02 +01:00
Родитель f31f58b0a8
Коммит 0905afabb5
2 изменённых файлов: 22 добавлений и 3 удалений

Просмотреть файл

@ -195,7 +195,7 @@ ion::EnterBaselineAtBranch(JSContext *cx, StackFrame *fp, jsbytecode *pc)
}
static MethodStatus
BaselineCompile(JSContext *cx, HandleScript script, StackFrame *fp)
BaselineCompile(JSContext *cx, HandleScript script)
{
JS_ASSERT(!script->baseline);
@ -261,7 +261,23 @@ ion::CanEnterBaselineJIT(JSContext *cx, JSScript *scriptArg, StackFrame *fp, boo
if (scriptArg->incUseCount() <= js_IonOptions.baselineUsesBeforeCompile && !IsJSDEnabled(cx))
return Method_Skipped;
return BaselineCompile(cx, script, fp);
if (script->isCallsiteClone) {
// Ensure the original function is compiled too, so that bailouts from
// Ion code have a BaselineScript to resume into.
RootedScript original(cx, script->originalFunction()->nonLazyScript());
JS_ASSERT(original != script);
if (original->baseline == BASELINE_DISABLED_SCRIPT)
return Method_CantCompile;
if (!original->hasBaselineScript()) {
MethodStatus status = BaselineCompile(cx, original);
if (status != Method_Compiled)
return status;
}
}
return BaselineCompile(cx, script);
}
// Be safe, align IC entry list to 8 in all cases.

Просмотреть файл

@ -208,7 +208,10 @@ IonBuilder::canInlineTarget(JSFunction *target)
}
// Don't inline functions which don't have baseline scripts compiled for them.
if (executionMode == SequentialExecution && !inlineScript->hasBaselineScript()) {
if (executionMode == SequentialExecution &&
ion::IsBaselineEnabled(cx) &&
!inlineScript->hasBaselineScript())
{
IonSpew(IonSpew_Inlining, "Cannot inline target with no baseline jitcode");
return false;
}