6d38f89d26
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}
51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
// 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();
|
|
})();
|