Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 1889b6917fed18623d8a5d406b034393ce96682e..2b48f7ded1a93d8aedf27291ba5f0dd480455593 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -434,6 +434,7 @@ InstructionOperand OperandForDeopt(OperandGenerator* g, Node* input, |
case IrOpcode::kHeapConstant: |
return g->UseImmediate(input); |
case IrOpcode::kObjectState: |
+ case IrOpcode::kTypedObjectState: |
UNREACHABLE(); |
break; |
default: |
@@ -485,6 +486,10 @@ size_t AddOperandToStateValueDescriptor(StateValueDescriptor* descriptor, |
FrameStateInputKind kind, Zone* zone) { |
switch (input->opcode()) { |
case IrOpcode::kObjectState: { |
+ UNREACHABLE(); |
+ return 0; |
+ } |
+ case IrOpcode::kTypedObjectState: { |
size_t id = deduplicator->GetObjectId(input); |
if (id == StateObjectDeduplicator::kNotDuplicated) { |
size_t entries = 0; |
@@ -492,10 +497,12 @@ size_t AddOperandToStateValueDescriptor(StateValueDescriptor* descriptor, |
descriptor->fields().push_back( |
StateValueDescriptor::Recursive(zone, id)); |
StateValueDescriptor* new_desc = &descriptor->fields().back(); |
- for (Edge edge : input->input_edges()) { |
+ int const input_count = input->op()->ValueInputCount(); |
+ ZoneVector<MachineType> const* types = MachineTypesOf(input->op()); |
+ for (int i = 0; i < input_count; ++i) { |
entries += AddOperandToStateValueDescriptor( |
- new_desc, inputs, g, deduplicator, edge.to(), |
- MachineType::AnyTagged(), kind, zone); |
+ new_desc, inputs, g, deduplicator, input->InputAt(i), |
+ types->at(i), kind, zone); |
} |
return entries; |
} else { |
@@ -506,7 +513,6 @@ size_t AddOperandToStateValueDescriptor(StateValueDescriptor* descriptor, |
StateValueDescriptor::Duplicate(zone, id)); |
return 0; |
} |
- break; |
} |
default: { |
inputs->push_back(OperandForDeopt(g, input, kind, type.representation())); |