Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 9ec91e53324e91fb48dedf9115d6027d26399bc7..88569beb6586948810d58936ca469d2374574c3e 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -217,15 +217,17 @@ void AstGraphBuilder::Environment::UpdateStateValues(Node** state_values, |
} |
-Node* AstGraphBuilder::Environment::Checkpoint(BailoutId ast_id) { |
+Node* AstGraphBuilder::Environment::Checkpoint( |
+ BailoutId ast_id, OutputFrameStateCombine combine) { |
UpdateStateValues(¶meters_node_, 0, parameters_count()); |
UpdateStateValues(&locals_node_, parameters_count(), locals_count()); |
UpdateStateValues(&stack_node_, parameters_count() + locals_count(), |
stack_height()); |
- Operator* op = common()->FrameState(ast_id); |
+ Operator* op = common()->FrameState(ast_id, combine); |
- return graph()->NewNode(op, parameters_node_, locals_node_, stack_node_); |
+ return graph()->NewNode(op, parameters_node_, locals_node_, stack_node_, |
+ GetContext()); |
} |
@@ -2009,37 +2011,9 @@ void AstGraphBuilder::PrepareFrameState(Node* node, BailoutId ast_id, |
DCHECK(node->InputAt(frame_state_index)->op()->opcode() == IrOpcode::kDead); |
- Node* frame_state_node = environment()->Checkpoint(ast_id); |
+ Node* frame_state_node = environment()->Checkpoint(ast_id, combine); |
node->ReplaceInput(frame_state_index, frame_state_node); |
} |
- |
- if (OperatorProperties::CanLazilyDeoptimize(node->op())) { |
- // The deopting node should have an outgoing control dependency. |
- DCHECK(environment()->GetControlDependency() == node); |
- |
- StructuredGraphBuilder::Environment* continuation_env = environment(); |
- // Create environment for the deoptimization block, and build the block. |
- StructuredGraphBuilder::Environment* deopt_env = |
- CopyEnvironment(continuation_env); |
- set_environment(deopt_env); |
- |
- if (combine == PUSH_OUTPUT) { |
- environment()->Push(node); |
- } |
- |
- NewNode(common()->LazyDeoptimization()); |
- |
- // TODO(jarin) If ast_id.IsNone(), perhaps we should generate an empty |
- // deopt block and make sure there is no patch entry for this (so |
- // that the deoptimizer dies when trying to deoptimize here). |
- Node* state_node = environment()->Checkpoint(ast_id); |
- Node* deoptimize_node = NewNode(common()->Deoptimize(), state_node); |
- UpdateControlDependencyToLeaveFunction(deoptimize_node); |
- |
- // Continue with the original environment. |
- set_environment(continuation_env); |
- NewNode(common()->Continuation()); |
- } |
} |
} |