New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Starred by 18 users

Issue metadata

Status: Started
Owner:
Cc:
Components:
HW: All
NextAction: ----
OS: All
Priority: 1
Type: FeatureRequest

Blocking:
issue 5267
issue 7253



Sign in to add a comment

Checking SharedFunctionInfo identity instead of closure identity for inlining

Project Member Reported by vegorov@chromium.org, Jun 26 2012

Issue description

Consider code like this:

function ounter() {
  function inner1() {
    inner2();
  }

  function inner2() {
  }

  for (var i = 0; i < 1000; i++) inner1(); 
}

In this case both inner1 and inner2 should be inlined into outer. However this is not possible with the current inlining infrastructure because it relies on closure identity. 

It seems that switching to checks (and type-feedback) based on SharedFunctionInfo should enable better inlining and also better code sharing between instances of the same closure. 

In some cases (like the example above) checks can also be omitted entirely based on static information from the parser.
 

Comment 1 by danno@chromium.org, Jul 16 2012

Owner: mmassi@chromium.org

Comment 2 by danno@chromium.org, Aug 21 2012

Status: Assigned
Cc: danno@chromium.org
Owner: ----
Status: Accepted
Additional piece of information: microbenchmarks suggest that SpiderMonkey gets this right

function benchmark() {
  function fn(a, b, c, d) {
    return a + b + c + d;
  }

  var start = new Date;
  for (var n = 0; n < 1e6; n++) {
    fn('a', 'b', 'c', 'd');
  }
  return (new Date - start);
}

console.log(benchmark());
console.log(benchmark());

would log 2 and 32 for V8 (Chrome) and 2, 1 for SM (Firefox)

Comment 4 by danno@chromium.org, Oct 4 2013

Owner: titzer@chromium.org
Status: Assigned
Has this been optimised now?
This would make programming with closures much more comfortable.
Blocking: 5267
Cc: -danno@chromium.org mvstan...@chromium.org jarin@chromium.org mstarzinger@chromium.org
Components: Compiler
Labels: -Type-Bug -Priority-Medium Performance TurboFan Hotlist-TurboFan HW-All OS-All Priority-High Type-FeatureRequest
Owner: bmeu...@chromium.org
We'll try for this in TurboFan:

This will be easier when the AstGraphBuilder is gone, because it wants scope info, available only from the closure, in order to parse and deserialize the scope chain.

The BytecodeGraphBuilder doesn't need this. In that pipeline, we can use the SharedFunctionInfo+LiteralsArray+FeedbackVector to inline safely, and not depend on the exact closure.


Project Member

Comment 8 by bugdroid1@chromium.org, Oct 6 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/23644ddffd174e5cb930031259f6fdbb80e66faa

commit 23644ddffd174e5cb930031259f6fdbb80e66faa
Author: mstarzinger <mstarzinger@chromium.org>
Date: Thu Oct 06 12:01:10 2016

[parser] Load outer ScopeInfo from SharedFunctionInfo.

This switches the {ParseInfo} constructor to always determine the outer
scope info from the shared function info instead of a concrete closure.
It is a precursor to deprecate the constructor taking closures entirely
and hence make the fact that we can parse without a closure explicit.

R=jochen@chromium.org
BUG=v8:2206

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

[modify] https://crrev.com/23644ddffd174e5cb930031259f6fdbb80e66faa/src/parsing/parse-info.cc

Here is an interesting fact for curious: Chakra seems to inline closures if possible (i.e. specializes code for the given captured context) and falls back to inlining function literals if that is not possible. I noticed that when I was looking at the code they produce for benchmark like this:

function g(f) {
  var sum = 0;
  for (var i = 0; i < 1000000; i++) sum += f(i);
  return sum;
}

function mkF(j) { return (i) => i | j; }


g(mkF(0));  // Gets specialized for j == 0 first.
g(mkF(1));  // Deopts and is reoptimized - now j is loaded from the context.
Project Member

Comment 10 by bugdroid1@chromium.org, Oct 7 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/3de42b3f224217ec88e4c609d3cf23fe06806dca

