Bug 1567388 part 3 - Stop Baseline-compiling scripts for the definite properties analysis. r=tcampbell

Now that IonBuilder only depends on JitScript we no longer need to have a BaselineScript.

Differential Revision: https://phabricator.services.mozilla.com/D39168

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jan de Mooij 2019-07-26 10:11:27 +00:00
parent 5d6af23a03
commit a76503da23
3 changed files with 25 additions and 22 deletions

View File

@ -131,6 +131,7 @@ namespace JS {
_(CantInlineNoTarget) \
_(CantInlineNotInterpreted) \
_(CantInlineNoBaseline) \
_(CantInlineNoJitScript) \
_(CantInlineLazy) \
_(CantInlineNotConstructor) \
_(CantInlineClassConstructor) \

View File

@ -4520,7 +4520,7 @@ bool jit::AnalyzeNewScriptDefiniteProperties(
}
if (!jit::IsIonEnabled() || !jit::IsBaselineJitEnabled() ||
!script->canBaselineCompile()) {
!CanBaselineInterpretScript(script)) {
return true;
}
@ -4548,15 +4548,10 @@ bool jit::AnalyzeNewScriptDefiniteProperties(
return false;
}
if (!script->hasBaselineScript()) {
MethodStatus status = BaselineCompile(cx, script);
if (status == Method_Error) {
AutoKeepJitScripts keepJitScript(cx);
if (!script->ensureHasJitScript(cx, keepJitScript)) {
return false;
}
if (status != Method_Compiled) {
return true;
}
}
JitScript::MonitorThisType(cx, script, TypeSet::ObjectType(group));

View File

@ -175,8 +175,11 @@ IonBuilder::IonBuilder(JSContext* analysisContext, CompileRealm* realm,
scriptHasIonScript_ = script_->hasIonScript();
pc = info->startPC();
MOZ_ASSERT(script()->hasBaselineScript() ==
(info->analysisMode() != Analysis_ArgumentsUsage));
// The script must have a JitScript. Compilation requires a BaselineScript
// too.
MOZ_ASSERT(script_->hasJitScript());
MOZ_ASSERT_IF(!info->isAnalysis(), script_->hasBaselineScript());
MOZ_ASSERT(!!analysisContext ==
(info->analysisMode() == Analysis_DefiniteProperties));
MOZ_ASSERT(script_->numBytecodeTypeSets() < JSScript::MaxBytecodeTypeSets);
@ -446,15 +449,11 @@ IonBuilder::InliningDecision IonBuilder::canInlineTarget(JSFunction* target,
return InliningDecision_Error;
}
if (!script->hasBaselineScript() && script->canBaselineCompile()) {
MethodStatus status = BaselineCompile(analysisContext, script);
if (status == Method_Error) {
if (CanBaselineInterpretScript(script)) {
AutoKeepJitScripts keepJitScript(analysisContext);
if (!script->ensureHasJitScript(analysisContext, keepJitScript)) {
return InliningDecision_Error;
}
if (status != Method_Compiled) {
trackOptimizationOutcome(TrackedOutcome::CantInlineNoBaseline);
return InliningDecision_DontInline;
}
}
}
@ -479,11 +478,19 @@ IonBuilder::InliningDecision IonBuilder::canInlineTarget(JSFunction* target,
return DontInline(inlineScript, "Disabled Ion compilation");
}
// Don't inline functions which don't have baseline scripts.
if (info().isAnalysis()) {
// Analysis requires only a JitScript.
if (!inlineScript->hasJitScript()) {
trackOptimizationOutcome(TrackedOutcome::CantInlineNoJitScript);
return DontInline(inlineScript, "No JitScript");
}
} else {
// Compilation requires a BaselineScript.
if (!inlineScript->hasBaselineScript()) {
trackOptimizationOutcome(TrackedOutcome::CantInlineNoBaseline);
return DontInline(inlineScript, "No baseline jitcode");
}
}
// Don't inline functions with a higher optimization level.
if (!isHighestOptimizationLevel()) {