Commit 8f1e31fe authored by bmeurer's avatar bmeurer Committed by Commit bot

[turbofan] Deoptimize on access to neutered typed arrays.

We got the condition wrong and actually deoptimized when the typed array
was not neutered. This fixes the deopt loop in Math.random and actually
many programs that use typed arrays.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/1970123002
Cr-Commit-Position: refs/heads/master@{#36194}
parent 2ae74af8
...@@ -264,7 +264,7 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccess( ...@@ -264,7 +264,7 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccess(
1 << JSArrayBuffer::WasNeutered::kShift)), 1 << JSArrayBuffer::WasNeutered::kShift)),
jsgraph()->Int32Constant(0)); jsgraph()->Int32Constant(0));
this_control = this_control =
graph()->NewNode(common()->DeoptimizeIf(), check, frame_state, graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state,
this_effect, this_control); this_effect, this_control);
break; break;
} }
......
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var a = new Float32Array(1);
function len(a) { return a.length; }
assertEquals(1, len(a));
assertEquals(1, len(a));
%OptimizeFunctionOnNextCall(len);
assertEquals(1, len(a));
assertOptimized(len);
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var a = new Float64Array(1);
function len(a) { return a.length; }
assertEquals(1, len(a));
assertEquals(1, len(a));
%OptimizeFunctionOnNextCall(len);
assertEquals(1, len(a));
assertOptimized(len);
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var a = new Int32Array(1);
function len(a) { return a.length; }
assertEquals(1, len(a));
assertEquals(1, len(a));
%OptimizeFunctionOnNextCall(len);
assertEquals(1, len(a));
assertOptimized(len);
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var a = new Uint32Array(1);
function len(a) { return a.length; }
assertEquals(1, len(a));
assertEquals(1, len(a));
%OptimizeFunctionOnNextCall(len);
assertEquals(1, len(a));
assertOptimized(len);
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