1. 26 Apr, 2019 1 commit
  2. 24 Apr, 2019 2 commits
  3. 27 Mar, 2019 1 commit
  4. 04 Mar, 2019 1 commit
  5. 30 Oct, 2018 1 commit
    • Benedikt Meurer's avatar
      [turbofan] Enable loop peeling for various higher-order Array builtins. · d3f74c98
      Benedikt Meurer authored
      This adds appropriate LoopExit nodes for the JSCallReducer lowerings of
      the following higher order Array builtins:
      
        - Array.prototype.every()
        - Array.prototype.find()
        - Array.prototype.findIndex()
        - Array.prototype.some()
      
      Loop peeling allows TurboFan to make loop invariant operations in the
      callback passed to the higher order builtin fully redundant, and thus
      completely eliminate the loop invariant code from the subsequent loop
      iterations. This can have a huge performance impact, depending on what
      kind of code runs inside of the callback. For example, on the micro-
      benchmarks outlined in http://crbug.com/v8/8273 we go from
      
        forLoop: 364 ms.
        every: 443 ms.
        some: 432 ms.
        find: 522 ms.
        findIndex: 437 ms.
      
      to
      
        forLoop: 369 ms.
        every: 354 ms.
        some: 348 ms.
        find: 419 ms.
        findIndex: 360 ms.
      
      which is 20% improvement, and essentially brings the Array builtins (the
      appropriate ones Array#some() and Array#every() in this case) on par
      with the hand-written `for`-loop.
      
      Bug: v8:1956, v8:8273
      Change-Id: I9d32736e5402807b4ac79cd5ad15ceacd1945681
      Reviewed-on: https://chromium-review.googlesource.com/c/1305935Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57110}
      d3f74c98