v8/test/cctest/interpreter
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
..
bytecode_expectations [parser] Add an n-ary node for large binop chains 2017-10-25 11:28:55 +00:00
bytecode-expectations-printer.cc [interpreter] printing: output the native context index as string 2017-09-05 12:57:09 +00:00
bytecode-expectations-printer.h [objects.h splitting] Move Code & related classes. 2017-10-13 14:22:11 +00:00
generate-bytecode-expectations.cc [api] Mark non-Isolate constructors of String::Utf8Value/Value for deprecation 2017-08-29 17:42:34 +00:00
interpreter-tester.cc [presubmit] Enable and fix "build/namespaces" linter check. 2017-09-04 11:24:26 +00:00
interpreter-tester.h [objects] Remove obsolete uses of {ReplaceCode} methods. 2017-09-28 12:37:46 +00:00
source-position-matcher.cc [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
source-position-matcher.h Use source position table for unoptimized code. 2016-06-28 05:52:52 +00:00
test-bytecode-generator.cc [jumbo] undef some more macros defined in .cc files 2017-09-25 16:37:54 +00:00
test-interpreter-intrinsics.cc Remove SubString intrinsic and convert SubString code stub to CSA. 2017-10-18 05:52:47 +00:00
test-interpreter.cc [ast] Encapsulate AstValue inside Literal AstNode 2017-10-24 14:57:19 +00:00
test-source-positions.cc [iwyu] Remove obsolete "api.h" include from "handles-inl.h". 2017-09-11 12:52:20 +00:00