• Georg Neis's avatar
    Optimize JSCallWithArrayLike with diamond speculation when probable arguments... · 90a24303
    Georg Neis authored
    Optimize JSCallWithArrayLike with diamond speculation when probable arguments list is empty literal array
    
    The JSCallWithArraylike can be replaced with a JSCall if its probable arguments list is empty literal array. This replacement will introduce a deoptimization check to make sure the length of arguments list is 0 at runtime.
    
    This CL change this optimization to a diamond speculation which may help avoid deoptimization once and keep the fast path. This change may benefit a following usecase,
    
    function calcMax(testArray) {
         Array.max = function(array) {
             return Math.max.apply(Math, array);
         };
    
         var result = [];
         for (var i = 0; i < testArray.length - 3; i++) {
             var positiveNumbers = [];
             for (var j = 0; j < 3; j++) {
                 if (testArray[i + j] > 0) {
                     positiveNumbers.push(testArray[i + j]);
                 }
             }
             result.push(Array.max(positiveNumbers));
         }
         return result;
     }
    
     testArray = [-1, 2, 3, -4, -5, -6, -7, -8, -9, 10];
    
     for (var i = 0; i < 1000000; i++) {
         calcMax(testArray);
     }
    
    Bug: v8:9974
    Change-Id: I595627e2fd937527350c8f8652d701c791b41dd3
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2967757
    Commit-Queue: Georg Neis <neis@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#75636}
    90a24303
call-with-arraylike-or-spread.js 20.1 KB