v8/test/unittests/compiler-dispatcher
Leszek Swirski 52ef2a1c27 [parser] Add an n-ary node for large binop chains
Expressions of the form

    a_0 + a_1 + a_2 + a_3 + ... + a_n

seem to be reasonably common for cases such as building templates.
However, parsing these expressions results in a n-deep expression tree:

           ...
          /
         +
        / \
       +  a_2
      / \
    a_0 a_1

Traversing this tree during compilation can cause a stack overflow when n is
large.

Instead, for left-associate operations such as add, we now build up an
n-ary node in the parse tree, of the form

         n-ary +
       /  |      \
      /   |  ...  \
    a_0  a_1      a_n

The bytecode compiler can now iterate through the child expressions
rather than recursing.

This patch only supports arithmetic operations -- subsequent patches
will enable the same optimization for logical tests and comma
expressions.

Bug: v8:6964
Bug: chromium:724961
Bug: chromium:731861
Bug: chromium:752081
Bug: chromium:771653
Bug: chromium:777302
Change-Id: Ie97e4ce42506fe62a7bc4ffbdaa90a9f698352cb
Reviewed-on: https://chromium-review.googlesource.com/733120
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Marja Hölttä <marja@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48920}
2017-10-25 11:28:55 +00:00
..
compiler-dispatcher-tracer-unittest.cc [Turbofan] Use bytecode size for inlining heuristics. 2017-07-19 17:01:55 +00:00
compiler-dispatcher-unittest.cc [parser] Add an n-ary node for large binop chains 2017-10-25 11:28:55 +00:00
optimizing-compile-dispatcher-unittest.cc [compiler] Remove isolate from CompilationJob. 2017-10-23 11:22:31 +00:00
unoptimized-compile-job-unittest.cc [parser] Add an n-ary node for large binop chains 2017-10-25 11:28:55 +00:00