Fix %OptimizeFunctionOnNextCall wrt concurrent compilation.
If a function is marked or queued for concurrent compilation, %OptimizeFunctionOnNextCall becomes a no-op. That can be wrong if concurrent recompilation does not complete at the time we expect the function to have been optimized. R=hpayer@chromium.org Review URL: https://codereview.chromium.org/151343006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
736e0a05f8
commit
5fadbd9e2f
@ -8503,7 +8503,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) {
|
|||||||
RUNTIME_ASSERT(args.length() == 1 || args.length() == 2);
|
RUNTIME_ASSERT(args.length() == 1 || args.length() == 2);
|
||||||
CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
|
CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
|
||||||
|
|
||||||
if (!function->IsOptimizable()) return isolate->heap()->undefined_value();
|
if (!function->IsOptimizable() &&
|
||||||
|
!function->IsMarkedForConcurrentOptimization() &&
|
||||||
|
!function->IsInOptimizationQueue()) {
|
||||||
|
return isolate->heap()->undefined_value();
|
||||||
|
}
|
||||||
|
|
||||||
function->MarkForOptimization();
|
function->MarkForOptimization();
|
||||||
|
|
||||||
Code* unoptimized = function->shared()->code();
|
Code* unoptimized = function->shared()->code();
|
||||||
|
Loading…
Reference in New Issue
Block a user