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/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 8 #include "src/compiler/ast-loop-assignment-analyzer.h" |
9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
10 #include "src/compiler/js-type-feedback.h" | 10 #include "src/compiler/js-type-feedback.h" |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 : builder_->environment()->Checkpoint(id_before); | 396 : builder_->environment()->Checkpoint(id_before); |
397 } | 397 } |
398 | 398 |
399 void AddToNode(Node* node, BailoutId id_after, | 399 void AddToNode(Node* node, BailoutId id_after, |
400 OutputFrameStateCombine combine) { | 400 OutputFrameStateCombine combine) { |
401 int count = OperatorProperties::GetFrameStateInputCount(node->op()); | 401 int count = OperatorProperties::GetFrameStateInputCount(node->op()); |
402 DCHECK_LE(count, 2); | 402 DCHECK_LE(count, 2); |
403 | 403 |
404 if (count >= 1) { | 404 if (count >= 1) { |
405 // Add the frame state for after the operation. | 405 // Add the frame state for after the operation. |
406 DCHECK_EQ(IrOpcode::kDeadValue, | 406 DCHECK_EQ(IrOpcode::kDead, |
407 NodeProperties::GetFrameStateInput(node, 0)->opcode()); | 407 NodeProperties::GetFrameStateInput(node, 0)->opcode()); |
408 | 408 |
409 Node* frame_state_after = | 409 Node* frame_state_after = |
410 id_after == BailoutId::None() | 410 id_after == BailoutId::None() |
411 ? builder_->jsgraph()->EmptyFrameState() | 411 ? builder_->jsgraph()->EmptyFrameState() |
412 : builder_->environment()->Checkpoint(id_after, combine); | 412 : builder_->environment()->Checkpoint(id_after, combine); |
413 | 413 |
414 NodeProperties::ReplaceFrameStateInput(node, 0, frame_state_after); | 414 NodeProperties::ReplaceFrameStateInput(node, 0, frame_state_after); |
415 } | 415 } |
416 | 416 |
417 if (count >= 2) { | 417 if (count >= 2) { |
418 // Add the frame state for before the operation. | 418 // Add the frame state for before the operation. |
419 DCHECK_EQ(IrOpcode::kDeadValue, | 419 DCHECK_EQ(IrOpcode::kDead, |
420 NodeProperties::GetFrameStateInput(node, 1)->opcode()); | 420 NodeProperties::GetFrameStateInput(node, 1)->opcode()); |
421 NodeProperties::ReplaceFrameStateInput(node, 1, frame_state_before_); | 421 NodeProperties::ReplaceFrameStateInput(node, 1, frame_state_before_); |
422 } | 422 } |
423 } | 423 } |
424 | 424 |
425 private: | 425 private: |
426 AstGraphBuilder* builder_; | 426 AstGraphBuilder* builder_; |
427 Node* frame_state_before_; | 427 Node* frame_state_before_; |
428 }; | 428 }; |
429 | 429 |
(...skipping 3324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3754 return true; | 3754 return true; |
3755 } | 3755 } |
3756 return false; | 3756 return false; |
3757 } | 3757 } |
3758 | 3758 |
3759 | 3759 |
3760 void AstGraphBuilder::PrepareFrameState(Node* node, BailoutId ast_id, | 3760 void AstGraphBuilder::PrepareFrameState(Node* node, BailoutId ast_id, |
3761 OutputFrameStateCombine combine) { | 3761 OutputFrameStateCombine combine) { |
3762 if (OperatorProperties::GetFrameStateInputCount(node->op()) > 0) { | 3762 if (OperatorProperties::GetFrameStateInputCount(node->op()) > 0) { |
3763 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); | 3763 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); |
3764 DCHECK_EQ(IrOpcode::kDeadValue, | 3764 |
| 3765 DCHECK_EQ(IrOpcode::kDead, |
3765 NodeProperties::GetFrameStateInput(node, 0)->opcode()); | 3766 NodeProperties::GetFrameStateInput(node, 0)->opcode()); |
3766 NodeProperties::ReplaceFrameStateInput( | 3767 NodeProperties::ReplaceFrameStateInput( |
3767 node, 0, environment()->Checkpoint(ast_id, combine)); | 3768 node, 0, environment()->Checkpoint(ast_id, combine)); |
3768 } | 3769 } |
3769 } | 3770 } |
3770 | 3771 |
3771 | 3772 |
3772 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop( | 3773 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop( |
3773 IterationStatement* stmt) { | 3774 IterationStatement* stmt) { |
3774 if (loop_assignment_analysis_ == NULL) return NULL; | 3775 if (loop_assignment_analysis_ == NULL) return NULL; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3809 if (has_control) ++input_count_with_deps; | 3810 if (has_control) ++input_count_with_deps; |
3810 if (has_effect) ++input_count_with_deps; | 3811 if (has_effect) ++input_count_with_deps; |
3811 Node** buffer = EnsureInputBufferSize(input_count_with_deps); | 3812 Node** buffer = EnsureInputBufferSize(input_count_with_deps); |
3812 memcpy(buffer, value_inputs, kPointerSize * value_input_count); | 3813 memcpy(buffer, value_inputs, kPointerSize * value_input_count); |
3813 Node** current_input = buffer + value_input_count; | 3814 Node** current_input = buffer + value_input_count; |
3814 if (has_context) { | 3815 if (has_context) { |
3815 *current_input++ = current_context(); | 3816 *current_input++ = current_context(); |
3816 } | 3817 } |
3817 for (int i = 0; i < frame_state_count; i++) { | 3818 for (int i = 0; i < frame_state_count; i++) { |
3818 // The frame state will be inserted later. Here we misuse | 3819 // The frame state will be inserted later. Here we misuse |
3819 // the {DeadValue} node as a sentinel to be later overwritten | 3820 // the {Dead} node as a sentinel to be later overwritten |
3820 // with the real frame state. | 3821 // with the real frame state. |
3821 *current_input++ = jsgraph()->DeadValue(); | 3822 *current_input++ = jsgraph()->Dead(); |
3822 } | 3823 } |
3823 if (has_effect) { | 3824 if (has_effect) { |
3824 *current_input++ = environment_->GetEffectDependency(); | 3825 *current_input++ = environment_->GetEffectDependency(); |
3825 } | 3826 } |
3826 if (has_control) { | 3827 if (has_control) { |
3827 *current_input++ = environment_->GetControlDependency(); | 3828 *current_input++ = environment_->GetControlDependency(); |
3828 } | 3829 } |
3829 result = graph()->NewNode(op, input_count_with_deps, buffer, incomplete); | 3830 result = graph()->NewNode(op, input_count_with_deps, buffer, incomplete); |
3830 if (!environment()->IsMarkedAsUnreachable()) { | 3831 if (!environment()->IsMarkedAsUnreachable()) { |
3831 // Update the current control dependency for control-producing nodes. | 3832 // Update the current control dependency for control-producing nodes. |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4078 // Phi does not exist yet, introduce one. | 4079 // Phi does not exist yet, introduce one. |
4079 value = NewPhi(inputs, value, control); | 4080 value = NewPhi(inputs, value, control); |
4080 value->ReplaceInput(inputs - 1, other); | 4081 value->ReplaceInput(inputs - 1, other); |
4081 } | 4082 } |
4082 return value; | 4083 return value; |
4083 } | 4084 } |
4084 | 4085 |
4085 } // namespace compiler | 4086 } // namespace compiler |
4086 } // namespace internal | 4087 } // namespace internal |
4087 } // namespace v8 | 4088 } // namespace v8 |
OLD | NEW |