Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 97fa9214f668524e81cd937681923b7ea1a6c1f4..20d09bb5bee8ce83ec314f8751444096c487dad6 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -730,7 +730,6 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kIfTrue: |
case IrOpcode::kIfFalse: |
case IrOpcode::kIfSuccess: |
- case IrOpcode::kIfException: |
case IrOpcode::kSwitch: |
case IrOpcode::kIfValue: |
case IrOpcode::kIfDefault: |
@@ -738,6 +737,8 @@ void InstructionSelector::VisitNode(Node* node) { |
case IrOpcode::kMerge: |
// No code needed for these graph artifacts. |
return; |
+ case IrOpcode::kIfException: |
+ return VisitIfException(node); |
Benedikt Meurer
2015/03/10 09:42:08
MarkAsReference is missing.
Michael Starzinger
2015/03/31 11:58:44
Done.
|
case IrOpcode::kFinish: |
return MarkAsReference(node), VisitFinish(node); |
case IrOpcode::kParameter: { |
@@ -1042,6 +1043,16 @@ void InstructionSelector::VisitParameter(Node* node) { |
} |
+void InstructionSelector::VisitIfException(Node* node) { |
+ OperandGenerator g(this); |
+ Node* call = node->InputAt(0); |
+ DCHECK_EQ(IrOpcode::kCall, call->opcode()); |
+ const CallDescriptor* descriptor = OpParameter<const CallDescriptor*>(call); |
+ Emit(kArchNop, g.DefineAsLocation(node, descriptor->GetReturnLocation(0), |
+ descriptor->GetReturnType(0))); |
+} |
+ |
+ |
void InstructionSelector::VisitOsrValue(Node* node) { |
OperandGenerator g(this); |
int index = OpParameter<int>(node); |