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); |
} |