Project: v8 Issues People Development process History Sign in
New issue
Advanced search Search tips
Issue 4698 Support ES6 tail call elimination
Starred by 159 users Project Member Reported by ishell@chromium.org, Jan 21 2016 Back to list
Status: Assigned
Owner:
Cc:
Components:
HW: ----
OS: All
Priority: 2
Type: Bug

Blocking:
issue chromium:596437



Sign in to add a comment
Tracking bug;

Tail calls support for Full codegen.
 
Project Member Comment 1 by 76821325...@developer.gserviceaccount.com, Jan 26 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/6131ab1edd6e78be01ac90b8f0b0f4f27f308071

commit 6131ab1edd6e78be01ac90b8f0b0f4f27f308071
Author: ishell <ishell@chromium.org>
Date: Tue Jan 26 11:07:15 2016

[es6] Tail calls support.

This CL implements PrepareForTailCall() mentioned in ES6 spec for full codegen, Crankshaft and Turbofan.
When debugger is active tail calls are disabled.

Tail calling can be enabled by --harmony-tailcalls flag.

BUG=v8:4698
LOG=Y
TBR=rossberg@chromium.org

Review URL: https://codereview.chromium.org/1609893003

Cr-Commit-Position: refs/heads/master@{#33509}

[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/arm/builtins-arm.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/arm/code-stubs-arm.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/arm64/builtins-arm64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/arm64/code-stubs-arm64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ast/ast.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/bootstrapper.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/builtins.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/builtins.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/code-factory.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/code-factory.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/code-stubs.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/compiler/ast-graph-builder.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/compiler/bytecode-graph-builder.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/compiler/js-operator.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/compiler/js-operator.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/arm/lithium-codegen-arm.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/arm64/lithium-codegen-arm64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/hydrogen-instructions.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/hydrogen.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/ia32/lithium-codegen-ia32.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/mips/lithium-codegen-mips.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/mips64/lithium-codegen-mips64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/crankshaft/x64/lithium-codegen-x64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/flag-definitions.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/arm/full-codegen-arm.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/full-codegen.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/mips/full-codegen-mips.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/full-codegen/x64/full-codegen-x64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/globals.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ia32/builtins-ia32.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ia32/code-stubs-ia32.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ia32/macro-assembler-ia32.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ic/ic-state.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ic/ic.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/ic/ic.h
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/mips/builtins-mips.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/mips/code-stubs-mips.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/mips64/builtins-mips64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/mips64/code-stubs-mips64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/parsing/parser.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/x64/builtins-x64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/x64/code-stubs-x64.cc
[modify] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/src/x64/macro-assembler-x64.cc
[add] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/test/mjsunit/es6/tail-call-proxies.js
[add] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/test/mjsunit/es6/tail-call-simple.js
[add] http://crrev.com/6131ab1edd6e78be01ac90b8f0b0f4f27f308071/test/mjsunit/es6/tail-call.js

Project Member Comment 2 by 76821325...@developer.gserviceaccount.com, Jan 26 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/95aedaa0c853749649c257fdf7b50cfe5be0eda4

commit 95aedaa0c853749649c257fdf7b50cfe5be0eda4
Author: mbrandy <mbrandy@us.ibm.com>
Date: Tue Jan 26 16:57:54 2016

PPC: [es6] Tail calls support.

Port 6131ab1edd6e78be01ac90b8f0b0f4f27f308071

Original commit message:
    This CL implements PrepareForTailCall() mentioned in ES6 spec for full codegen, Crankshaft and Turbofan.
    When debugger is active tail calls are disabled.

    Tail calling can be enabled by --harmony-tailcalls flag.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=Y

Review URL: https://codereview.chromium.org/1635823003

Cr-Commit-Position: refs/heads/master@{#33524}

[modify] http://crrev.com/95aedaa0c853749649c257fdf7b50cfe5be0eda4/src/crankshaft/ppc/lithium-codegen-ppc.cc
[modify] http://crrev.com/95aedaa0c853749649c257fdf7b50cfe5be0eda4/src/full-codegen/ppc/full-codegen-ppc.cc
[modify] http://crrev.com/95aedaa0c853749649c257fdf7b50cfe5be0eda4/src/ppc/builtins-ppc.cc
[modify] http://crrev.com/95aedaa0c853749649c257fdf7b50cfe5be0eda4/src/ppc/code-stubs-ppc.cc

Cc: paulir...@chromium.org a...@chromium.org
Summary: Tail calls support for Full codegen and Crankshaft. (was: Tail calls support for Full codegen.)
Project Member Comment 5 by bugdroid1@chromium.org, Feb 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e82588f647a3f38a73115b0c9f09a7041db2fe4b

commit e82588f647a3f38a73115b0c9f09a7041db2fe4b
Author: ishell <ishell@chromium.org>
Date: Thu Feb 11 09:58:38 2016

[crankshaft] Disable Crankshaft when it sees a tail call.

This CL also removes tail call support made so far from Crankshaft.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1683793004

Cr-Commit-Position: refs/heads/master@{#33885}

[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/ast/ast-numbering.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/bailout-reason.h
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/arm/lithium-codegen-arm.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/arm64/lithium-codegen-arm64.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/hydrogen-instructions.h
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/hydrogen.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/ia32/lithium-codegen-ia32.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/mips/lithium-codegen-mips.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/mips64/lithium-codegen-mips64.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/ppc/lithium-codegen-ppc.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/x64/lithium-codegen-x64.cc
[modify] http://crrev.com/e82588f647a3f38a73115b0c9f09a7041db2fe4b/src/crankshaft/x87/lithium-codegen-x87.cc

Project Member Comment 6 by bugdroid1@chromium.org, Feb 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e519e6fadfaf7242231f4dcb45910f60304e26fc

commit e519e6fadfaf7242231f4dcb45910f60304e26fc
Author: ishell <ishell@chromium.org>
Date: Thu Feb 11 10:26:39 2016

[es6] Further fixing of tail Calls.

1) Update profiling counters in Full codegen.
2) Call Runtime::kTraceTailCall when tracing is on

test/mjsunit/es6/tail-call-simple.js is disabled for now, because Turbofan does not fully support TCO yet.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1670133002

Cr-Commit-Position: refs/heads/master@{#33886}

[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/arm/full-codegen-arm.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/full-codegen.h
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/mips/full-codegen-mips.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/full-codegen/x64/full-codegen-x64.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/runtime/runtime-test.cc
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/src/runtime/runtime.h
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/test/mjsunit/es6/tail-call-simple.js
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/test/mjsunit/function-caller.js
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/test/mjsunit/mjsunit.status
[modify] http://crrev.com/e519e6fadfaf7242231f4dcb45910f60304e26fc/test/mjsunit/strict-mode.js

Project Member Comment 7 by bugdroid1@chromium.org, Feb 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/d12dbab46618801b38430b614276002c178abf72

commit d12dbab46618801b38430b614276002c178abf72
Author: ishell <ishell@chromium.org>
Date: Thu Feb 11 17:39:43 2016

[es6] More efficient way of marking AST call expressions in tail positions.

Instead of doing a full function body traversal we collect return expressions and mark them after function parsing.

And since we rewrite do-expressions so that the result is explicitly assigned to a result variable the statements marking will never hit so I removed it from the AST.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1693523002

Cr-Commit-Position: refs/heads/master@{#33911}

[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/src/ast/ast.h
[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/src/parsing/parser-base.h
[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/src/parsing/parser.cc
[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/src/parsing/parser.h
[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/test/mjsunit/es6/tail-call.js
[modify] http://crrev.com/d12dbab46618801b38430b614276002c178abf72/test/mjsunit/mjsunit.status

Comment 8 by ishell@chromium.org, Feb 12 2016
Summary: Support ES6 tail calls (was: Tail calls support for Full codegen and Crankshaft.)
Project Member Comment 9 by bugdroid1@chromium.org, Feb 12 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/d00644a011b5667f58ce713bcfb8e8cfcb254c2f

commit d00644a011b5667f58ce713bcfb8e8cfcb254c2f
Author: mbrandy <mbrandy@us.ibm.com>
Date: Fri Feb 12 15:12:13 2016

PPC: [es6] Further fixing of tail Calls.

Port e519e6fadfaf7242231f4dcb45910f60304e26fc

Original commit message:
    1) Update profiling counters in Full codegen.
    2) Call Runtime::kTraceTailCall when tracing is on

    test/mjsunit/es6/tail-call-simple.js is disabled for now, because Turbofan does not fully support TCO yet.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1690953003

Cr-Commit-Position: refs/heads/master@{#33951}

[modify] http://crrev.com/d00644a011b5667f58ce713bcfb8e8cfcb254c2f/src/full-codegen/ppc/full-codegen-ppc.cc

Project Member Comment 10 by bugdroid1@chromium.org, Feb 17 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/32b4bc138252d9773cc90b2d4aae78d98844bba1

commit 32b4bc138252d9773cc90b2d4aae78d98844bba1
Author: ishell <ishell@chromium.org>
Date: Wed Feb 17 15:19:02 2016

[es6] [interpreter] Add tail calls support to Ignition.

This CL introduces two new bytecodes TailCall and TailCallWide.

BUG=v8:4698, v8:4687 
LOG=N

Review URL: https://codereview.chromium.org/1698273003

Cr-Commit-Position: refs/heads/master@{#34083}

[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/arm/builtins-arm.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/arm64/builtins-arm64.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/builtins.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/builtins.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/code-factory.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/code-factory.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/compiler/bytecode-graph-builder.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/compiler/bytecode-graph-builder.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/ia32/builtins-ia32.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/bytecode-array-builder.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/bytecode-array-builder.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/bytecode-generator.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/bytecodes.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/bytecodes.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/interpreter-assembler.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/interpreter-assembler.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/interpreter.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/interpreter/interpreter.h
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/mips/builtins-mips.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/mips64/builtins-mips64.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/src/x64/builtins-x64.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/test/cctest/interpreter/test-interpreter.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/test/mjsunit/es6/tail-call-simple.js
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/test/mjsunit/mjsunit.status
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/test/unittests/interpreter/bytecode-array-builder-unittest.cc
[modify] http://crrev.com/32b4bc138252d9773cc90b2d4aae78d98844bba1/test/unittests/interpreter/interpreter-assembler-unittest.cc

Project Member Comment 11 by bugdroid1@chromium.org, Feb 17 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/c94a3d44bdd2e1a90e3cf385ffb6949f5bb74858

commit c94a3d44bdd2e1a90e3cf385ffb6949f5bb74858
Author: mbrandy <mbrandy@us.ibm.com>
Date: Wed Feb 17 21:27:45 2016

PPC: [es6] [interpreter] Add tail calls support to Ignition.

Port 32b4bc138252d9773cc90b2d4aae78d98844bba1

Original commit message:
    This CL introduces two new bytecodes TailCall and TailCallWide.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698, v8:4687 
LOG=N

Review URL: https://codereview.chromium.org/1705913002

Cr-Commit-Position: refs/heads/master@{#34096}

[modify] http://crrev.com/c94a3d44bdd2e1a90e3cf385ffb6949f5bb74858/src/ppc/builtins-ppc.cc

Project Member Comment 12 by bugdroid1@chromium.org, Feb 18 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/c67b5096cd81af4bdf62591f36e5eb72a1c7446a

commit c67b5096cd81af4bdf62591f36e5eb72a1c7446a
Author: ishell <ishell@chromium.org>
Date: Thu Feb 18 10:12:54 2016

[turbofan] Fixing ES6 tail calls in Turbofan.

In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
Otherwise we will see G in a stack trace inside H.

This CL also adds a "megatest" which tests product of the following cases:
1) tail caller is inlined/not-inlined
2) tail callee is inlined/not-inlined
3) tail caller has an arguments adaptor frame above or not
4) tail callee has an arguments adaptor frame above or not
5) tail callee is a normal/bound/proxy function

Note that tests for not yet supported cases are not run for now.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1709583002

Cr-Commit-Position: refs/heads/master@{#34108}

[modify] http://crrev.com/c67b5096cd81af4bdf62591f36e5eb72a1c7446a/src/compiler/instruction-selector.cc
[add] http://crrev.com/c67b5096cd81af4bdf62591f36e5eb72a1c7446a/test/mjsunit/es6/tail-call-megatest.js
[modify] http://crrev.com/c67b5096cd81af4bdf62591f36e5eb72a1c7446a/test/mjsunit/es6/tail-call.js

Project Member Comment 13 by bugdroid1@chromium.org, Feb 18 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/1d420199bf941e8b557b54ec7586392d29ffcbd2

commit 1d420199bf941e8b557b54ec7586392d29ffcbd2
Author: ishell <ishell@chromium.org>
Date: Thu Feb 18 13:46:00 2016

[es6] Disable tail call optimization in optimizing compilers for now.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1713533002

Cr-Commit-Position: refs/heads/master@{#34115}

[modify] http://crrev.com/1d420199bf941e8b557b54ec7586392d29ffcbd2/src/ast/ast-numbering.cc

Project Member Comment 14 by bugdroid1@chromium.org, Feb 18 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e8201e6cc47204f5efc0092ba311a150eac1f022

commit e8201e6cc47204f5efc0092ba311a150eac1f022
Author: ishell <ishell@chromium.org>
Date: Thu Feb 18 14:16:03 2016

[es6] Enable tail call optimization on clusterfuzz.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1710883002

Cr-Commit-Position: refs/heads/master@{#34117}

[modify] http://crrev.com/e8201e6cc47204f5efc0092ba311a150eac1f022/src/flag-definitions.h

The folks at Bocoup wrote some tests for tail call optimization. Our TCO implementation passes all of their tests!
Project Member Comment 16 by bugdroid1@chromium.org, Feb 19 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/7624465b618a2d230e784aebe3d8b594a01dac29

commit 7624465b618a2d230e784aebe3d8b594a01dac29
Author: ishell <ishell@chromium.org>
Date: Fri Feb 19 08:39:31 2016

[es6] Fixed POSSIBLY_EVAL_CALL tail calls handling in Full codegen.

This CL also enhances a "tail-call-megatest" which now tests product of the following cases:
1) tail caller is inlined/not-inlined
2) tail callee is inlined/not-inlined
3) tail caller has an arguments adaptor frame above or not
4) tail callee has an arguments adaptor frame above or not
5) tail callee is a sloppy/strict/possibly eval/bound/proxy function
6) tail calling via normal call/function.apply/function.call

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1711863002

Cr-Commit-Position: refs/heads/master@{#34143}

[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/arm/full-codegen-arm.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/mips/full-codegen-mips.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/ppc/full-codegen-ppc.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/x64/full-codegen-x64.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/src/full-codegen/x87/full-codegen-x87.cc
[modify] https://crrev.com/7624465b618a2d230e784aebe3d8b594a01dac29/test/mjsunit/es6/tail-call-megatest.js

Cc: mstarzinger@chromium.org lpy@chromium.org rossberg@chromium.org
 Issue 457  has been merged into this issue.
Comment 18 by e...@barzilay.org, Feb 24 2016
"When debugger is active tail calls are disabled."

This sounds like going down a path where running code can change its semantics depending  on the debugger being open or not.  Would some web pages fail if I have it open?  Would the original case from  issue 457  still fail because the console is part of the debugger?

And BTW, the more common term for this is "Tail Call Elimination", when it is a language feature rather than a random optimization.

You might interested in https://bugs.chromium.org/p/chromium/issues/detail?id=568695#c_id20452753 which is about what the devtools should show and behave like in TCO situations. Please chime in.
Project Member Comment 20 by bugdroid1@chromium.org, Mar 4 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/98c34e600dd0cff31caf314b9c7539200ff781f4

commit 98c34e600dd0cff31caf314b9c7539200ff781f4
Author: ishell <ishell@chromium.org>
Date: Fri Mar 04 09:17:28 2016

[crankshaft] Correctly propagate TailCallMode in case of inlining.

This CL also disables inlining of calls at tail position.

This is a preparational step. Tail call elimination itself is neither enabled nor supported yet.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1761023003

Cr-Commit-Position: refs/heads/master@{#34484}

[modify] https://crrev.com/98c34e600dd0cff31caf314b9c7539200ff781f4/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/98c34e600dd0cff31caf314b9c7539200ff781f4/src/crankshaft/hydrogen.h

Project Member Comment 21 by bugdroid1@chromium.org, Mar 7 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/22938040fdb9a061babe96f004355fd79b2958a0

commit 22938040fdb9a061babe96f004355fd79b2958a0
Author: ishell <ishell@chromium.org>
Date: Mon Mar 07 14:33:54 2016

[crankshaft] Support ES6 tail call elimination.

HInvokeFunction and HApplyArguments instructions now support tail calling.

Inlining of calls at tail position is not supported yet and therefore still disabled.

The tail-call-megatest was modified so that the usages of "arguments" object do not disable Crankshaft.

TBR=bmeurer@chromium.org
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1760253003

Cr-Commit-Position: refs/heads/master@{#34542}

[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm/builtins-arm.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm/macro-assembler-arm.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm/macro-assembler-arm.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm64/builtins-arm64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm64/macro-assembler-arm64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/arm64/macro-assembler-arm64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/ast/ast-numbering.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/code-factory.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/code-factory.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm/lithium-arm.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm/lithium-codegen-arm.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm/lithium-codegen-arm.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm64/lithium-arm64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm64/lithium-codegen-arm64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/arm64/lithium-codegen-arm64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/hydrogen-instructions.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/ia32/lithium-codegen-ia32.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/ia32/lithium-codegen-ia32.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/ia32/lithium-ia32.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips/lithium-codegen-mips.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips/lithium-codegen-mips.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips/lithium-mips.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips64/lithium-codegen-mips64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips64/lithium-codegen-mips64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/mips64/lithium-mips64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/x64/lithium-codegen-x64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/x64/lithium-codegen-x64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/crankshaft/x64/lithium-x64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/ia32/builtins-ia32.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/ia32/macro-assembler-ia32.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/ia32/macro-assembler-ia32.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips/builtins-mips.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips/macro-assembler-mips.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips/macro-assembler-mips.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips64/builtins-mips64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips64/macro-assembler-mips64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/mips64/macro-assembler-mips64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/x64/builtins-x64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/x64/macro-assembler-x64.cc
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/src/x64/macro-assembler-x64.h
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/test/mjsunit/es6/tail-call-megatest.js
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/test/mjsunit/es6/tail-call-simple.js
[modify] https://crrev.com/22938040fdb9a061babe96f004355fd79b2958a0/test/mjsunit/es6/tail-call.js

Project Member Comment 22 by bugdroid1@chromium.org, Mar 7 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/826f67bec35e1e2def0650dfa443f2534589f7a3

commit 826f67bec35e1e2def0650dfa443f2534589f7a3
Author: mbrandy <mbrandy@us.ibm.com>
Date: Mon Mar 07 20:55:03 2016

PPC: [crankshaft] Support ES6 tail call elimination.

Port 22938040fdb9a061babe96f004355fd79b2958a0

Original commit message:
    HInvokeFunction and HApplyArguments instructions now support tail calling.

    Inlining of calls at tail position is not supported yet and therefore still disabled.

    The tail-call-megatest was modified so that the usages of "arguments" object do not disable Crankshaft.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1767173002

Cr-Commit-Position: refs/heads/master@{#34563}

[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/crankshaft/ppc/lithium-codegen-ppc.cc
[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/crankshaft/ppc/lithium-codegen-ppc.h
[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/crankshaft/ppc/lithium-ppc.h
[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/ppc/builtins-ppc.cc
[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/ppc/macro-assembler-ppc.cc
[modify] https://crrev.com/826f67bec35e1e2def0650dfa443f2534589f7a3/src/ppc/macro-assembler-ppc.h

Project Member Comment 23 by bugdroid1@chromium.org, Mar 8 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/2aae579cf04b24f605d1ae6b975d67d8dbbee672

commit 2aae579cf04b24f605d1ae6b975d67d8dbbee672
Author: ishell <ishell@chromium.org>
Date: Tue Mar 08 00:11:57 2016

[turbofan] Further fixing ES6 tail call elimination in Turbofan.

In case when F tail calls G we should also remove the potential arguments adaptor frame for F.

This CL introduces two new machine instructions ArchTailCallCodeObjectFromJSFunction and ArchTailCallJSFunctionFromJSFunction which (unlike existing ArchTailCallCodeObject and ArchTailCallJSFunction) also drop arguments adaptor frame if it exists right before jumping to the target function.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1702423002

Cr-Commit-Position: refs/heads/master@{#34566}

[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/arm/code-generator-arm.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/arm/instruction-selector-arm.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/arm64/code-generator-arm64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/arm64/instruction-selector-arm64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/code-generator.h
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/ia32/code-generator-ia32.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/ia32/instruction-selector-ia32.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/instruction-codes.h
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/instruction-scheduler.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/instruction-selector.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/instruction-selector.h
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/mips/code-generator-mips.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/mips/instruction-selector-mips.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/mips64/code-generator-mips64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/mips64/instruction-selector-mips64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/x64/code-generator-x64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/compiler/x64/instruction-selector-x64.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/crankshaft/ia32/lithium-codegen-ia32.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/ia32/builtins-ia32.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/ia32/macro-assembler-ia32.cc
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/src/ia32/macro-assembler-ia32.h
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/test/mjsunit/es6/tail-call-megatest.js
[modify] https://crrev.com/2aae579cf04b24f605d1ae6b975d67d8dbbee672/test/mjsunit/es6/tail-call-simple.js

Project Member Comment 24 by bugdroid1@chromium.org, Mar 8 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/fcaa643dab7757225697446dcdccd77417d2d899

commit fcaa643dab7757225697446dcdccd77417d2d899
Author: mbrandy <mbrandy@us.ibm.com>
Date: Tue Mar 08 14:51:44 2016

PPC: [turbofan] Further fixing ES6 tail call elimination in Turbofan.

Port 2aae579cf04b24f605d1ae6b975d67d8dbbee672

Original commit message:
    In case when F tail calls G we should also remove the potential arguments adaptor frame for F.

    This CL introduces two new machine instructions ArchTailCallCodeObjectFromJSFunction and
    ArchTailCallJSFunctionFromJSFunction which (unlike existing ArchTailCallCodeObject and
    ArchTailCallJSFunction) also drop arguments adaptor frame if it exists right before jumping
    to the target function.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1773053002

Cr-Commit-Position: refs/heads/master@{#34589}

[modify] https://crrev.com/fcaa643dab7757225697446dcdccd77417d2d899/src/compiler/ppc/code-generator-ppc.cc
[modify] https://crrev.com/fcaa643dab7757225697446dcdccd77417d2d899/src/compiler/ppc/instruction-selector-ppc.cc

Summary: Support ES6 tail call elimination (was: Support ES6 tail calls)
Project Member Comment 26 by bugdroid1@chromium.org, Mar 9 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a

commit c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a
Author: ishell <ishell@chromium.org>
Date: Wed Mar 09 11:33:10 2016

[turbofan] [deoptimizer] Support inlining of ES6 tail calls.

In case when F was called with incompatible number of arguments (and therefore
the arguments adator frame was created), F inlines a tail call of G which then
deopts the deoptimizer should also remove the arguments adaptor frame for F.

This CL adds required machinery to the deoptimizer.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1768263004

Cr-Commit-Position: refs/heads/master@{#34610}

[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/arm/deoptimizer-arm.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/arm64/deoptimizer-arm64.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/compiler/code-generator.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/compiler/frame-states.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/compiler/frame-states.h
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/compiler/js-inlining.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/compiler/js-inlining.h
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/deoptimizer.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/deoptimizer.h
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/ia32/deoptimizer-ia32.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/mips/deoptimizer-mips.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/mips64/deoptimizer-mips64.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/objects-printer.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/objects.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/runtime/runtime-compiler.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/src/x64/deoptimizer-x64.cc
[modify] https://crrev.com/c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a/test/mjsunit/es6/tail-call-megatest.js

Project Member Comment 28 by bugdroid1@chromium.org, Mar 9 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/209c2152441faa9843140f1049575dee8333b7fd

commit 209c2152441faa9843140f1049575dee8333b7fd
Author: mbrandy <mbrandy@us.ibm.com>
Date: Wed Mar 09 23:09:21 2016

PPC: [turbofan] [deoptimizer] Support inlining of ES6 tail calls.

Port c29a4560bb548fa0ebeec8262f9d6fca9d50fe7a

Original commit message:
    In case when F was called with incompatible number of arguments (and therefore
    the arguments adator frame was created), F inlines a tail call of G which then
    deopts the deoptimizer should also remove the arguments adaptor frame for F.

    This CL adds required machinery to the deoptimizer.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1775393004

Cr-Commit-Position: refs/heads/master@{#34644}

[modify] https://crrev.com/209c2152441faa9843140f1049575dee8333b7fd/src/ppc/deoptimizer-ppc.cc

Project Member Comment 29 by bugdroid1@chromium.org, Mar 10 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/01589fe708d623353158dcea857cc0cf660ff49e

commit 01589fe708d623353158dcea857cc0cf660ff49e
Author: mbrandy <mbrandy@us.ibm.com>
Date: Thu Mar 10 15:05:53 2016

Fix "[turbofan] [deoptimizer] Support inlining of ES6 tail calls" for embedded constant pools.

Correct handling of the bottom frame in DoComputeArgumentsAdaptorFrame.

R=ishell@chromium.org, jarin@chromium.org, michael_dawson@ca.ibm.com
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1784633002

Cr-Commit-Position: refs/heads/master@{#34681}

[modify] https://crrev.com/01589fe708d623353158dcea857cc0cf660ff49e/src/deoptimizer.cc

Labels: Test262Failures
Labels: -test262failures Hotlist-test262
Comment 32 Deleted
Comment 33 Deleted
Project Member Comment 34 by bugdroid1@chromium.org, Mar 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/690c7a854a9673ea6459e3da7db9bc0818d5ba82

commit 690c7a854a9673ea6459e3da7db9bc0818d5ba82
Author: ishell <ishell@chromium.org>
Date: Fri Mar 11 11:40:18 2016

[turbofan] Avoid dereferencing empty handle when inlining a tail call.

BUG= chromium:593697 ,v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1781303002

Cr-Commit-Position: refs/heads/master@{#34716}

[modify] https://crrev.com/690c7a854a9673ea6459e3da7db9bc0818d5ba82/src/compiler/js-inlining.cc
[add] https://crrev.com/690c7a854a9673ea6459e3da7db9bc0818d5ba82/test/mjsunit/regress/regress-crbug-593697-2.js

Project Member Comment 35 by bugdroid1@chromium.org, Mar 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/dd0e6ca04c14a5ff9fe26569255f98cebe6125fe

commit dd0e6ca04c14a5ff9fe26569255f98cebe6125fe
Author: ishell <ishell@chromium.org>
Date: Fri Mar 11 12:32:40 2016

[deoptimizer] Removed asserts that do not hold in case of tail call elimination.

These checks can fail if there bottommost function is a tail caller and the next function has different number of arguments than the bottommost one.

BUG= chromium:593697 ,v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1785253003

Cr-Commit-Position: refs/heads/master@{#34718}

[modify] https://crrev.com/dd0e6ca04c14a5ff9fe26569255f98cebe6125fe/src/deoptimizer.cc

Project Member Comment 36 by bugdroid1@chromium.org, Mar 16 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/689980f7d4dfd4c29492f616d7b616b86ec9af91

commit 689980f7d4dfd4c29492f616d7b616b86ec9af91
Author: ishell <ishell@chromium.org>
Date: Wed Mar 16 17:05:16 2016

[crankshaft] Fixing ES6 tail call elimination.

In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
Otherwise we will see G in a stack trace inside H.

This CL also enables all existing tests related to ES6 tail call elimination.

TBR=bmeurer@chromium.org
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1780043004

Cr-Commit-Position: refs/heads/master@{#34830}

[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/arm/lithium-arm.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/arm64/lithium-arm64.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/hydrogen-instructions.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/hydrogen-instructions.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/hydrogen.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/ia32/lithium-ia32.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/lithium.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/lithium.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/mips/lithium-mips.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/mips64/lithium-mips64.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/src/crankshaft/x64/lithium-x64.h
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard0.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard1.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard2.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard3.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard4.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard5.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard6.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard7.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard8.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest-shard9.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-megatest.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call-simple.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/es6/tail-call.js
[modify] https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91/test/mjsunit/mjsunit.status

Project Member Comment 37 by bugdroid1@chromium.org, Mar 16 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/d64b41ded60d46114640f1473dfe9c48e8a1ccde

commit d64b41ded60d46114640f1473dfe9c48e8a1ccde
Author: machenbach <machenbach@chromium.org>
Date: Wed Mar 16 18:12:16 2016

Revert of [crankshaft] Fixing ES6 tail call elimination. (patchset #7 id:200001 of https://codereview.chromium.org/1780043004/ )

Reason for revert:
[Sheriff] Leads to mac gc stress crashes:
https://build.chromium.org/p/client.v8/builders/V8%20Mac%20GC%20Stress/builds/4975

Original issue's description:
> [crankshaft] Fixing ES6 tail call elimination.
>
> In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
> Otherwise we will see G in a stack trace inside H.
>
> This CL also enables all existing tests related to ES6 tail call elimination.
>
> TBR=bmeurer@chromium.org
> BUG=v8:4698
> LOG=N
>
> Committed: https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91
> Cr-Commit-Position: refs/heads/master@{#34830}

TBR=mstarzinger@chromium.org,ishell@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:4698

Review URL: https://codereview.chromium.org/1814433002

Cr-Commit-Position: refs/heads/master@{#34835}

[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/arm/lithium-arm.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/arm64/lithium-arm64.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/hydrogen-instructions.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/hydrogen-instructions.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/hydrogen.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/ia32/lithium-ia32.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/lithium.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/lithium.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/mips/lithium-mips.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/mips64/lithium-mips64.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/src/crankshaft/x64/lithium-x64.h
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard0.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard1.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard2.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard3.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard4.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard5.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard6.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard7.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard8.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest-shard9.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-megatest.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call-simple.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/es6/tail-call.js
[modify] https://crrev.com/d64b41ded60d46114640f1473dfe9c48e8a1ccde/test/mjsunit/mjsunit.status

Project Member Comment 38 by bugdroid1@chromium.org, Mar 21 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/acbb968dedd2b02b5447215a579cf4cdc99bc69a

commit acbb968dedd2b02b5447215a579cf4cdc99bc69a
Author: ishell <ishell@chromium.org>
Date: Mon Mar 21 08:48:16 2016

[crankshaft] Fixing ES6 tail call elimination.

In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
Otherwise we will see G in a stack trace inside H.

This CL also enables all existing tests related to ES6 tail call elimination and adds more combinations.

TBR=bmeurer@chromium.org
BUG=v8:4698
LOG=N

Committed: https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91
Cr-Commit-Position: refs/heads/master@{#34830}

Review URL: https://codereview.chromium.org/1780043004

Cr-Commit-Position: refs/heads/master@{#34920}

[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/arm/lithium-arm.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/arm64/lithium-arm64.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/hydrogen-instructions.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/hydrogen-instructions.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/hydrogen.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/ia32/lithium-ia32.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/lithium.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/lithium.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/mips/lithium-mips.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/mips64/lithium-mips64.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/src/crankshaft/x64/lithium-x64.h
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard0.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard1.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard2.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard3.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard4.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard5.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard6.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard7.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard8.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest-shard9.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-megatest.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call-simple.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/es6/tail-call.js
[modify] https://crrev.com/acbb968dedd2b02b5447215a579cf4cdc99bc69a/test/mjsunit/mjsunit.status

Project Member Comment 40 by bugdroid1@chromium.org, Mar 21 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e6dca379b633682e64542c86ed68941ccca221f0

commit e6dca379b633682e64542c86ed68941ccca221f0
Author: ishell <ishell@chromium.org>
Date: Mon Mar 21 19:22:35 2016

[crankshaft] Check if the function is callable before generating a tail call via Call builtin.

This is necessary to ensure that "Called non callable" exception will get a proper message and stack trace even for calls at tail position.

BUG= chromium:595615 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1818003002

Cr-Commit-Position: refs/heads/master@{#34962}

[modify] https://crrev.com/e6dca379b633682e64542c86ed68941ccca221f0/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/e6dca379b633682e64542c86ed68941ccca221f0/src/crankshaft/hydrogen.h
[add] https://crrev.com/e6dca379b633682e64542c86ed68941ccca221f0/test/mjsunit/regress/regress-crbug-595615.js

Project Member Comment 43 by bugdroid1@chromium.org, Mar 22 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/df694d552448bca451e4ffd406f5446bffb28fd2

commit df694d552448bca451e4ffd406f5446bffb28fd2
Author: ishell <ishell@chromium.org>
Date: Tue Mar 22 14:43:37 2016

[crankshaft] Support inlining of function calls in tail position (in ES6 sense).

BUG=v8:4698
LOG=N
TBR=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/1782743003

Cr-Commit-Position: refs/heads/master@{#34992}

[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/hydrogen-instructions.h
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/hydrogen.h
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/lithium-codegen.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/lithium.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/ppc/lithium-ppc.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/s390/lithium-s390.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/df694d552448bca451e4ffd406f5446bffb28fd2/src/crankshaft/x87/lithium-x87.cc

Project Member Comment 44 by bugdroid1@chromium.org, Mar 22 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/a6bf5bbdeacb428e5dd4dc10d9446feea7dd4ac2

commit a6bf5bbdeacb428e5dd4dc10d9446feea7dd4ac2
Author: mbrandy <mbrandy@us.ibm.com>
Date: Tue Mar 22 16:37:01 2016

PPC: [crankshaft] Fixing ES6 tail call elimination.

Port acbb968dedd2b02b5447215a579cf4cdc99bc69a
Port 66e22b79e812437aa3be168da4612e64a2de6728

Original commit messages:
    In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
    Otherwise we will see G in a stack trace inside H.

    This CL also enables all existing tests related to ES6 tail call elimination and adds more combinations.

    Always generate lazy bailout points for tail calls because Debugger could still require them to inspect optimized frames.

R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG= chromium:596473 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1825513002

Cr-Commit-Position: refs/heads/master@{#34996}

[modify] https://crrev.com/a6bf5bbdeacb428e5dd4dc10d9446feea7dd4ac2/src/crankshaft/ppc/lithium-ppc.cc
[modify] https://crrev.com/a6bf5bbdeacb428e5dd4dc10d9446feea7dd4ac2/src/crankshaft/ppc/lithium-ppc.h

Project Member Comment 45 by bugdroid1@chromium.org, Mar 22 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/716ab0d3b40d52d45274e4c26702d1bbf448c20b

commit 716ab0d3b40d52d45274e4c26702d1bbf448c20b
Author: jyan <jyan@ca.ibm.com>
Date: Tue Mar 22 18:15:58 2016

S390: [crankshaft] Fixing ES6 tail call elimination.

Port acbb968dedd2b02b5447215a579cf4cdc99bc69a
Port 66e22b79e812437aa3be168da4612e64a2de6728

Original commit messages:
    In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site.
    Otherwise we will see G in a stack trace inside H.

    This CL also enables all existing tests related to ES6 tail call elimination and adds more combinations.

    Always generate lazy bailout points for tail calls because Debugger could still require them to inspect optimized frames.

R=ishell@chromium.org, joransiu@ca.ibm.com, mbrandy@us.ibm.com, michael_dawson@ca.ibm.com
BUG= chromium:596473 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1820373002

Cr-Commit-Position: refs/heads/master@{#35003}

[modify] https://crrev.com/716ab0d3b40d52d45274e4c26702d1bbf448c20b/src/crankshaft/s390/lithium-s390.cc
[modify] https://crrev.com/716ab0d3b40d52d45274e4c26702d1bbf448c20b/src/crankshaft/s390/lithium-s390.h

Project Member Comment 46 by bugdroid1@chromium.org, Mar 22 2016
Project Member Comment 47 by bugdroid1@chromium.org, Mar 29 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/7a33bd5da48f6b7abdeeb013df360f1af84c06b7

commit 7a33bd5da48f6b7abdeeb013df360f1af84c06b7
Author: ishell <ishell@chromium.org>
Date: Tue Mar 29 11:43:46 2016

[es6] Add a flag to the Isolate that defines whether ES2015 tail call elimination is enabled or not.

Thus DevTools will be able to disable tail call elimination dynamically upon user's choice.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1837513002

Cr-Commit-Position: refs/heads/master@{#35098}

[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/arm/builtins-arm.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/arm64/builtins-arm64.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/assembler.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/assembler.h
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/external-reference-table.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/ia32/builtins-ia32.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/isolate.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/isolate.h
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/mips/builtins-mips.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/mips64/builtins-mips64.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/ppc/builtins-ppc.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/s390/builtins-s390.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/x64/builtins-x64.cc
[modify] https://crrev.com/7a33bd5da48f6b7abdeeb013df360f1af84c06b7/src/x87/builtins-x87.cc

Blocking: 599276
Project Member Comment 51 by bugdroid1@chromium.org, Apr 1 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4

commit ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4
Author: ishell <ishell@chromium.org>
Date: Fri Apr 01 07:22:22 2016

[crankshaft] [turbofan] Fix environment handling when generating a tail call from inlined function.

This CL ensures that we build environments/frame states so that tail caller frame will never become topmost.

BUG= chromium:598998 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1849503002

Cr-Commit-Position: refs/heads/master@{#35188}

[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/compiler/instruction-selector.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/ppc/lithium-ppc.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/s390/lithium-s390.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/src/crankshaft/x87/lithium-x87.cc
[add] https://crrev.com/ecb8fcfcca4c35a32a8c10bf63dd090bdc5424c4/test/mjsunit/regress/regress-crbug-598998.js

Project Member Comment 52 by bugdroid1@chromium.org, Apr 4 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/3d4f85ab9f38340082519dea318bfe2ad967a5a5

commit 3d4f85ab9f38340082519dea318bfe2ad967a5a5
Author: yangguo <yangguo@chromium.org>
Date: Mon Apr 04 09:38:41 2016

[debugger] fix step-next for tail calls.

R=ishell@chromium.org
BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1847373002

Cr-Commit-Position: refs/heads/master@{#35230}

[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/arm64/assembler-arm64.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/assembler.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/assembler.h
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/debug/debug.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/debug/debug.h
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/arm/full-codegen-arm.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/full-codegen.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/full-codegen.h
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/mips/full-codegen-mips.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/ppc/full-codegen-ppc.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/s390/full-codegen-s390.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/x64/full-codegen-x64.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/full-codegen/x87/full-codegen-x87.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/mips/assembler-mips.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/src/mips64/assembler-mips64.cc
[modify] https://crrev.com/3d4f85ab9f38340082519dea318bfe2ad967a5a5/test/cctest/test-debug.cc

Project Member Comment 54 by bugdroid1@chromium.org, Apr 13 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/26c480d13c19e598103067576a05008319a7b7ac

commit 26c480d13c19e598103067576a05008319a7b7ac
Author: ishell <ishell@chromium.org>
Date: Mon Apr 11 12:19:23 2016

[deoptimizer] Extend assert to also expect kTailCallerFunction as bottommost frame when accessing arguments for inlined function.

BUG= chromium:601617 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1876753002

Cr-Commit-Position: refs/heads/master@{#35385}

[modify] https://crrev.com/26c480d13c19e598103067576a05008319a7b7ac/src/deoptimizer.cc
[add] https://crrev.com/26c480d13c19e598103067576a05008319a7b7ac/test/mjsunit/regress/regress-crbug-601617.js

Blocking: -chromium:599276
Project Member Comment 56 by bugdroid1@chromium.org, Apr 14 2016
Labels: merge-merged-5.1
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/1e1e59f5cf1c8b7e4152339016226b3d67281019

commit 1e1e59f5cf1c8b7e4152339016226b3d67281019
Author: ishell@chromium.org <ishell@chromium.org>
Date: Thu Apr 14 10:48:08 2016

Version 5.1.281.7 (cherry-pick)

Merged 26c480d13c19e598103067576a05008319a7b7ac

[deoptimizer] Extend assert to also expect kTailCallerFunction as bottommost frame when accessing arguments for inlined function.

BUG= chromium:601617 ,v8:4698
LOG=N
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1884123002 .

Cr-Commit-Position: refs/branch-heads/5.1@{#10}
Cr-Branched-From: 167dc63b4c9a1d0f0fe1b19af93644ac9a561e83-refs/heads/5.1.281@{#1}
Cr-Branched-From: 03953f52bd4a184983a551927c406be6489ef89b-refs/heads/master@{#35282}

[modify] https://crrev.com/1e1e59f5cf1c8b7e4152339016226b3d67281019/include/v8-version.h
[modify] https://crrev.com/1e1e59f5cf1c8b7e4152339016226b3d67281019/src/deoptimizer.cc
[add] https://crrev.com/1e1e59f5cf1c8b7e4152339016226b3d67281019/test/mjsunit/regress/regress-crbug-601617.js

Project Member Comment 57 by bugdroid1@chromium.org, Apr 21 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/b4dbb2f710834f37a0e6fbc5ea7c6d660d25c8b0

commit b4dbb2f710834f37a0e6fbc5ea7c6d660d25c8b0
Author: ishell <ishell@chromium.org>
Date: Thu Apr 21 09:53:06 2016

[deoptimizer] Do not modify stack_fp which is used as a key for lookup of previously materialized objects.

BUG= chromium:604680 , v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1904663003

Cr-Commit-Position: refs/heads/master@{#35693}

[modify] https://crrev.com/b4dbb2f710834f37a0e6fbc5ea7c6d660d25c8b0/src/deoptimizer.cc
[add] https://crrev.com/b4dbb2f710834f37a0e6fbc5ea7c6d660d25c8b0/test/mjsunit/regress/regress-crbug-604680.js

Project Member Comment 58 by bugdroid1@chromium.org, Apr 26 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/1ef876ea478a6bf3ddc0748625a5da3130436248

commit 1ef876ea478a6bf3ddc0748625a5da3130436248
Author: ishell@chromium.org <ishell@chromium.org>
Date: Tue Apr 26 08:40:32 2016

Version 5.1.281.17 (cherry-pick)

Merged b4dbb2f710834f37a0e6fbc5ea7c6d660d25c8b0

[deoptimizer] Do not modify stack_fp which is used as a key for lookup of previously materialized objects.

BUG= chromium:604680 ,v8:4698
LOG=N
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1921773002 .

Cr-Commit-Position: refs/branch-heads/5.1@{#21}
Cr-Branched-From: 167dc63b4c9a1d0f0fe1b19af93644ac9a561e83-refs/heads/5.1.281@{#1}
Cr-Branched-From: 03953f52bd4a184983a551927c406be6489ef89b-refs/heads/master@{#35282}

[modify] https://crrev.com/1ef876ea478a6bf3ddc0748625a5da3130436248/include/v8-version.h
[modify] https://crrev.com/1ef876ea478a6bf3ddc0748625a5da3130436248/src/deoptimizer.cc
[add] https://crrev.com/1ef876ea478a6bf3ddc0748625a5da3130436248/test/mjsunit/regress/regress-crbug-604680.js

Project Member Comment 60 by bugdroid1@chromium.org, Apr 27 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/813f2778f31e5f4cb07bc5c963e24bd3387c677e

commit 813f2778f31e5f4cb07bc5c963e24bd3387c677e
Author: ishell <ishell@chromium.org>
Date: Wed Apr 27 09:32:35 2016

[es6] Don't eliminate tail calls from for-in and for-of bodies.

BUG=v8:4698
LOG=N

Review URL: https://codereview.chromium.org/1914393002

Cr-Commit-Position: refs/heads/master@{#35813}

[modify] https://crrev.com/813f2778f31e5f4cb07bc5c963e24bd3387c677e/src/parsing/parser.cc
[modify] https://crrev.com/813f2778f31e5f4cb07bc5c963e24bd3387c677e/test/mjsunit/es6/tail-call.js

Project Member Comment 62 by bugdroid1@chromium.org, May 6 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197

commit e17a283f92c99d4ba7daee0dbb2e7d9e65b91197
Author: ishell <ishell@chromium.org>
Date: Fri May 06 12:36:23 2016

[es6] Properly handle the case when an inlined getter/setter/constructor does a tail call.

Deoptimizer is now able to reconstruct topmost accessor and constructor frames.

BUG= chromium:608278 , v8:4698
LOG=N
TBR=bmeurer@chromium.org

Review-Url: https://codereview.chromium.org/1936043002
Cr-Commit-Position: refs/heads/master@{#36075}

[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/hydrogen-instructions.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/lithium.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/lithium.h
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/ppc/lithium-ppc.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/s390/lithium-s390.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/crankshaft/x87/lithium-x87.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/src/deoptimizer.cc
[modify] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/test/mjsunit/es6/tail-call.js
[add] https://crrev.com/e17a283f92c99d4ba7daee0dbb2e7d9e65b91197/test/mjsunit/regress/regress-crbug-608278.js

Project Member Comment 63 by bugdroid1@chromium.org, May 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/b68332d0b5dd6e043daaeed6b7dc0f4761e72168

commit b68332d0b5dd6e043daaeed6b7dc0f4761e72168
Author: ishell@chromium.org <ishell@chromium.org>
Date: Wed May 11 08:19:43 2016

Version 5.1.281.32 (cherry-pick)

Merged e17a283f92c99d4ba7daee0dbb2e7d9e65b91197

[es6] Properly handle the case when an inlined getter/setter/constructor does a tail call.

BUG= chromium:608278 ,v8:4698
LOG=N
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1967733003 .

Cr-Commit-Position: refs/branch-heads/5.1@{#36}
Cr-Branched-From: 167dc63b4c9a1d0f0fe1b19af93644ac9a561e83-refs/heads/5.1.281@{#1}
Cr-Branched-From: 03953f52bd4a184983a551927c406be6489ef89b-refs/heads/master@{#35282}

[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/include/v8-version.h
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/arm/lithium-arm.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/arm64/lithium-arm64.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/hydrogen-instructions.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/ia32/lithium-ia32.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/lithium.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/lithium.h
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/mips/lithium-mips.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/mips64/lithium-mips64.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/ppc/lithium-ppc.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/s390/lithium-s390.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/x64/lithium-x64.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/crankshaft/x87/lithium-x87.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/src/deoptimizer.cc
[modify] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/test/mjsunit/es6/tail-call.js
[add] https://crrev.com/b68332d0b5dd6e043daaeed6b7dc0f4761e72168/test/mjsunit/regress/regress-crbug-608278.js

Components: Language
Labels: SpecViolation-OpenQuestion
Blocking: chromium:596437
Project Member Comment 67 by bugdroid1@chromium.org, Feb 11
The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/f1f610178f93d3e00cdef43311c893958c6fa2c0

commit f1f610178f93d3e00cdef43311c893958c6fa2c0
Author: adamk <adamk@chromium.org>
Date: Sat Feb 11 11:45:50 2017

Un-stage tail calls

This patch removes the implication from --harmony to --harmony-tailcalls.

R=ishell@chromium.org
BUG=v8:4698

Review-Url: https://codereview.chromium.org/2691483004
Cr-Commit-Position: refs/heads/master@{#43124}

[modify] https://crrev.com/f1f610178f93d3e00cdef43311c893958c6fa2c0/src/flag-definitions.h

Labels: Priority-2
Sign in to add a comment