Commit 9d9acf55 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

Revert of Remove obsolete JSFunction::IsOptimizable predicate. (patchset #1...

Revert of Remove obsolete JSFunction::IsOptimizable predicate. (patchset #1 id:1 of https://codereview.chromium.org/1150683002/)

Reason for revert:
Causes assertions to fire when serializing optimized code.

Original issue's description:
> Remove obsolete JSFunction::IsOptimizable predicate.
>
> This just delegates to SharedFunctionInfo::optimization_disabled and
> was primarily used for assertions. Removing it due to misleading name
> because already optimized functions reported being "non-optimizable".
>
> R=titzer@chromium.org
>
> Committed: https://crrev.com/181d7b85977eb752b19e1de902093783e31330ef
> Cr-Commit-Position: refs/heads/master@{#28551}

TBR=titzer@chromium.org,bmeurer@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.chromium.org/1148973005

Cr-Commit-Position: refs/heads/master@{#28554}
parent 9ebf94c8
......@@ -6022,6 +6022,11 @@ bool JSFunction::IsOptimized() {
}
bool JSFunction::IsOptimizable() {
return code()->kind() == Code::FUNCTION && !shared()->optimization_disabled();
}
bool JSFunction::IsMarkedForOptimization() {
return code() == GetIsolate()->builtins()->builtin(
Builtins::kCompileOptimized);
......
......@@ -9808,7 +9808,7 @@ void JSFunction::JSFunctionIterateBody(int object_size, ObjectVisitor* v) {
void JSFunction::MarkForOptimization() {
Isolate* isolate = GetIsolate();
DCHECK(!IsOptimized());
DCHECK(shared()->allows_lazy_compilation());
DCHECK(shared()->allows_lazy_compilation() || IsOptimizable());
set_code_no_write_barrier(
isolate->builtins()->builtin(Builtins::kCompileOptimized));
// No write barrier required, since the builtin is part of the root set.
......@@ -9832,7 +9832,7 @@ void JSFunction::AttemptConcurrentOptimization() {
}
DCHECK(!IsInOptimizationQueue());
DCHECK(!IsOptimized());
DCHECK(shared()->allows_lazy_compilation());
DCHECK(shared()->allows_lazy_compilation() || IsOptimizable());
DCHECK(isolate->concurrent_recompilation_enabled());
if (FLAG_trace_concurrent_recompilation) {
PrintF(" ** Marking ");
......@@ -9840,7 +9840,7 @@ void JSFunction::AttemptConcurrentOptimization() {
PrintF(" for concurrent recompilation.\n");
}
set_code_no_write_barrier(
isolate->builtins()->builtin(Builtins::kCompileOptimizedConcurrent));
GetIsolate()->builtins()->builtin(Builtins::kCompileOptimizedConcurrent));
// No write barrier required, since the builtin is part of the root set.
}
......
......@@ -7619,6 +7619,9 @@ class JSFunction: public JSObject {
// Tells whether or not this function has been optimized.
inline bool IsOptimized();
// Tells whether or not this function can be optimized.
inline bool IsOptimizable();
// Mark this function for lazy recompilation. The function will be
// recompiled the next time it is executed.
void MarkForOptimization();
......
......@@ -88,6 +88,8 @@ static void GetICCounts(SharedFunctionInfo* shared,
void RuntimeProfiler::Optimize(JSFunction* function, const char* reason) {
DCHECK(function->IsOptimizable());
if (FLAG_trace_opt && function->PassesFilter(FLAG_hydrogen_filter)) {
PrintF("[marking ");
function->ShortPrint();
......@@ -215,7 +217,7 @@ void RuntimeProfiler::OptimizeNow() {
}
continue;
}
if (function->IsOptimized()) continue;
if (!function->IsOptimizable()) continue;
int ticks = shared_code->profiler_ticks();
......
......@@ -87,7 +87,8 @@ RUNTIME_FUNCTION(Runtime_OptimizeFunctionOnNextCall) {
CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
// The following assertion was lifted from the DCHECK inside
// JSFunction::MarkForOptimization().
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation());
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation() ||
function->IsOptimizable());
// If the function is already optimized, just return.
if (function->IsOptimized()) return isolate->heap()->undefined_value();
......@@ -130,7 +131,8 @@ RUNTIME_FUNCTION(Runtime_OptimizeOsr) {
// The following assertion was lifted from the DCHECK inside
// JSFunction::MarkForOptimization().
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation());
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation() ||
function->IsOptimizable());
// If the function is already optimized, just return.
if (function->IsOptimized()) return isolate->heap()->undefined_value();
......
......@@ -395,8 +395,10 @@ TEST(OptimizedCodeSharing) {
*v8::Local<v8::Function>::Cast(env->Global()->Get(v8_str("closure1"))));
Handle<JSFunction> fun2 = v8::Utils::OpenHandle(
*v8::Local<v8::Function>::Cast(env->Global()->Get(v8_str("closure2"))));
CHECK(fun1->IsOptimized() || !CcTest::i_isolate()->use_crankshaft());
CHECK(fun2->IsOptimized() || !CcTest::i_isolate()->use_crankshaft());
CHECK(fun1->IsOptimized()
|| !CcTest::i_isolate()->use_crankshaft() || !fun1->IsOptimizable());
CHECK(fun2->IsOptimized()
|| !CcTest::i_isolate()->use_crankshaft() || !fun2->IsOptimizable());
CHECK_EQ(fun1->code(), fun2->code());
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment