Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index 5bd9276c272d72a743d25b3749f47ae39858bdf2..1d2552e3915eb33f23d3eef38b5bc84fc821e9b0 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -1028,7 +1028,7 @@ void InstructionSelector::VisitThrow(Node* value) { |
FrameStateDescriptor* InstructionSelector::GetFrameStateDescriptor( |
Node* state) { |
DCHECK(state->opcode() == IrOpcode::kFrameState); |
- DCHECK_EQ(5, state->InputCount()); |
+ DCHECK_EQ(6, state->InputCount()); |
DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(0)->opcode()); |
DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(1)->opcode()); |
DCHECK_EQ(IrOpcode::kTypedStateValues, state->InputAt(2)->opcode()); |
@@ -1040,13 +1040,14 @@ FrameStateDescriptor* InstructionSelector::GetFrameStateDescriptor( |
int stack = static_cast<int>(StateValuesAccess(state->InputAt(2)).size()); |
FrameStateDescriptor* outer_state = NULL; |
- Node* outer_node = state->InputAt(4); |
+ Node* outer_node = state->InputAt(5); |
if (outer_node->opcode() == IrOpcode::kFrameState) { |
outer_state = GetFrameStateDescriptor(outer_node); |
} |
return new (instruction_zone()) FrameStateDescriptor( |
- instruction_zone(), state_info, parameters, locals, stack, outer_state); |
+ instruction_zone(), state_info.type(), state_info.bailout_id(), |
+ state_info.state_combine(), parameters, locals, stack, outer_state); |
} |
@@ -1068,14 +1069,15 @@ void InstructionSelector::AddFrameStateInputs( |
FrameStateDescriptor* descriptor) { |
DCHECK_EQ(IrOpcode::kFrameState, state->op()->opcode()); |
- if (descriptor->outer_state() != NULL) { |
- AddFrameStateInputs(state->InputAt(4), inputs, descriptor->outer_state()); |
+ if (descriptor->outer_state()) { |
+ AddFrameStateInputs(state->InputAt(5), inputs, descriptor->outer_state()); |
} |
Node* parameters = state->InputAt(0); |
Node* locals = state->InputAt(1); |
Node* stack = state->InputAt(2); |
Node* context = state->InputAt(3); |
+ Node* function = state->InputAt(4); |
DCHECK_EQ(IrOpcode::kTypedStateValues, parameters->op()->opcode()); |
DCHECK_EQ(IrOpcode::kTypedStateValues, locals->op()->opcode()); |
@@ -1091,6 +1093,8 @@ void InstructionSelector::AddFrameStateInputs( |
OperandGenerator g(this); |
size_t value_index = 0; |
+ inputs->push_back(SlotOrImmediate(&g, function)); |
+ descriptor->SetType(value_index++, kMachAnyTagged); |
for (StateValuesAccess::TypedNode input_node : |
StateValuesAccess(parameters)) { |
inputs->push_back(SlotOrImmediate(&g, input_node.node)); |