OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/code-factory.h" | 5 #include "src/code-factory.h" |
6 #include "src/compiler/access-builder.h" | 6 #include "src/compiler/access-builder.h" |
7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
8 #include "src/compiler/js-typed-lowering.h" | 8 #include "src/compiler/js-typed-lowering.h" |
9 #include "src/compiler/linkage.h" | 9 #include "src/compiler/linkage.h" |
10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 if (state_info.state_combine().kind() == OutputFrameStateCombine::kPokeAt && | 255 if (state_info.state_combine().kind() == OutputFrameStateCombine::kPokeAt && |
256 state_info.state_combine().GetOffsetToPokeAt() == 1) { | 256 state_info.state_combine().GetOffsetToPokeAt() == 1) { |
257 return frame_state; | 257 return frame_state; |
258 } | 258 } |
259 | 259 |
260 // Here, we smash the result of the conversion into the slot just below | 260 // Here, we smash the result of the conversion into the slot just below |
261 // the stack top. This is the slot that full code uses to store the | 261 // the stack top. This is the slot that full code uses to store the |
262 // left operand. | 262 // left operand. |
263 const Operator* op = jsgraph()->common()->FrameState( | 263 const Operator* op = jsgraph()->common()->FrameState( |
264 state_info.type(), state_info.bailout_id(), | 264 state_info.type(), state_info.bailout_id(), |
265 OutputFrameStateCombine::PokeAt(1)); | 265 OutputFrameStateCombine::PokeAt(1), state_info.shared_info()); |
266 | 266 |
267 return graph()->NewNode(op, | 267 return graph()->NewNode(op, |
268 frame_state->InputAt(kFrameStateParametersInput), | 268 frame_state->InputAt(kFrameStateParametersInput), |
269 frame_state->InputAt(kFrameStateLocalsInput), | 269 frame_state->InputAt(kFrameStateLocalsInput), |
270 frame_state->InputAt(kFrameStateStackInput), | 270 frame_state->InputAt(kFrameStateStackInput), |
271 frame_state->InputAt(kFrameStateContextInput), | 271 frame_state->InputAt(kFrameStateContextInput), |
272 frame_state->InputAt(kFrameStateFunctionInput), | 272 frame_state->InputAt(kFrameStateFunctionInput), |
273 frame_state->InputAt(kFrameStateOuterStateInput)); | 273 frame_state->InputAt(kFrameStateOuterStateInput)); |
274 } | 274 } |
275 | 275 |
276 Node* CreateFrameStateForRightInput(Node* frame_state, Node* converted_left) { | 276 Node* CreateFrameStateForRightInput(Node* frame_state, Node* converted_left) { |
277 FrameStateCallInfo state_info = | 277 FrameStateCallInfo state_info = |
278 OpParameter<FrameStateCallInfo>(frame_state); | 278 OpParameter<FrameStateCallInfo>(frame_state); |
279 | 279 |
280 if (state_info.bailout_id() == BailoutId::None()) { | 280 if (state_info.bailout_id() == BailoutId::None()) { |
281 // Dummy frame state => just leave it as is. | 281 // Dummy frame state => just leave it as is. |
282 return frame_state; | 282 return frame_state; |
283 } | 283 } |
284 | 284 |
285 // Create a frame state that stores the result of the operation to the | 285 // Create a frame state that stores the result of the operation to the |
286 // top of the stack (i.e., the slot used for the right operand). | 286 // top of the stack (i.e., the slot used for the right operand). |
287 const Operator* op = jsgraph()->common()->FrameState( | 287 const Operator* op = jsgraph()->common()->FrameState( |
288 state_info.type(), state_info.bailout_id(), | 288 state_info.type(), state_info.bailout_id(), |
289 OutputFrameStateCombine::PokeAt(0)); | 289 OutputFrameStateCombine::PokeAt(0), state_info.shared_info()); |
290 | 290 |
291 // Change the left operand {converted_left} on the expression stack. | 291 // Change the left operand {converted_left} on the expression stack. |
292 Node* stack = frame_state->InputAt(2); | 292 Node* stack = frame_state->InputAt(2); |
293 DCHECK_EQ(stack->opcode(), IrOpcode::kStateValues); | 293 DCHECK_EQ(stack->opcode(), IrOpcode::kStateValues); |
294 DCHECK_GE(stack->InputCount(), 2); | 294 DCHECK_GE(stack->InputCount(), 2); |
295 | 295 |
296 // TODO(jarin) Allocate in a local zone or a reusable buffer. | 296 // TODO(jarin) Allocate in a local zone or a reusable buffer. |
297 NodeVector new_values(stack->InputCount(), zone()); | 297 NodeVector new_values(stack->InputCount(), zone()); |
298 for (int i = 0; i < stack->InputCount(); i++) { | 298 for (int i = 0; i < stack->InputCount(); i++) { |
299 if (i == stack->InputCount() - 2) { | 299 if (i == stack->InputCount() - 2) { |
(...skipping 1312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1612 } | 1612 } |
1613 | 1613 |
1614 | 1614 |
1615 MachineOperatorBuilder* JSTypedLowering::machine() const { | 1615 MachineOperatorBuilder* JSTypedLowering::machine() const { |
1616 return jsgraph()->machine(); | 1616 return jsgraph()->machine(); |
1617 } | 1617 } |
1618 | 1618 |
1619 } // namespace compiler | 1619 } // namespace compiler |
1620 } // namespace internal | 1620 } // namespace internal |
1621 } // namespace v8 | 1621 } // namespace v8 |
OLD | NEW |