Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 11d52cfeffca53ccb79ba09dd5eb30d75f5d431b..0d0314dda328d26c78b9bf3f5cf6fcd2c38d69c2 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -574,147 +574,6 @@ void InstructionSelector::VisitControl(BasicBlock* block) { |
} |
-MachineType InstructionSelector::GetMachineType(Node* node) { |
- DCHECK_NOT_NULL(schedule()->block(node)); // should only use scheduled nodes. |
- switch (node->opcode()) { |
- case IrOpcode::kStart: |
- case IrOpcode::kLoop: |
- case IrOpcode::kEnd: |
- case IrOpcode::kBranch: |
- case IrOpcode::kIfTrue: |
- case IrOpcode::kIfFalse: |
- case IrOpcode::kSwitch: |
- case IrOpcode::kIfValue: |
- case IrOpcode::kIfDefault: |
- case IrOpcode::kEffectPhi: |
- case IrOpcode::kEffectSet: |
- case IrOpcode::kMerge: |
- // No code needed for these graph artifacts. |
- return kMachNone; |
- case IrOpcode::kFinish: |
- return kMachAnyTagged; |
- case IrOpcode::kParameter: |
- return linkage()->GetParameterType(OpParameter<int>(node)); |
- case IrOpcode::kOsrValue: |
- return kMachAnyTagged; |
- case IrOpcode::kPhi: |
- return OpParameter<MachineType>(node); |
- case IrOpcode::kProjection: |
- // TODO(jarin) Really project from outputs. |
- return kMachAnyTagged; |
- case IrOpcode::kInt32Constant: |
- return kMachInt32; |
- case IrOpcode::kInt64Constant: |
- return kMachInt64; |
- case IrOpcode::kExternalConstant: |
- return kMachPtr; |
- case IrOpcode::kFloat64Constant: |
- return kMachFloat64; |
- case IrOpcode::kHeapConstant: |
- case IrOpcode::kNumberConstant: |
- return kMachAnyTagged; |
- case IrOpcode::kCall: |
- return kMachAnyTagged; |
- case IrOpcode::kFrameState: |
- case IrOpcode::kStateValues: |
- return kMachNone; |
- case IrOpcode::kLoad: |
- return OpParameter<LoadRepresentation>(node); |
- case IrOpcode::kStore: |
- return kMachNone; |
- case IrOpcode::kCheckedLoad: |
- return OpParameter<MachineType>(node); |
- case IrOpcode::kCheckedStore: |
- return kMachNone; |
- case IrOpcode::kWord32And: |
- case IrOpcode::kWord32Or: |
- case IrOpcode::kWord32Xor: |
- case IrOpcode::kWord32Shl: |
- case IrOpcode::kWord32Shr: |
- case IrOpcode::kWord32Sar: |
- case IrOpcode::kWord32Ror: |
- return kMachInt32; |
- case IrOpcode::kWord32Equal: |
- return kMachBool; |
- case IrOpcode::kWord64And: |
- case IrOpcode::kWord64Or: |
- case IrOpcode::kWord64Xor: |
- case IrOpcode::kWord64Shl: |
- case IrOpcode::kWord64Shr: |
- case IrOpcode::kWord64Sar: |
- case IrOpcode::kWord64Ror: |
- return kMachInt64; |
- case IrOpcode::kWord64Equal: |
- return kMachBool; |
- case IrOpcode::kInt32Add: |
- case IrOpcode::kInt32AddWithOverflow: |
- case IrOpcode::kInt32Sub: |
- case IrOpcode::kInt32SubWithOverflow: |
- case IrOpcode::kInt32Mul: |
- case IrOpcode::kInt32Div: |
- case IrOpcode::kInt32Mod: |
- return kMachInt32; |
- case IrOpcode::kInt32LessThan: |
- case IrOpcode::kInt32LessThanOrEqual: |
- case IrOpcode::kUint32LessThan: |
- case IrOpcode::kUint32LessThanOrEqual: |
- return kMachBool; |
- case IrOpcode::kInt64Add: |
- case IrOpcode::kInt64Sub: |
- case IrOpcode::kInt64Mul: |
- case IrOpcode::kInt64Div: |
- case IrOpcode::kInt64Mod: |
- return kMachInt64; |
- case IrOpcode::kInt64LessThan: |
- case IrOpcode::kInt64LessThanOrEqual: |
- return kMachBool; |
- case IrOpcode::kChangeFloat32ToFloat64: |
- case IrOpcode::kChangeInt32ToFloat64: |
- case IrOpcode::kChangeUint32ToFloat64: |
- return kMachFloat64; |
- case IrOpcode::kChangeFloat64ToInt32: |
- return kMachInt32; |
- case IrOpcode::kChangeFloat64ToUint32: |
- return kMachUint32; |
- case IrOpcode::kChangeInt32ToInt64: |
- return kMachInt64; |
- case IrOpcode::kChangeUint32ToUint64: |
- return kMachUint64; |
- case IrOpcode::kTruncateFloat64ToFloat32: |
- return kMachFloat32; |
- case IrOpcode::kTruncateFloat64ToInt32: |
- case IrOpcode::kTruncateInt64ToInt32: |
- return kMachInt32; |
- case IrOpcode::kFloat64Add: |
- case IrOpcode::kFloat64Sub: |
- case IrOpcode::kFloat64Mul: |
- case IrOpcode::kFloat64Div: |
- case IrOpcode::kFloat64Mod: |
- case IrOpcode::kFloat64Max: |
- case IrOpcode::kFloat64Min: |
- case IrOpcode::kFloat64Sqrt: |
- case IrOpcode::kFloat64RoundDown: |
- case IrOpcode::kFloat64RoundTruncate: |
- case IrOpcode::kFloat64RoundTiesAway: |
- return kMachFloat64; |
- case IrOpcode::kFloat64Equal: |
- case IrOpcode::kFloat64LessThan: |
- case IrOpcode::kFloat64LessThanOrEqual: |
- return kMachBool; |
- case IrOpcode::kFloat64ExtractLowWord32: |
- case IrOpcode::kFloat64ExtractHighWord32: |
- return kMachInt32; |
- case IrOpcode::kFloat64InsertLowWord32: |
- case IrOpcode::kFloat64InsertHighWord32: |
- return kMachFloat64; |
- default: |
- V8_Fatal(__FILE__, __LINE__, "Unexpected operator #%d:%s @ node #%d", |
- node->opcode(), node->op()->mnemonic(), node->id()); |
- } |
- return kMachNone; |
-} |
- |
- |
void InstructionSelector::VisitNode(Node* node) { |
DCHECK_NOT_NULL(schedule()->block(node)); // should only use scheduled nodes. |
SourcePosition source_position = source_positions_->GetSourcePosition(node); |
@@ -1149,9 +1008,9 @@ FrameStateDescriptor* InstructionSelector::GetFrameStateDescriptor( |
Node* state) { |
DCHECK(state->opcode() == IrOpcode::kFrameState); |
DCHECK_EQ(5, state->InputCount()); |
- DCHECK_EQ(IrOpcode::kStateValues, state->InputAt(0)->opcode()); |
- DCHECK_EQ(IrOpcode::kStateValues, state->InputAt(1)->opcode()); |
- DCHECK_EQ(IrOpcode::kStateValues, state->InputAt(2)->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(0)->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(1)->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(2)->opcode()); |
FrameStateCallInfo state_info = OpParameter<FrameStateCallInfo>(state); |
int parameters = |
@@ -1197,9 +1056,9 @@ void InstructionSelector::AddFrameStateInputs( |
Node* stack = state->InputAt(2); |
Node* context = state->InputAt(3); |
- DCHECK_EQ(IrOpcode::kStateValues, parameters->op()->opcode()); |
- DCHECK_EQ(IrOpcode::kStateValues, locals->op()->opcode()); |
- DCHECK_EQ(IrOpcode::kStateValues, stack->op()->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, parameters->op()->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, locals->op()->opcode()); |
+ DCHECK_EQ(IrOpcode::kTypedStateValues, stack->op()->opcode()); |
DCHECK_EQ(descriptor->parameters_count(), |
StateValuesAccess(parameters).size()); |
@@ -1211,21 +1070,22 @@ void InstructionSelector::AddFrameStateInputs( |
OperandGenerator g(this); |
size_t value_index = 0; |
- for (Node* input_node : StateValuesAccess(parameters)) { |
- inputs->push_back(UseOrImmediate(&g, input_node)); |
- descriptor->SetType(value_index++, GetMachineType(input_node)); |
+ for (StateValuesAccess::TypedNode input_node : |
+ StateValuesAccess(parameters)) { |
+ inputs->push_back(UseOrImmediate(&g, input_node.node)); |
+ descriptor->SetType(value_index++, input_node.type); |
} |
if (descriptor->HasContext()) { |
inputs->push_back(UseOrImmediate(&g, context)); |
descriptor->SetType(value_index++, kMachAnyTagged); |
} |
- for (Node* input_node : StateValuesAccess(locals)) { |
- inputs->push_back(UseOrImmediate(&g, input_node)); |
- descriptor->SetType(value_index++, GetMachineType(input_node)); |
+ for (StateValuesAccess::TypedNode input_node : StateValuesAccess(locals)) { |
+ inputs->push_back(UseOrImmediate(&g, input_node.node)); |
+ descriptor->SetType(value_index++, input_node.type); |
} |
- for (Node* input_node : StateValuesAccess(stack)) { |
- inputs->push_back(UseOrImmediate(&g, input_node)); |
- descriptor->SetType(value_index++, GetMachineType(input_node)); |
+ for (StateValuesAccess::TypedNode input_node : StateValuesAccess(stack)) { |
+ inputs->push_back(UseOrImmediate(&g, input_node.node)); |
+ descriptor->SetType(value_index++, input_node.type); |
} |
DCHECK(value_index == descriptor->GetSize()); |
} |