mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
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:
parent
5d6af23a03
commit
a76503da23
@ -131,6 +131,7 @@ namespace JS {
|
||||
_(CantInlineNoTarget) \
|
||||
_(CantInlineNotInterpreted) \
|
||||
_(CantInlineNoBaseline) \
|
||||
_(CantInlineNoJitScript) \
|
||||
_(CantInlineLazy) \
|
||||
_(CantInlineNotConstructor) \
|
||||
_(CantInlineClassConstructor) \
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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()) {
|
||||
|
Loading…
Reference in New Issue
Block a user