mirror of https://github.com/lukechilds/node.git
Browse Source
Original commit message: [turbofan] Boost performance of Array.prototype.shift by 4x. For small arrays, it's way faster to just move the elements instead of doing the fairly complex and heavy-weight left-trimming. Crankshaft has had this optimization for small arrays already; this CL more or less ports this functionality to TurboFan, which yields a 4x speed-up when using shift on small arrays (with up to 16 elements). This should recover some of the regressions reported in the Node.js issues https://github.com/nodejs/node/issues/12657 and discovered for the syncthrough module using https://github.com/mcollina/syncthrough/blob/master/benchmarks/basic.js as benchmark. R=jarin@chromium.org BUG=v8:6376 Review-Url: https://codereview.chromium.org/2874453002 Cr-Commit-Position: refs/heads/master@{#45216} PR-URL: https://github.com/nodejs/node/pull/13263 Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com>v6
Michaël Zasso
8 years ago
6 changed files with 242 additions and 1 deletions
@ -0,0 +1,50 @@ |
|||
// Copyright 2017 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
|
|||
|
|||
(function() { |
|||
function doShift(a) { return a.shift(); } |
|||
|
|||
function test() { |
|||
var a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; |
|||
assertEquals(0, doShift(a)); |
|||
assertEquals([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], a); |
|||
} |
|||
|
|||
test(); |
|||
test(); |
|||
%OptimizeFunctionOnNextCall(doShift); |
|||
test(); |
|||
})(); |
|||
|
|||
(function() { |
|||
function doShift(a) { return a.shift(); } |
|||
|
|||
function test() { |
|||
var a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16.1]; |
|||
assertEquals(0, doShift(a)); |
|||
assertEquals([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16.1], a); |
|||
} |
|||
|
|||
test(); |
|||
test(); |
|||
%OptimizeFunctionOnNextCall(doShift); |
|||
test(); |
|||
})(); |
|||
|
|||
(function() { |
|||
function doShift(a) { return a.shift(); } |
|||
|
|||
function test() { |
|||
var a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,"16"]; |
|||
assertEquals(0, doShift(a)); |
|||
assertEquals([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,"16"], a); |
|||
} |
|||
|
|||
test(); |
|||
test(); |
|||
%OptimizeFunctionOnNextCall(doShift); |
|||
test(); |
|||
})(); |
Loading…
Reference in new issue