| Index: src/compiler/instruction-selector.cc
|
| diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc
|
| index a530824f956199345d08a846f109c4fad79f70e1..fea6141423de70314820de248667c6d5d4f0397d 100644
|
| --- a/src/compiler/instruction-selector.cc
|
| +++ b/src/compiler/instruction-selector.cc
|
| @@ -296,10 +296,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));
|
| }
|
| }
|
| }
|
| @@ -323,7 +325,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());
|
| @@ -337,14 +340,15 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer,
|
| sequence()->AddFrameStateDescriptor(buffer->frame_state_descriptor);
|
| buffer->instruction_args.push_back(g.TempImmediate(state_id.ToInt()));
|
|
|
| - Node* frame_state = call->InputAt(buffer->descriptor->InputCount());
|
| + Node* frame_state =
|
| + call->InputAt(static_cast<int>(buffer->descriptor->InputCount()));
|
| AddFrameStateInputs(frame_state, &buffer->instruction_args,
|
| buffer->frame_state_descriptor);
|
| }
|
| - DCHECK_EQ(1 + buffer->frame_state_value_count(),
|
| - buffer->instruction_args.size());
|
| + DCHECK(1 + buffer->frame_state_value_count() ==
|
| + buffer->instruction_args.size());
|
|
|
| - int input_count = buffer->input_count();
|
| + size_t input_count = static_cast<size_t>(buffer->input_count());
|
|
|
| // Split the arguments into pushed_nodes and instruction_args. Pushed
|
| // arguments require an explicit push instruction before the call and do
|
| @@ -352,13 +356,14 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer,
|
| // as an InstructionOperand argument to the call.
|
| InputIter iter(call->inputs().begin());
|
| int pushed_count = 0;
|
| - for (int index = 0; index < input_count; ++iter, ++index) {
|
| + for (size_t index = 0; index < input_count; ++iter, ++index) {
|
| DCHECK(iter != call->inputs().end());
|
| - DCHECK(index == iter.index());
|
| + DCHECK(index == static_cast<size_t>(iter.index()));
|
| 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()) {
|
| @@ -482,9 +487,8 @@ void InstructionSelector::VisitNode(Node* node) {
|
| case IrOpcode::kFinish:
|
| return MarkAsReference(node), 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:
|
| @@ -820,8 +824,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)));
|
| }
|
|
|
|
|
| @@ -985,7 +991,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);
|
| }
|
|
|