• Benedikt Meurer's avatar
    [es2015] Introduce dedicated GetTemplateObject bytecode. · 79ac69b8
    Benedikt Meurer authored
    Tagged templates were previously desugared during parsing using some
    combination of runtime support written in JavaScript and C++, which
    prevented some optimizations from happening, namely the constant folding
    of the template object in TurboFan optimized code. This CL adds a new
    bytecode GetTemplateObject (with a corresponding GetTemplateObject AST
    node), which represents the abstract operation in the ES6 specification
    and allows TurboFan to simply constant-fold template objects at compile
    time (which is explicitly supported by the specification).
    
    This also pays down some technical debt by removing the template.js
    runtime support and therefore should reduce the size of the native
    context (snapshot) a bit.
    
    With this change in-place the ES6 version microbenchmark in the
    referenced tracking bug is now faster than the transpiled Babel
    code, it goes from
    
      templateStringTagES5: 4552 ms.
      templateStringTagES6: 14185 ms.
      templateStringTagBabel: 7626 ms.
    
    to
    
      templateStringTagES5: 4515 ms.
      templateStringTagES6: 7491 ms.
      templateStringTagBabel: 7639 ms.
    
    which corresponds to a solid 45% reduction in execution time. With some
    further optimizations the ES6 version should be able to outperform the
    ES5 version. This micro-benchmark should be fairly representative of the
    six-speed-templatestringtag-es6 benchmark, and as such that benchmark
    should also improve by around 50%.
    
    Bug: v8:6819,v8:6820
    Tbr: mlippautz@chromium.org
    Change-Id: I821085e3794717fc7f52b5c306fcb93ba03345dc
    Reviewed-on: https://chromium-review.googlesource.com/677462Reviewed-by: 's avatarMythri Alle <mythria@chromium.org>
    Reviewed-by: 's avatarCaitlin Potter <caitp@igalia.com>
    Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#48126}
    79ac69b8
bytecode-graph-builder.h 16.4 KB