• Benedikt Meurer's avatar
    [turbofan] Inline Function#bind in more cases. · 594803c9
    Benedikt Meurer authored
    So far the inlining of Function#bind into TurboFan optimized code was
    limited to cases where TurboFan could infer the constant JSFunction that
    was bound. However we can easily extend that to cover JSBoundFunction as
    well, and obviously also take the LOAD_IC feedback if we don't have a
    known JSFunction or JSBoundFunction.
    
    This adds a new operator JSCreateBoundFunction that contains the logic
    for the creation of the bound function object and the arguments.
    
    On the micro-benchmarks we go from
    
      functionBindParameter0: 1239 ms.
      functionBindConstant0: 478 ms.
      functionBindBoundConstant0: 1256 ms.
      functionBindParameter1: 1278 ms.
      functionBindConstant1: 475 ms.
      functionBindBoundConstant1: 1253 ms.
      functionBindParameter2: 1431 ms.
      functionBindConstant2: 616 ms.
      functionBindBoundConstant2: 1437 ms.
    
    to
    
      functionBindParameter0: 462 ms.
      functionBindConstant0: 485 ms.
      functionBindBoundConstant0: 474 ms.
      functionBindParameter1: 478 ms.
      functionBindConstant1: 474 ms.
      functionBindBoundConstant1: 474 ms.
      functionBindParameter2: 617 ms.
      functionBindConstant2: 614 ms.
      functionBindBoundConstant2: 616 ms.
    
    which is a ~2.5x improvement. On the jshint benchmark in the
    web-tooling-benchmark we observe a 2-3% improvement, which corresponds
    to the time we had seen it running in the generic version.
    
    Bug: v8:6936, v8:6946
    Change-Id: I940d13220ff35ae602dbaa33349ba4bbe0c9a9d3
    Reviewed-on: https://chromium-review.googlesource.com/723080Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#48639}
    594803c9
js-operator.h 27.4 KB