Index: src/compiler/js-typed-lowering.cc |
diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc |
index 23475c4b739c0165ec9f1763082987ea4e7ff007..1227e4f08cb6dd60654ac8dc2976ce8ceb25fb28 100644 |
--- a/src/compiler/js-typed-lowering.cc |
+++ b/src/compiler/js-typed-lowering.cc |
@@ -31,7 +31,7 @@ class JSBinopReduction final { |
if (lowering_->flags() & JSTypedLowering::kDeoptimizationEnabled) { |
DCHECK_NE(0, node_->op()->ControlOutputCount()); |
DCHECK_EQ(1, node_->op()->EffectOutputCount()); |
- DCHECK_LE(1, OperatorProperties::GetFrameStateInputCount(node_->op())); |
+ DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node_->op())); |
BinaryOperationHints hints = BinaryOperationHintsOf(node_->op()); |
BinaryOperationHints::Hint combined = hints.combined(); |
if (combined == BinaryOperationHints::kSignedSmall || |
@@ -151,7 +151,7 @@ class JSBinopReduction final { |
DCHECK_EQ(1, node_->op()->EffectOutputCount()); |
DCHECK_EQ(1, node_->op()->ControlInputCount()); |
DCHECK_LT(1, node_->op()->ControlOutputCount()); |
- DCHECK_LE(1, OperatorProperties::GetFrameStateInputCount(node_->op())); |
+ DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node_->op())); |
DCHECK_EQ(2, node_->op()->ValueInputCount()); |
// Reconnect the control output to bypass the IfSuccess node and |
@@ -170,10 +170,7 @@ class JSBinopReduction final { |
} |
} |
- // Remove both bailout frame states and the context. |
- if (OperatorProperties::GetFrameStateInputCount(node_->op()) == 2) { |
- node_->RemoveInput(NodeProperties::FirstFrameStateIndex(node_) + 1); |
- } |
+ // Remove the frame state and the context. |
node_->RemoveInput(NodeProperties::FirstFrameStateIndex(node_)); |
node_->RemoveInput(NodeProperties::FirstContextIndex(node_)); |
@@ -227,88 +224,17 @@ class JSBinopReduction final { |
Node* node_; // The original node. |
Node* CreateFrameStateForLeftInput() { |
- if (OperatorProperties::GetFrameStateInputCount(node_->op()) < 2) { |
- // Deoptimization is disabled => return dummy frame state instead. |
- Node* dummy_state = NodeProperties::GetFrameStateInput(node_, 0); |
- DCHECK(OpParameter<FrameStateInfo>(dummy_state).bailout_id().IsNone()); |
- return dummy_state; |
- } |
- |
- Node* frame_state = NodeProperties::GetFrameStateInput(node_, 1); |
- FrameStateInfo state_info = OpParameter<FrameStateInfo>(frame_state); |
- |
- if (state_info.bailout_id() == BailoutId::None()) { |
- // Dummy frame state => just leave it as is. |
- return frame_state; |
- } |
- |
- // If the frame state is already the right one, just return it. |
- if (state_info.state_combine().kind() == OutputFrameStateCombine::kPokeAt && |
- state_info.state_combine().GetOffsetToPokeAt() == 1) { |
- return frame_state; |
- } |
- |
- // Here, we smash the result of the conversion into the slot just below |
- // the stack top. This is the slot that full code uses to store the |
- // left operand. |
- const Operator* op = jsgraph()->common()->FrameState( |
- state_info.bailout_id(), OutputFrameStateCombine::PokeAt(1), |
- state_info.function_info()); |
- |
- return graph()->NewNode(op, |
- frame_state->InputAt(kFrameStateParametersInput), |
- frame_state->InputAt(kFrameStateLocalsInput), |
- frame_state->InputAt(kFrameStateStackInput), |
- frame_state->InputAt(kFrameStateContextInput), |
- frame_state->InputAt(kFrameStateFunctionInput), |
- frame_state->InputAt(kFrameStateOuterStateInput)); |
+ // Deoptimization is disabled => return dummy frame state instead. |
+ Node* dummy_state = NodeProperties::GetFrameStateInput(node_); |
+ DCHECK(OpParameter<FrameStateInfo>(dummy_state).bailout_id().IsNone()); |
+ return dummy_state; |
} |
Node* CreateFrameStateForRightInput(Node* converted_left) { |
- if (OperatorProperties::GetFrameStateInputCount(node_->op()) < 2) { |
- // Deoptimization is disabled => return dummy frame state instead. |
- Node* dummy_state = NodeProperties::GetFrameStateInput(node_, 0); |
- DCHECK(OpParameter<FrameStateInfo>(dummy_state).bailout_id().IsNone()); |
- return dummy_state; |
- } |
- |
- Node* frame_state = NodeProperties::GetFrameStateInput(node_, 1); |
- FrameStateInfo state_info = OpParameter<FrameStateInfo>(frame_state); |
- |
- if (state_info.bailout_id() == BailoutId::None()) { |
- // Dummy frame state => just leave it as is. |
- return frame_state; |
- } |
- |
- // Create a frame state that stores the result of the operation to the |
- // top of the stack (i.e., the slot used for the right operand). |
- const Operator* op = jsgraph()->common()->FrameState( |
- state_info.bailout_id(), OutputFrameStateCombine::PokeAt(0), |
- state_info.function_info()); |
- |
- // Change the left operand {converted_left} on the expression stack. |
- Node* stack = frame_state->InputAt(2); |
- DCHECK_EQ(stack->opcode(), IrOpcode::kStateValues); |
- DCHECK_GE(stack->InputCount(), 2); |
- |
- // TODO(jarin) Allocate in a local zone or a reusable buffer. |
- NodeVector new_values(stack->InputCount(), zone()); |
- for (int i = 0; i < stack->InputCount(); i++) { |
- if (i == stack->InputCount() - 2) { |
- new_values[i] = converted_left; |
- } else { |
- new_values[i] = stack->InputAt(i); |
- } |
- } |
- Node* new_stack = |
- graph()->NewNode(stack->op(), stack->InputCount(), &new_values.front()); |
- |
- return graph()->NewNode( |
- op, frame_state->InputAt(kFrameStateParametersInput), |
- frame_state->InputAt(kFrameStateLocalsInput), new_stack, |
- frame_state->InputAt(kFrameStateContextInput), |
- frame_state->InputAt(kFrameStateFunctionInput), |
- frame_state->InputAt(kFrameStateOuterStateInput)); |
+ // Deoptimization is disabled => return dummy frame state instead. |
+ Node* dummy_state = NodeProperties::GetFrameStateInput(node_); |
+ DCHECK(OpParameter<FrameStateInfo>(dummy_state).bailout_id().IsNone()); |
+ return dummy_state; |
} |
Node* ConvertPlainPrimitiveToNumber(Node* node) { |
@@ -1034,7 +960,7 @@ Reduction JSTypedLowering::ReduceJSToObject(Node* node) { |
Node* receiver = NodeProperties::GetValueInput(node, 0); |
Type* receiver_type = NodeProperties::GetType(receiver); |
Node* context = NodeProperties::GetContextInput(node); |
- Node* frame_state = NodeProperties::GetFrameStateInput(node, 0); |
+ Node* frame_state = NodeProperties::GetFrameStateInput(node); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
if (receiver_type->Is(Type::Receiver())) { |
@@ -1236,7 +1162,7 @@ Reduction JSTypedLowering::ReduceJSStoreProperty(Node* node) { |
Reduction JSTypedLowering::ReduceJSInstanceOf(Node* node) { |
DCHECK_EQ(IrOpcode::kJSInstanceOf, node->opcode()); |
Node* const context = NodeProperties::GetContextInput(node); |
- Node* const frame_state = NodeProperties::GetFrameStateInput(node, 0); |
+ Node* const frame_state = NodeProperties::GetFrameStateInput(node); |
// If deoptimization is disabled, we cannot optimize. |
if (!(flags() & kDeoptimizationEnabled)) return NoChange(); |
@@ -1457,7 +1383,7 @@ Reduction JSTypedLowering::ReduceJSConvertReceiver(Node* node) { |
Type* receiver_type = NodeProperties::GetType(receiver); |
Node* context = NodeProperties::GetContextInput(node); |
Type* context_type = NodeProperties::GetType(context); |
- Node* frame_state = NodeProperties::GetFrameStateInput(node, 0); |
+ Node* frame_state = NodeProperties::GetFrameStateInput(node); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
if (!receiver_type->Is(Type::Receiver())) { |
@@ -1731,7 +1657,7 @@ Reduction JSTypedLowering::ReduceJSForInNext(Node* node) { |
Node* cache_type = NodeProperties::GetValueInput(node, 2); |
Node* index = NodeProperties::GetValueInput(node, 3); |
Node* context = NodeProperties::GetContextInput(node); |
- Node* frame_state = NodeProperties::GetFrameStateInput(node, 0); |
+ Node* frame_state = NodeProperties::GetFrameStateInput(node); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |