Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: src/compiler/js-inlining.cc

Issue 2672763002: [turbofan] Remove frame-state from {JSConvertReceiver}. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler/js-typed-lowering.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-inlining.h" 5 #include "src/compiler/js-inlining.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/compilation-info.h" 8 #include "src/compilation-info.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/compiler/all-nodes.h" 10 #include "src/compiler/all-nodes.h"
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 FrameStateType::kConstructStub, info.shared_info()); 593 FrameStateType::kConstructStub, info.shared_info());
594 } 594 }
595 595
596 // The inlinee specializes to the context from the JSFunction object. 596 // The inlinee specializes to the context from the JSFunction object.
597 // TODO(turbofan): We might want to load the context from the JSFunction at 597 // TODO(turbofan): We might want to load the context from the JSFunction at
598 // runtime in case we only know the SharedFunctionInfo once we have dynamic 598 // runtime in case we only know the SharedFunctionInfo once we have dynamic
599 // type feedback in the compiler. 599 // type feedback in the compiler.
600 Node* context = jsgraph()->Constant(handle(function->context())); 600 Node* context = jsgraph()->Constant(handle(function->context()));
601 601
602 // Insert a JSConvertReceiver node for sloppy callees. Note that the context 602 // Insert a JSConvertReceiver node for sloppy callees. Note that the context
603 // passed into this node has to be the callees context (loaded above). Note 603 // passed into this node has to be the callees context (loaded above).
604 // that the frame state passed to the JSConvertReceiver must be the frame
605 // state _before_ the call; it is not necessary to fiddle with the receiver
606 // in that frame state tho, as the conversion of the receiver can be repeated
607 // any number of times, it's not observable.
608 if (node->opcode() == IrOpcode::kJSCall && 604 if (node->opcode() == IrOpcode::kJSCall &&
609 is_sloppy(shared_info->language_mode()) && !shared_info->native()) { 605 is_sloppy(shared_info->language_mode()) && !shared_info->native()) {
610 Node* effect = NodeProperties::GetEffectInput(node); 606 Node* effect = NodeProperties::GetEffectInput(node);
611 if (NeedsConvertReceiver(call.receiver(), effect)) { 607 if (NeedsConvertReceiver(call.receiver(), effect)) {
612 const CallParameters& p = CallParametersOf(node->op()); 608 const CallParameters& p = CallParametersOf(node->op());
613 Node* frame_state_before = NodeProperties::FindFrameStateBefore(node); 609 Node* convert = effect =
614 Node* convert = effect = graph()->NewNode( 610 graph()->NewNode(javascript()->ConvertReceiver(p.convert_mode()),
615 javascript()->ConvertReceiver(p.convert_mode()), call.receiver(), 611 call.receiver(), context, effect, start);
616 context, frame_state_before, effect, start);
617 NodeProperties::ReplaceValueInput(node, convert, 1); 612 NodeProperties::ReplaceValueInput(node, convert, 1);
618 NodeProperties::ReplaceEffectInput(node, effect); 613 NodeProperties::ReplaceEffectInput(node, effect);
619 } 614 }
620 } 615 }
621 616
622 // If we are inlining a JS call at tail position then we have to pop current 617 // If we are inlining a JS call at tail position then we have to pop current
623 // frame state and its potential arguments adaptor frame state in order to 618 // frame state and its potential arguments adaptor frame state in order to
624 // make the call stack be consistent with non-inlining case. 619 // make the call stack be consistent with non-inlining case.
625 // After that we add a tail caller frame state which lets deoptimizer handle 620 // After that we add a tail caller frame state which lets deoptimizer handle
626 // the case when the outermost function inlines a tail call (it should remove 621 // the case when the outermost function inlines a tail call (it should remove
(...skipping 30 matching lines...) Expand all
657 652
658 CommonOperatorBuilder* JSInliner::common() const { return jsgraph()->common(); } 653 CommonOperatorBuilder* JSInliner::common() const { return jsgraph()->common(); }
659 654
660 SimplifiedOperatorBuilder* JSInliner::simplified() const { 655 SimplifiedOperatorBuilder* JSInliner::simplified() const {
661 return jsgraph()->simplified(); 656 return jsgraph()->simplified();
662 } 657 }
663 658
664 } // namespace compiler 659 } // namespace compiler
665 } // namespace internal 660 } // namespace internal
666 } // namespace v8 661 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/js-typed-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698