Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index e8a52a61e12213577b48711ba768ad36ac117252..f0c72653e816bd3073022e22aee3c2000303b4a6 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -503,6 +503,17 @@ void InstructionSelector::VisitControl(BasicBlock* block) { |
switch (block->control()) { |
case BasicBlock::kGoto: |
return VisitGoto(block->SuccessorAt(0)); |
+ case BasicBlock::kCall: { |
+ DCHECK_EQ(IrOpcode::kCall, input->opcode()); |
+ BasicBlock* success = block->SuccessorAt(0); |
+ BasicBlock* exception = block->SuccessorAt(1); |
+ // SSA deconstruction requires targets of branches not to have phis. |
+ // Edge split form guarantees this property, but is more strict. |
+ CheckNoPhis(success); |
titzer
2015/02/17 10:32:52
We could probably CheckNoPhis for all blocks if Su
Michael Starzinger
2015/02/17 10:58:29
Done. Also inlined the CheckNoPhis helper as per o
|
+ CheckNoPhis(exception); |
+ // TODO(mstarzinger): Record location of {exception} in {handler_table}. |
+ return VisitCall(input), VisitGoto(success); |
+ } |
case BasicBlock::kBranch: { |
DCHECK_EQ(IrOpcode::kBranch, input->opcode()); |
BasicBlock* tbranch = block->SuccessorAt(0); |
@@ -700,6 +711,8 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kBranch: |
case IrOpcode::kIfTrue: |
case IrOpcode::kIfFalse: |
+ case IrOpcode::kIfException: |
+ case IrOpcode::kIfSuccess: |
case IrOpcode::kSwitch: |
case IrOpcode::kCase: |
case IrOpcode::kEffectPhi: |