Chromium Code Reviews| 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/compilation-dependencies.h" | 6 #include "src/compilation-dependencies.h" |
| 7 #include "src/compiler/access-builder.h" | 7 #include "src/compiler/access-builder.h" |
| 8 #include "src/compiler/js-graph.h" | 8 #include "src/compiler/js-graph.h" |
| 9 #include "src/compiler/js-typed-lowering.h" | 9 #include "src/compiler/js-typed-lowering.h" |
| 10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
| (...skipping 1709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1720 DCHECK_EQ(IrOpcode::kJSForInStep, node->opcode()); | 1720 DCHECK_EQ(IrOpcode::kJSForInStep, node->opcode()); |
| 1721 node->ReplaceInput(1, jsgraph()->Int32Constant(1)); | 1721 node->ReplaceInput(1, jsgraph()->Int32Constant(1)); |
| 1722 NodeProperties::ChangeOp(node, machine()->Int32Add()); | 1722 NodeProperties::ChangeOp(node, machine()->Int32Add()); |
| 1723 return Changed(node); | 1723 return Changed(node); |
| 1724 } | 1724 } |
| 1725 | 1725 |
| 1726 Reduction JSTypedLowering::ReduceJSGeneratorStore(Node* node) { | 1726 Reduction JSTypedLowering::ReduceJSGeneratorStore(Node* node) { |
| 1727 DCHECK_EQ(IrOpcode::kJSGeneratorStore, node->opcode()); | 1727 DCHECK_EQ(IrOpcode::kJSGeneratorStore, node->opcode()); |
| 1728 Node* generator = NodeProperties::GetValueInput(node, 0); | 1728 Node* generator = NodeProperties::GetValueInput(node, 0); |
| 1729 Node* continuation = NodeProperties::GetValueInput(node, 1); | 1729 Node* continuation = NodeProperties::GetValueInput(node, 1); |
| 1730 Node* offset = NodeProperties::GetValueInput(node, 2); | |
| 1730 Node* context = NodeProperties::GetContextInput(node); | 1731 Node* context = NodeProperties::GetContextInput(node); |
| 1731 Node* effect = NodeProperties::GetEffectInput(node); | 1732 Node* effect = NodeProperties::GetEffectInput(node); |
| 1732 Node* control = NodeProperties::GetControlInput(node); | 1733 Node* control = NodeProperties::GetControlInput(node); |
| 1733 int register_count = OpParameter<int>(node); | 1734 int register_count = OpParameter<int>(node); |
| 1734 | 1735 |
| 1735 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack(); | 1736 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack(); |
| 1736 FieldAccess context_field = AccessBuilder::ForJSGeneratorObjectContext(); | 1737 FieldAccess context_field = AccessBuilder::ForJSGeneratorObjectContext(); |
| 1737 FieldAccess continuation_field = | 1738 FieldAccess continuation_field = |
| 1738 AccessBuilder::ForJSGeneratorObjectContinuation(); | 1739 AccessBuilder::ForJSGeneratorObjectContinuation(); |
| 1740 FieldAccess input_field = AccessBuilder::ForJSGeneratorObjectInput(); | |
|
Jarin
2016/06/20 07:56:49
Please, add some explanation why it is ok to hijac
rmcilroy
2016/06/20 11:11:26
+1
| |
| 1739 | 1741 |
| 1740 Node* array = effect = graph()->NewNode(simplified()->LoadField(array_field), | 1742 Node* array = effect = graph()->NewNode(simplified()->LoadField(array_field), |
| 1741 generator, effect, control); | 1743 generator, effect, control); |
| 1742 | 1744 |
| 1743 for (int i = 0; i < register_count; ++i) { | 1745 for (int i = 0; i < register_count; ++i) { |
| 1744 Node* value = NodeProperties::GetValueInput(node, 2 + i); | 1746 Node* value = NodeProperties::GetValueInput(node, 3 + i); |
| 1745 effect = graph()->NewNode( | 1747 effect = graph()->NewNode( |
| 1746 simplified()->StoreField(AccessBuilder::ForFixedArraySlot(i)), array, | 1748 simplified()->StoreField(AccessBuilder::ForFixedArraySlot(i)), array, |
| 1747 value, effect, control); | 1749 value, effect, control); |
| 1748 } | 1750 } |
| 1749 | 1751 |
| 1750 effect = graph()->NewNode(simplified()->StoreField(context_field), generator, | 1752 effect = graph()->NewNode(simplified()->StoreField(context_field), generator, |
| 1751 context, effect, control); | 1753 context, effect, control); |
| 1752 effect = graph()->NewNode(simplified()->StoreField(continuation_field), | 1754 effect = graph()->NewNode(simplified()->StoreField(continuation_field), |
| 1753 generator, continuation, effect, control); | 1755 generator, continuation, effect, control); |
| 1756 effect = graph()->NewNode(simplified()->StoreField(input_field), generator, | |
| 1757 offset, effect, control); | |
| 1754 | 1758 |
| 1755 ReplaceWithValue(node, effect, effect, control); | 1759 ReplaceWithValue(node, effect, effect, control); |
| 1756 return Changed(effect); | 1760 return Changed(effect); |
| 1757 } | 1761 } |
| 1758 | 1762 |
| 1759 Reduction JSTypedLowering::ReduceJSGeneratorRestoreContinuation(Node* node) { | 1763 Reduction JSTypedLowering::ReduceJSGeneratorRestoreContinuation(Node* node) { |
| 1760 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreContinuation, node->opcode()); | 1764 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreContinuation, node->opcode()); |
| 1761 Node* generator = NodeProperties::GetValueInput(node, 0); | 1765 Node* generator = NodeProperties::GetValueInput(node, 0); |
| 1762 Node* effect = NodeProperties::GetEffectInput(node); | 1766 Node* effect = NodeProperties::GetEffectInput(node); |
| 1763 Node* control = NodeProperties::GetControlInput(node); | 1767 Node* control = NodeProperties::GetControlInput(node); |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1991 } | 1995 } |
| 1992 | 1996 |
| 1993 | 1997 |
| 1994 CompilationDependencies* JSTypedLowering::dependencies() const { | 1998 CompilationDependencies* JSTypedLowering::dependencies() const { |
| 1995 return dependencies_; | 1999 return dependencies_; |
| 1996 } | 2000 } |
| 1997 | 2001 |
| 1998 } // namespace compiler | 2002 } // namespace compiler |
| 1999 } // namespace internal | 2003 } // namespace internal |
| 2000 } // namespace v8 | 2004 } // namespace v8 |
| OLD | NEW |