Index: src/compiler/simplified-lowering.cc |
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
index 5ecd30c761a55318d68c83dfc3d84ac2908ba0d7..119c6f0a94bb61b98ae568e4ad6bb4e5c70b32e2 100644 |
--- a/src/compiler/simplified-lowering.cc |
+++ b/src/compiler/simplified-lowering.cc |
@@ -414,6 +414,25 @@ class RepresentationSelector { |
} |
} |
+ void VisitCall(Node* node, SimplifiedLowering* lowering) { |
+ const CallDescriptor* desc = OpParameter<const CallDescriptor*>(node->op()); |
+ const MachineSignature* sig = desc->GetMachineSignature(); |
+ int params = static_cast<int>(sig->parameter_count()); |
+ // Propagate representation information from call descriptor. |
+ for (int i = 0; i < node->InputCount(); i++) { |
+ if (i == 0) { |
+ // The target of the call. |
+ ProcessInput(node, i, 0); |
+ } else if ((i - 1) < params) { |
+ ProcessInput(node, i, sig->GetParam(i - 1)); |
+ } else { |
+ ProcessInput(node, i, 0); |
+ } |
+ } |
+ |
+ SetOutput(node, desc->GetMachineSignature()->GetReturn()); |
+ } |
+ |
void VisitStateValues(Node* node) { |
if (phase_ == PROPAGATE) { |
for (int i = 0; i < node->InputCount(); i++) { |
@@ -533,6 +552,8 @@ class RepresentationSelector { |
return VisitSelect(node, use, lowering); |
case IrOpcode::kPhi: |
return VisitPhi(node, use, lowering); |
+ case IrOpcode::kCall: |
+ return VisitCall(node, lowering); |
//------------------------------------------------------------------ |
// JavaScript operators. |