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

Side by Side Diff: src/compiler/bytecode-graph-builder.cc

Issue 2487173002: [turbofan] Advance bytecode offset after lazy deopt. (Closed)
Patch Set: Properly restore context. Created 4 years, 1 month 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 | « src/builtins/x64/builtins-x64.cc ('k') | src/deoptimizer.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/bytecode-graph-builder.h" 5 #include "src/compiler/bytecode-graph-builder.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler/bytecode-branch-analysis.h" 10 #include "src/compiler/bytecode-branch-analysis.h"
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 } 596 }
597 597
598 void BytecodeGraphBuilder::PrepareEagerCheckpoint() { 598 void BytecodeGraphBuilder::PrepareEagerCheckpoint() {
599 if (environment()->GetEffectDependency()->opcode() != IrOpcode::kCheckpoint) { 599 if (environment()->GetEffectDependency()->opcode() != IrOpcode::kCheckpoint) {
600 // Create an explicit checkpoint node for before the operation. This only 600 // Create an explicit checkpoint node for before the operation. This only
601 // needs to happen if we aren't effect-dominated by a {Checkpoint} already. 601 // needs to happen if we aren't effect-dominated by a {Checkpoint} already.
602 Node* node = NewNode(common()->Checkpoint()); 602 Node* node = NewNode(common()->Checkpoint());
603 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); 603 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op()));
604 DCHECK_EQ(IrOpcode::kDead, 604 DCHECK_EQ(IrOpcode::kDead,
605 NodeProperties::GetFrameStateInput(node)->opcode()); 605 NodeProperties::GetFrameStateInput(node)->opcode());
606 BailoutId bailout_id_before(bytecode_iterator().current_offset()); 606 BailoutId bailout_id(bytecode_iterator().current_offset());
607 Node* frame_state_before = environment()->Checkpoint( 607 Node* frame_state_before = environment()->Checkpoint(
608 bailout_id_before, OutputFrameStateCombine::Ignore(), false); 608 bailout_id, OutputFrameStateCombine::Ignore(), false);
609 NodeProperties::ReplaceFrameStateInput(node, frame_state_before); 609 NodeProperties::ReplaceFrameStateInput(node, frame_state_before);
610 } 610 }
611 } 611 }
612 612
613 void BytecodeGraphBuilder::PrepareFrameState(Node* node, 613 void BytecodeGraphBuilder::PrepareFrameState(Node* node,
614 OutputFrameStateCombine combine) { 614 OutputFrameStateCombine combine) {
615 if (OperatorProperties::HasFrameStateInput(node->op())) { 615 if (OperatorProperties::HasFrameStateInput(node->op())) {
616 // Add the frame state for after the operation. The node in question has 616 // Add the frame state for after the operation. The node in question has
617 // already been created and had a {Dead} frame state input up until now. 617 // already been created and had a {Dead} frame state input up until now.
618 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); 618 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op()));
619 DCHECK_EQ(IrOpcode::kDead, 619 DCHECK_EQ(IrOpcode::kDead,
620 NodeProperties::GetFrameStateInput(node)->opcode()); 620 NodeProperties::GetFrameStateInput(node)->opcode());
621 BailoutId bailout_id_after(bytecode_iterator().current_offset() + 621 BailoutId bailout_id(bytecode_iterator().current_offset());
622 bytecode_iterator().current_bytecode_size());
623 bool has_exception = NodeProperties::IsExceptionalCall(node); 622 bool has_exception = NodeProperties::IsExceptionalCall(node);
624 Node* frame_state_after = 623 Node* frame_state_after =
625 environment()->Checkpoint(bailout_id_after, combine, has_exception); 624 environment()->Checkpoint(bailout_id, combine, has_exception);
626 NodeProperties::ReplaceFrameStateInput(node, frame_state_after); 625 NodeProperties::ReplaceFrameStateInput(node, frame_state_after);
627 } 626 }
628 } 627 }
629 628
630 void BytecodeGraphBuilder::ClearNonLiveSlotsInFrameStates() { 629 void BytecodeGraphBuilder::ClearNonLiveSlotsInFrameStates() {
631 if (!IsLivenessAnalysisEnabled()) { 630 if (!IsLivenessAnalysisEnabled()) {
632 return; 631 return;
633 } 632 }
634 NonLiveFrameStateSlotReplacer replacer( 633 NonLiveFrameStateSlotReplacer replacer(
635 &state_values_cache_, jsgraph()->OptimizedOutConstant(), 634 &state_values_cache_, jsgraph()->OptimizedOutConstant(),
(...skipping 1601 matching lines...) Expand 10 before | Expand all | Expand 10 after
2237 source_positions_->set_current_position(it->source_position()); 2236 source_positions_->set_current_position(it->source_position());
2238 it->Advance(); 2237 it->Advance();
2239 } else { 2238 } else {
2240 DCHECK_GT(it->code_offset(), offset); 2239 DCHECK_GT(it->code_offset(), offset);
2241 } 2240 }
2242 } 2241 }
2243 2242
2244 } // namespace compiler 2243 } // namespace compiler
2245 } // namespace internal 2244 } // namespace internal
2246 } // namespace v8 2245 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/x64/builtins-x64.cc ('k') | src/deoptimizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698