Index: src/compiler/scheduler.cc |
diff --git a/src/compiler/scheduler.cc b/src/compiler/scheduler.cc |
index 9a4c7af6eade6523c345fff23684c0f204168fb5..a0ab947eab6f7fdf2db7aec95473f05e3daa9445 100644 |
--- a/src/compiler/scheduler.cc |
+++ b/src/compiler/scheduler.cc |
@@ -345,6 +345,10 @@ class CFGBuilder : public ZoneObject { |
scheduler_->UpdatePlacement(node, Scheduler::kFixed); |
ConnectSwitch(node); |
break; |
+ case IrOpcode::kDeoptimize: |
+ scheduler_->UpdatePlacement(node, Scheduler::kFixed); |
+ ConnectDeoptimize(node); |
+ break; |
case IrOpcode::kReturn: |
scheduler_->UpdatePlacement(node, Scheduler::kFixed); |
ConnectReturn(node); |
@@ -494,6 +498,13 @@ class CFGBuilder : public ZoneObject { |
schedule_->AddReturn(return_block, ret); |
} |
+ void ConnectDeoptimize(Node* deopt) { |
+ Node* deoptimize_control = NodeProperties::GetControlInput(deopt); |
+ BasicBlock* deoptimize_block = FindPredecessorBlock(deoptimize_control); |
+ TraceConnect(deopt, deoptimize_block, NULL); |
+ schedule_->AddDeoptimize(deoptimize_block, deopt); |
+ } |
+ |
void ConnectThrow(Node* thr) { |
Node* throw_control = NodeProperties::GetControlInput(thr); |
BasicBlock* throw_block = FindPredecessorBlock(throw_control); |