| Index: src/compiler/instruction-selector.cc | 
| diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc | 
| index 0e3f341f4f2a1c16d88e4deece82138e7dc4bc27..793cbf702165010c75ceda1d99a7e6bd8ab41a5e 100644 | 
| --- a/src/compiler/instruction-selector.cc | 
| +++ b/src/compiler/instruction-selector.cc | 
| @@ -298,10 +298,12 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer, | 
| for (size_t i = 0; i < buffer->output_nodes.size(); i++) { | 
| if (buffer->output_nodes[i] != NULL) { | 
| Node* output = buffer->output_nodes[i]; | 
| +        MachineType type = | 
| +            buffer->descriptor->GetReturnType(static_cast<int>(i)); | 
| LinkageLocation location = | 
| buffer->descriptor->GetReturnLocation(static_cast<int>(i)); | 
| -        MarkAsRepresentation(location.representation(), output); | 
| -        buffer->outputs.push_back(g.DefineAsLocation(output, location)); | 
| +        MarkAsRepresentation(type, output); | 
| +        buffer->outputs.push_back(g.DefineAsLocation(output, location, type)); | 
| } | 
| } | 
| } | 
| @@ -325,7 +327,8 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer, | 
| break; | 
| case CallDescriptor::kCallJSFunction: | 
| buffer->instruction_args.push_back( | 
| -          g.UseLocation(callee, buffer->descriptor->GetInputLocation(0))); | 
| +          g.UseLocation(callee, buffer->descriptor->GetInputLocation(0), | 
| +                        buffer->descriptor->GetInputType(0))); | 
| break; | 
| } | 
| DCHECK_EQ(1, buffer->instruction_args.size()); | 
| @@ -360,7 +363,8 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer, | 
| DCHECK((*iter)->op()->opcode() != IrOpcode::kFrameState); | 
| if (index == 0) continue;  // The first argument (callee) is already done. | 
| InstructionOperand* op = | 
| -        g.UseLocation(*iter, buffer->descriptor->GetInputLocation(index)); | 
| +        g.UseLocation(*iter, buffer->descriptor->GetInputLocation(index), | 
| +                      buffer->descriptor->GetInputType(index)); | 
| if (UnallocatedOperand::cast(op)->HasFixedSlotPolicy()) { | 
| int stack_index = -UnallocatedOperand::cast(op)->fixed_slot_index() - 1; | 
| if (static_cast<size_t>(stack_index) >= buffer->pushed_nodes.size()) { | 
| @@ -484,9 +488,8 @@ void InstructionSelector::VisitNode(Node* node) { | 
| case IrOpcode::kFinish: | 
| return VisitFinish(node); | 
| case IrOpcode::kParameter: { | 
| -      LinkageLocation location = | 
| -          linkage()->GetParameterLocation(OpParameter<int>(node)); | 
| -      MarkAsRepresentation(location.representation(), node); | 
| +      MachineType type = linkage()->GetParameterType(OpParameter<int>(node)); | 
| +      MarkAsRepresentation(type, node); | 
| return VisitParameter(node); | 
| } | 
| case IrOpcode::kPhi: | 
| @@ -822,8 +825,10 @@ void InstructionSelector::VisitFinish(Node* node) { | 
|  | 
| void InstructionSelector::VisitParameter(Node* node) { | 
| OperandGenerator g(this); | 
| -  Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetParameterLocation( | 
| -                                              OpParameter<int>(node)))); | 
| +  int index = OpParameter<int>(node); | 
| +  Emit(kArchNop, | 
| +       g.DefineAsLocation(node, linkage()->GetParameterLocation(index), | 
| +                          linkage()->GetParameterType(index))); | 
| } | 
|  | 
|  | 
| @@ -987,7 +992,8 @@ void InstructionSelector::VisitBranch(Node* branch, BasicBlock* tbranch, | 
| void InstructionSelector::VisitReturn(Node* value) { | 
| OperandGenerator g(this); | 
| if (value != NULL) { | 
| -    Emit(kArchRet, NULL, g.UseLocation(value, linkage()->GetReturnLocation())); | 
| +    Emit(kArchRet, NULL, g.UseLocation(value, linkage()->GetReturnLocation(), | 
| +                                       linkage()->GetReturnType())); | 
| } else { | 
| Emit(kArchRet, NULL); | 
| } | 
|  |