| Index: src/compiler/ast-graph-builder.cc
|
| diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
|
| index a63744e2f34a41795e368e6dedc40d93d73c2fc2..3b8ed8ec2299994bc074f70963228e52aef5868d 100644
|
| --- a/src/compiler/ast-graph-builder.cc
|
| +++ b/src/compiler/ast-graph-builder.cc
|
| @@ -440,7 +440,7 @@ AstGraphBuilder::AstGraphBuilder(Zone* local_zone, CompilationInfo* info,
|
| try_nesting_level_(0),
|
| input_buffer_size_(0),
|
| input_buffer_(nullptr),
|
| - exit_control_(nullptr),
|
| + exit_controls_(local_zone),
|
| loop_assignment_analysis_(loop),
|
| state_values_cache_(jsgraph),
|
| liveness_analyzer_(static_cast<size_t>(info->scope()->num_stack_slots()),
|
| @@ -535,7 +535,11 @@ bool AstGraphBuilder::CreateGraph(bool constant_context, bool stack_check) {
|
| }
|
|
|
| // Finish the basic structure of the graph.
|
| - graph()->SetEnd(graph()->NewNode(common()->End(), exit_control()));
|
| + DCHECK_NE(0u, exit_controls_.size());
|
| + int const input_count = static_cast<int>(exit_controls_.size());
|
| + Node** const inputs = &exit_controls_.front();
|
| + Node* end = graph()->NewNode(common()->End(input_count), input_count, inputs);
|
| + graph()->SetEnd(end);
|
|
|
| // Compute local variable liveness information and use it to relax
|
| // frame states.
|
| @@ -3561,11 +3565,8 @@ Node* AstGraphBuilder::MakeNode(const Operator* op, int value_input_count,
|
|
|
| void AstGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) {
|
| if (environment()->IsMarkedAsUnreachable()) return;
|
| - if (exit_control() != NULL) {
|
| - exit = MergeControl(exit_control(), exit);
|
| - }
|
| environment()->MarkAsUnreachable();
|
| - set_exit_control(exit);
|
| + exit_controls_.push_back(exit);
|
| }
|
|
|
|
|
|
|