| Index: src/compiler/js-inlining.cc
|
| diff --git a/src/compiler/js-inlining.cc b/src/compiler/js-inlining.cc
|
| index 81bfd98fd5551f88d9a432a2b3335c0aef53ff66..88d91718e551c7f3abcaa9e0c1dd3c0ad1a6dcb3 100644
|
| --- a/src/compiler/js-inlining.cc
|
| +++ b/src/compiler/js-inlining.cc
|
| @@ -115,8 +115,8 @@ class CopyVisitor {
|
| };
|
|
|
|
|
| -Reduction JSInliner::InlineCall(Node* call, Node* frame_state, Node* start,
|
| - Node* end) {
|
| +Reduction JSInliner::InlineCall(Node* call, Node* context, Node* frame_state,
|
| + Node* start, Node* end) {
|
| // The scheduler is smart enough to place our code; we just ensure {control}
|
| // becomes the control input of the start of the inlinee, and {effect} becomes
|
| // the effect input of the start of the inlinee.
|
| @@ -139,14 +139,12 @@ Reduction JSInliner::InlineCall(Node* call, Node* frame_state, Node* start,
|
| if (index < inliner_inputs && index < inlinee_context_index) {
|
| // There is an input from the call, and the index is a value
|
| // projection but not the context, so rewire the input.
|
| - ReplaceWithValue(use, call->InputAt(index));
|
| + Replace(use, call->InputAt(index));
|
| } else if (index == inlinee_context_index) {
|
| - // TODO(turbofan): We always context specialize inlinees currently, so
|
| - // we should never get here.
|
| - UNREACHABLE();
|
| + Replace(use, context);
|
| } else if (index < inlinee_context_index) {
|
| // Call has fewer arguments than required, fill with undefined.
|
| - ReplaceWithValue(use, jsgraph_->UndefinedConstant());
|
| + Replace(use, jsgraph_->UndefinedConstant());
|
| } else {
|
| // We got too many arguments, discard for now.
|
| // TODO(sigurds): Fix to treat arguments array correctly.
|
| @@ -307,13 +305,14 @@ Reduction JSInliner::Reduce(Node* node) {
|
| Graph graph(info.zone());
|
| JSGraph jsgraph(info.isolate(), &graph, jsgraph_->common(),
|
| jsgraph_->javascript(), jsgraph_->machine());
|
| + AstGraphBuilder graph_builder(local_zone_, &info, &jsgraph);
|
| + graph_builder.CreateGraph(false);
|
|
|
| // The inlinee specializes to the context from the JSFunction object.
|
| // TODO(turbofan): We might want to load the context from the JSFunction at
|
| // runtime in case we only know the SharedFunctionInfo once we have dynamic
|
| // type feedback in the compiler.
|
| - AstGraphBuilder graph_builder(local_zone_, &info, &jsgraph);
|
| - graph_builder.CreateGraph(true, false);
|
| + Node* context = jsgraph_->Constant(handle(function->context()));
|
|
|
| CopyVisitor visitor(&graph, jsgraph_->graph(), info.zone());
|
| visitor.CopyGraph();
|
| @@ -338,7 +337,7 @@ Reduction JSInliner::Reduce(Node* node) {
|
| // Remember that we inlined this function.
|
| info_->AddInlinedFunction(info.shared_info());
|
|
|
| - return InlineCall(node, frame_state, start, end);
|
| + return InlineCall(node, context, frame_state, start, end);
|
| }
|
|
|
| } // namespace compiler
|
|
|