• 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
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
promises-aplus Loading commit data...
test262 Loading commit data...
unittests Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...
bot_default.gyp Loading commit data...
bot_default.isolate Loading commit data...
default.gyp Loading commit data...
default.isolate Loading commit data...
optimize_for_size.gyp Loading commit data...
optimize_for_size.isolate Loading commit data...
perf.gyp Loading commit data...
perf.isolate Loading commit data...