commit 3de42b3f224217ec88e4c609d3cf23fe06806dca
Author: mstarzinger <mstarzinger@chromium.org>
Date: Fri Oct 07 12:26:31 2016

[parser] Deprecate ParseInfo constructor taking closure.

This removes the {ParseInfo} constructor consuming a closure, replacing
all uses to pass only the shared function info. The goal is to make the
fact that parsing is independent of a concrete closure explicit.

R=jochen@chromium.org
BUG=v8:2206

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

[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/compiler.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/compiler/js-inlining.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/compiler/pipeline.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/crankshaft/hydrogen.h
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/debug/debug-scopes.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/parsing/parse-info.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/parsing/parse-info.h
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/src/runtime/runtime-internal.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/test/cctest/compiler/function-tester.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/test/cctest/compiler/test-linkage.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/test/cctest/compiler/test-loop-assignment-analysis.cc
[modify] https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca/test/cctest/compiler/test-run-bytecode-graph-builder.cc

Project Member

Comment 11 by bugdroid1@chromium.org, Oct 7 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/234f1a84b74b00d664ec44424382412f2a6e19f4

commit 234f1a84b74b00d664ec44424382412f2a6e19f4
Author: hablich <hablich@chromium.org>
Date: Fri Oct 07 21:13:12 2016

Revert of [parser] Deprecate ParseInfo constructor taking closure. (patchset #2 id:20001 of https://codereview.chromium.org/2396963003/ )

Reason for revert:
Needed to revert https://codereview.chromium.org/2400343002/

Original issue's description:
> [parser] Deprecate ParseInfo constructor taking closure.
>
> This removes the {ParseInfo} constructor consuming a closure, replacing
> all uses to pass only the shared function info. The goal is to make the
> fact that parsing is independent of a concrete closure explicit.
>
> R=jochen@chromium.org
> BUG=v8:2206
>
> Committed: https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca
> Cr-Commit-Position: refs/heads/master@{#40083}

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

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

[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/compiler.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/compiler/js-inlining.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/compiler/pipeline.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/crankshaft/hydrogen.h
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/debug/debug-scopes.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/parsing/parse-info.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/parsing/parse-info.h
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/src/runtime/runtime-internal.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/test/cctest/compiler/function-tester.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/test/cctest/compiler/test-linkage.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/test/cctest/compiler/test-loop-assignment-analysis.cc
[modify] https://crrev.com/234f1a84b74b00d664ec44424382412f2a6e19f4/test/cctest/compiler/test-run-bytecode-graph-builder.cc

Project Member

Comment 12 by bugdroid1@chromium.org, Oct 10 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/f6bd23f244c6b86ea970b49dc9ee34e41e06338a

commit f6bd23f244c6b86ea970b49dc9ee34e41e06338a
Author: bmeurer <bmeurer@chromium.org>
Date: Mon Oct 10 05:53:31 2016

[turbofan] Enforce native context specialization.

There were once plans to generate cross-context code with TurboFan,
however that doesn't fit into the model anymore, and so all of this
is essentially dead untested code (and thus most likely already broken
in subtle ways). With this mode still in place it would also be a lot
harder to make inlining based on SharedFunctionInfo work.

BUG=v8:2206, v8:5499 
R=jarin@chromium.org

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

[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compilation-info.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-call-reducer.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-call-reducer.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-create-lowering.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-create-lowering.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-global-object-specialization.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-global-object-specialization.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-native-context-specialization.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/js-native-context-specialization.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/node-properties.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/node-properties.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/compiler/pipeline.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/src/flag-definitions.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/cctest/compiler/function-tester.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/cctest/compiler/test-run-inlining.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/cctest/compiler/test-run-jscalls.cc
[delete] https://crrev.com/cc02e74320c940902d7004ec070587289c04d8da/test/mjsunit/regress/regress-568765.js
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/unittests/compiler/graph-unittest.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/unittests/compiler/graph-unittest.h
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/unittests/compiler/js-create-lowering-unittest.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/unittests/test-utils.cc
[modify] https://crrev.com/f6bd23f244c6b86ea970b49dc9ee34e41e06338a/test/unittests/test-utils.h

Project Member

Comment 13 by bugdroid1@chromium.org, Oct 12 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/c15c58274f04eef9d62245f33a836cd8287b9c53

commit c15c58274f04eef9d62245f33a836cd8287b9c53
Author: bmeurer <bmeurer@chromium.org>
Date: Wed Oct 12 09:25:55 2016

[stubs] Refactor the CallICStub to pass the number of arguments.

This is the next step to unify the Call/Construct feedback collection
and prepare it to be able to collect SharedFunctionInfo feedback. This
also reduces the CallICStub overhead quite a bit since we only need one
stub per mode (and tail call mode), not also one per call arity.

R=mvstanton@chromium.org
BUG=v8:2206
NOTRY=true

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

[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/arm/code-stubs-arm.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/arm/interface-descriptors-arm.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/arm64/code-stubs-arm64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/arm64/interface-descriptors-arm64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/code-factory.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/code-factory.h
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/code-stubs.h
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/arm/full-codegen-arm.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/mips/full-codegen-mips.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/full-codegen/x64/full-codegen-x64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/ia32/code-stubs-ia32.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/ia32/interface-descriptors-ia32.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/ic/ic-state.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/ic/ic-state.h
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/interface-descriptors.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/interface-descriptors.h
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/mips/code-stubs-mips.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/mips/interface-descriptors-mips.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/mips64/code-stubs-mips64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/mips64/interface-descriptors-mips64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/x64/code-stubs-x64.cc
[modify] https://crrev.com/c15c58274f04eef9d62245f33a836cd8287b9c53/src/x64/interface-descriptors-x64.cc

Project Member

Comment 14 by bugdroid1@chromium.org, Oct 17 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/ab5379074d152c5841148277bfdd63739ecb9a4a

commit ab5379074d152c5841148277bfdd63739ecb9a4a
Author: mstarzinger <mstarzinger@chromium.org>
Date: Mon Oct 17 10:26:59 2016

[parser] Deprecate ParseInfo constructor taking closure.

This removes the {ParseInfo} constructor consuming a closure, replacing
all uses to pass only the shared function info. The goal is to make the
fact that parsing is independent of a concrete closure explicit.

R=jochen@chromium.org
BUG=v8:2206

Committed: https://crrev.com/3de42b3f224217ec88e4c609d3cf23fe06806dca
Review-Url: https://codereview.chromium.org/2396963003
Cr-Original-Commit-Position: refs/heads/master@{#40083}
Cr-Commit-Position: refs/heads/master@{#40353}

[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/compiler.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/compiler/js-inlining.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/compiler/pipeline.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/crankshaft/hydrogen.h
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/debug/debug-scopes.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/parsing/parse-info.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/parsing/parse-info.h
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/src/runtime/runtime-internal.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/test/cctest/compiler/function-tester.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/test/cctest/compiler/test-linkage.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/test/cctest/compiler/test-loop-assignment-analysis.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/test/cctest/compiler/test-run-bytecode-graph-builder.cc
[modify] https://crrev.com/ab5379074d152c5841148277bfdd63739ecb9a4a/test/cctest/test-parsing.cc

Project Member

Comment 15 by bugdroid1@chromium.org, Oct 18 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/308788b3069703117a9004e64c06c26137c84263

commit 308788b3069703117a9004e64c06c26137c84263
Author: bmeurer <bmeurer@chromium.org>
Date: Tue Oct 18 12:01:05 2016

[ic] Unify CallIC feedback collection and handling.

Consistently collect CallIC feedback in fullcodegen and Ignition, even
for possibly direct eval calls, that were treated specially so far, for
no apparent reason. With the upcoming SharedFunctionInfo based CallIC
feedback, we might be able to even inline certain direct eval calls, if
they manage to hit the eval cache. More importantly, this patch
simplifies the collection and dealing with CallIC feedback (and as a
side effect fixes an inconsistency with feedback for super constructor
calls).

R=mvstanton@chromium.org, mythria@chromium.org
BUG=v8:2206, v8:4280 ,v8:5267

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

[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/ast/ast.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/ast/ast.h
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/compiler/bytecode-graph-builder.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/crankshaft/hydrogen.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/crankshaft/typing.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/arm/full-codegen-arm.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/arm64/full-codegen-arm64.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/ia32/full-codegen-ia32.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/mips/full-codegen-mips.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/mips64/full-codegen-mips64.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/full-codegen/x64/full-codegen-x64.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/interpreter/bytecode-generator.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/src/interpreter/interpreter-assembler.cc
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/test/cctest/interpreter/bytecode_expectations/CallLookupSlot.golden
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/test/cctest/interpreter/bytecode_expectations/ClassAndSuperClass.golden
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/test/cctest/interpreter/bytecode_expectations/ContextVariables.golden
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/test/cctest/interpreter/bytecode_expectations/Eval.golden
[modify] https://crrev.com/308788b3069703117a9004e64c06c26137c84263/test/cctest/interpreter/bytecode_expectations/LookupSlot.golden

Project Member

Comment 16 by bugdroid1@chromium.org, Nov 24 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/76fd6f25a9ad4e02fe28beff97f8f083f1d48880

commit 76fd6f25a9ad4e02fe28beff97f8f083f1d48880
Author: bmeurer <bmeurer@chromium.org>
Date: Thu Nov 24 07:59:26 2016

[turbofan] Remove inlining support for the deprecated pipeline.

The deprecated pipeline is used for asm.js only, where we forcibly
disable inlining anyways (for performance reasons), so inlining via
the AstGraphBuilder is essentially dead code by now, thus there's no
point in trying to keep that around in the code base.

Also nuke the test-run-inlining.cc file, which would require some heavy
surgery (for probably little benefit), and move the useful tests for
mjsunit tests instead.

BUG=v8:2206, v8:5657 
R=yangguo@chromium.org

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

[modify] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/src/compiler/js-inlining.cc
[modify] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/src/compiler/pipeline.cc
[modify] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/cctest/BUILD.gn
[modify] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/cctest/cctest.gyp
[delete] https://crrev.com/f0d3cf5baeb9df05c29dafa1b1840eb0595d7abc/test/cctest/compiler/test-run-inlining.cc
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/capture-context.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-context-deopt.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-omit-arguments-deopt.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-omit-arguments-object.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-omit-arguments.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-surplus-arguments-deopt.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-surplus-arguments-object.js
[add] https://crrev.com/76fd6f25a9ad4e02fe28beff97f8f083f1d48880/test/mjsunit/compiler/inline-surplus-arguments.js

Cc: -mstarzinger@chromium.org bmeu...@chromium.org
Owner: mstarzinger@chromium.org
Michi agreed to finish this.
Project Member

Comment 18 by bugdroid1@chromium.org, Jan 11 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/fc241b907732a5547d6302e367a7ec0da9e24909

commit fc241b907732a5547d6302e367a7ec0da9e24909
Author: mstarzinger <mstarzinger@chromium.org>
Date: Wed Jan 11 13:05:53 2017

[turbofan] Graph building is independent of closure.

This changes the BytecodeGraphBuilder interface to make the fact that
graph construction is independent of a closure explicit. A valid graph
can be constructed by providing only the pair of statically known values
for SharedFunctionInfo and TypeFeedbackVector. This is in preparation of
inlining based on the SharedFunctionInfo.

R=jarin@chromium.org
BUG=v8:2206

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

[modify] https://crrev.com/fc241b907732a5547d6302e367a7ec0da9e24909/src/compiler/bytecode-graph-builder.cc
[modify] https://crrev.com/fc241b907732a5547d6302e367a7ec0da9e24909/src/compiler/bytecode-graph-builder.h
[modify] https://crrev.com/fc241b907732a5547d6302e367a7ec0da9e24909/src/compiler/js-inlining.cc
[modify] https://crrev.com/fc241b907732a5547d6302e367a7ec0da9e24909/src/compiler/pipeline.cc

Project Member

Comment 19 by bugdroid1@chromium.org, Jan 13 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/83f19e7d972c9564b523da49782eb41b0939d8ce

commit 83f19e7d972c9564b523da49782eb41b0939d8ce
Author: mstarzinger <mstarzinger@chromium.org>
Date: Fri Jan 13 14:07:02 2017

[turbofan] Disable inline allocation of closures.

This puts lowering of {JSCreateClosure} operations behind a flag. For
now the benefit of inline allocating such closures is negligible, it
does increase code size, and breaks in combination with inlining based
on {SharedFunctionInfo}.

R=jarin@chromium.org
BUG=v8:2206

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

[modify] https://crrev.com/83f19e7d972c9564b523da49782eb41b0939d8ce/src/compiler/js-create-lowering.cc
[modify] https://crrev.com/83f19e7d972c9564b523da49782eb41b0939d8ce/src/flag-definitions.h
[modify] https://crrev.com/83f19e7d972c9564b523da49782eb41b0939d8ce/test/unittests/compiler/js-create-lowering-unittest.cc

Project Member

Comment 20 by bugdroid1@chromium.org, Feb 6 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/b628aba090e518c5de4147213803871e5eaf5f47

commit b628aba090e518c5de4147213803871e5eaf5f47
Author: mstarzinger <mstarzinger@chromium.org>
Date: Mon Feb 06 13:54:38 2017

[turbofan] Enable inlining based on SharedFunctionInfo.

This adapts the inlining logic to allow for inlining based solely on a
statically known underlying SharedFunctionInfo instead of a concrete
closure of the call target.

In cases where the closure is known, its bound context is constant
promoted just as before. In the new cases where only the SFI for an
entire class of closures is known, we use the dynamic SSA-value of the
bound context.

R=bmeurer@chromium.org
BUG=v8:2206

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

[modify] https://crrev.com/b628aba090e518c5de4147213803871e5eaf5f47/src/compiler/js-inlining-heuristic.cc
[modify] https://crrev.com/b628aba090e518c5de4147213803871e5eaf5f47/src/compiler/js-inlining-heuristic.h
[modify] https://crrev.com/b628aba090e518c5de4147213803871e5eaf5f47/src/compiler/js-inlining.cc
[modify] https://crrev.com/b628aba090e518c5de4147213803871e5eaf5f47/src/compiler/js-inlining.h
[modify] https://crrev.com/b628aba090e518c5de4147213803871e5eaf5f47/src/objects.h

Quick update: With the latest change (i.e. see comment #20) we are able to inline functions where the call target's SharedFunctionInfo can be statically determined. This will cause "inner1" in the snippet in the original issue description to be inlined. The "inner2" variable however is context allocated and we are not yet able to determine the call target (without looking at feedback). I would say we are about halfway there. :)
Labels: Priority-1
Is there any update on this?

I can confirm that running the example with inner2() hoisted shows the performance cliff is eliminated; outer() gets optimized once and remains optimized.  Very cool.

As expected, latest d8 still shows a massive deopt/cliff on second call to outer() from which performance is never recovered, i.e. the first call remains an order of magnitude faster.

[deoptimizing (DEOPT eager): begin 0x4b9fba2c371 <JSFunction outer (sfi = 0x4b9fba2bf09)> (opt #1) @0, FP to SP delta: 40, caller sp: 0x7fff58960020]
            ;;; deoptimize at <inner-classic.js:1:15>, no reason

Not that I think further motivation is needed (you are doing great work!), but enabling inlining of "essentially static" functions, that just happen to be non-singleton & context-allocated due to lack of hoisting, could be a huge win for userland module systems where "modules" maybe be instantiated multiple times in the same isolate, i.e. where every exported function is liable to hit this problem.
Owner: bmeu...@chromium.org
Project Member

Comment 25 by bugdroid1@chromium.org, Feb 20 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/e465a4f3be4cae38c8b9df2cabc414a40e938dca

commit e465a4f3be4cae38c8b9df2cabc414a40e938dca
Author: Benedikt Meurer <bmeurer@chromium.org>
Date: Tue Feb 20 11:09:42 2018

[turbofan] Support inlining of builtins based on SharedFunctionInfo.

This makes the inlining of the default resolve/reject closures generated
by the Promise constructor effective. To be really useful we still need
to have the Promise constructor inlined (work-in-progress) and eventually
track SharedFunctionInfo feedback in the CALL_IC.

Bug: v8:2206, v8:7253
Change-Id: I08fa8ca72754f459ae36027a55377ef57d411cdc
Reviewed-on: https://chromium-review.googlesource.com/926103
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51390}
[modify] https://crrev.com/e465a4f3be4cae38c8b9df2cabc414a40e938dca/src/compiler/frame-states.cc
[modify] https://crrev.com/e465a4f3be4cae38c8b9df2cabc414a40e938dca/src/compiler/frame-states.h
[modify] https://crrev.com/e465a4f3be4cae38c8b9df2cabc414a40e938dca/src/compiler/js-call-reducer.cc
[modify] https://crrev.com/e465a4f3be4cae38c8b9df2cabc414a40e938dca/src/compiler/js-call-reducer.h
[modify] https://crrev.com/e465a4f3be4cae38c8b9df2cabc414a40e938dca/test/mjsunit/compiler/promise-capability-default-closures.js

Cc: -bmeu...@chromium.org rob.palm...@gmail.com
Labels: Hotlist-Ignition
Status: Started (was: Assigned)
Going to address the final bit here now. Turned the micro-benchmark from Slava into something more actionable:

=========< bench-slava.js >====================
function outer() {
  const inner1 = () => inner2();
  const inner2 = () => {};

  for (var i = 0; i < 1e8; i++) inner1();
}

console.time('first');
outer();
console.timeEnd('first');

console.time('second');
outer();
console.timeEnd('second');

console.time('third');
outer();
console.timeEnd('third');
===============================================

On V8 ToT we currently see:

===============================================
$ ./d8-master bench-slava.js
console.timeEnd: first, 61.719000
console.timeEnd: second, 1001.972000
console.timeEnd: third, 522.406000
===============================================

The second iteration is way worse due to OSR (benchmark artifact here). Otherwise it's roughly an 8x to 10x slowdown.
Blocking: 7253
Project Member

Comment 28 by bugdroid1@chromium.org, Feb 22 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/aff1f3788b7abce54a27fac750f13f88f240d327

commit aff1f3788b7abce54a27fac750f13f88f240d327
Author: Benedikt Meurer <bmeurer@chromium.org>
Date: Thu Feb 22 13:18:48 2018

[cleanup] Introduce a dedicated FeedbackCell.

This is preparatory cleanup work for eventually tracking the functions
(rather than concrete closures) in the CALL_IC, also for builtins like
the default PromiseCapability [[Resolve]] and [[Reject]] functions. It
adds a new FeedbackCell type, which is used by JSFunctions consistently
now to reference the feedback vector (or undefined if not the function
is not compiled yet or is a native/asm.js function).

This also changes the calling convention for FastNewClosure builtin and
the JSCreateClosure operator in TurboFan to carry the FeedbackCell here
instead of the parent FeedbackVector and the slot index. In addition we
eliminate the now unused %InterpreterNewClosure runtime function.

Bug: v8:2206, v8:7253,  v8:7310 
Change-Id: Ib4ce456e276e0273e57c163dcdd0b33abf863656
Reviewed-on: https://chromium-review.googlesource.com/928403
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51474}
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/arm/interface-descriptors-arm.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/arm64/interface-descriptors-arm64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/arm/builtins-arm.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/arm64/builtins-arm64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/builtins-constructor-gen.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/builtins-constructor-gen.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/builtins-definitions.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/ia32/builtins-ia32.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/mips/builtins-mips.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/mips64/builtins-mips64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/ppc/builtins-ppc.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/s390/builtins-s390.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/builtins/x64/builtins-x64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/code-stub-assembler.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/code-stub-assembler.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compilation-cache.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compilation-cache.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler-dispatcher/optimizing-compile-dispatcher.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/access-builder.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/access-builder.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/bytecode-graph-builder.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-call-reducer.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-create-lowering.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-generic-lowering.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-inlining.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-operator.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/js-operator.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/pipeline.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/compiler/types.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/debug/liveedit.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/factory.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/factory.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/feedback-vector.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/feedback-vector.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/heap/heap.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/heap/heap.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/heap/objects-visiting.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/heap/setup-heap-internal.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/ia32/interface-descriptors-ia32.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/interface-descriptors.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/interpreter/interpreter-assembler.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/interpreter/interpreter-generator.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/mips/interface-descriptors-mips.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/mips64/interface-descriptors-mips64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects-body-descriptors-inl.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects-debug.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects-inl.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects-printer.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects/compilation-cache.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/objects/map.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/ppc/interface-descriptors-ppc.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/profiler/heap-snapshot-generator.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/profiler/heap-snapshot-generator.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/runtime/runtime-function.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/runtime/runtime-interpreter.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/runtime/runtime-scopes.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/runtime/runtime-test.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/runtime/runtime.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/s390/interface-descriptors-s390.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/src/x64/interface-descriptors-x64.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/cctest/compiler/function-tester.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/cctest/interpreter/interpreter-tester.h
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/cctest/test-code-stub-assembler.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/cctest/test-feedback-vector.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/cctest/test-heap-profiler.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/test/unittests/interpreter/interpreter-assembler-unittest.cc
[modify] https://crrev.com/aff1f3788b7abce54a27fac750f13f88f240d327/tools/v8heapconst.py

Project Member

Comment 29 by bugdroid1@chromium.org, Feb 26 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/2ece046c5bb312521351f909f9fd735ed645bfb1

commit 2ece046c5bb312521351f909f9fd735ed645bfb1
Author: Benedikt Meurer <bmeurer@chromium.org>
Date: Mon Feb 26 04:30:10 2018

[turbofan] Introduce explicit CreateClosureMode.

We use JSCreateClosure to also constructs closures for builtins, i.e.
for the callbacks created by the Promise constructor. For these builtins
we cannot set code to CompileLazy builtin, but need to use the code from
the SharedFunctionInfo. The explicit mode tells the lowering what it
should do (instead of relying on SharedFunctionInfo::native(), which is
not the right bit).

Bug: v8:2206, v8:7253,  v8:7310 
Change-Id: Ic956814e137c57b36ebb5d7b4d964dde5ee51a0d
Reviewed-on: https://chromium-review.googlesource.com/930964
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51547}
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/bytecode-graph-builder.cc
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/js-call-reducer.cc
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/js-create-lowering.cc
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/js-generic-lowering.cc
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/js-operator.cc
[modify] https://crrev.com/2ece046c5bb312521351f909f9fd735ed645bfb1/src/compiler/js-operator.h

Project Member

Comment 30 by bugdroid1@chromium.org, Feb 26 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/597852f815a31fcc0dc941eb19f901705429e5fe

commit 597852f815a31fcc0dc941eb19f901705429e5fe
Author: Benedikt Meurer <bmeurer@chromium.org>
Date: Mon Feb 26 07:35:32 2018

[turbofan] Further harden the JSCreateClosure nodes.

The CreateClosureMode introduced with 2ece046c5 is still not 100%
fail-safe and doesn't scale. What we really need instead, especially
when we might start removing the SharedFunctionInfo::code field
eventually, is to tell the JSCreateClosure node which code object to
use. So instead of adding magic around it, let's just pass it to the
node.

Bug: v8:2206, v8:7253,  v8:7310 
Change-Id: Iedb6ae468a763643617975f47d96854d1aeafbe9
Reviewed-on: https://chromium-review.googlesource.com/937121
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51548}
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/bytecode-graph-builder.cc
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/js-call-reducer.cc
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/js-create-lowering.cc
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/js-generic-lowering.cc
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/js-operator.cc
[modify] https://crrev.com/597852f815a31fcc0dc941eb19f901705429e5fe/src/compiler/js-operator.h

Sign in to add a comment