Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: src/compiler/js-typed-lowering.cc

Issue 1997373002: [turbofan] Simplify typed lowering of generator-related operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1615 matching lines...) Expand 10 before | Expand all | Expand 10 after
1626 Reduction JSTypedLowering::ReduceJSForInStep(Node* node) { 1626 Reduction JSTypedLowering::ReduceJSForInStep(Node* node) {
1627 DCHECK_EQ(IrOpcode::kJSForInStep, node->opcode()); 1627 DCHECK_EQ(IrOpcode::kJSForInStep, node->opcode());
1628 node->ReplaceInput(1, jsgraph()->Int32Constant(1)); 1628 node->ReplaceInput(1, jsgraph()->Int32Constant(1));
1629 NodeProperties::ChangeOp(node, machine()->Int32Add()); 1629 NodeProperties::ChangeOp(node, machine()->Int32Add());
1630 return Changed(node); 1630 return Changed(node);
1631 } 1631 }
1632 1632
1633 Reduction JSTypedLowering::ReduceJSGeneratorStore(Node* node) { 1633 Reduction JSTypedLowering::ReduceJSGeneratorStore(Node* node) {
1634 DCHECK_EQ(IrOpcode::kJSGeneratorStore, node->opcode()); 1634 DCHECK_EQ(IrOpcode::kJSGeneratorStore, node->opcode());
1635 Node* generator = NodeProperties::GetValueInput(node, 0); 1635 Node* generator = NodeProperties::GetValueInput(node, 0);
1636 Node* continuation = NodeProperties::GetValueInput(node, 1);
1636 Node* context = NodeProperties::GetContextInput(node); 1637 Node* context = NodeProperties::GetContextInput(node);
1637 Node* effect = NodeProperties::GetEffectInput(node); 1638 Node* effect = NodeProperties::GetEffectInput(node);
1638 Node* control = NodeProperties::GetControlInput(node); 1639 Node* control = NodeProperties::GetControlInput(node);
1639 int register_count = OpParameter<int>(node); 1640 int register_count = OpParameter<int>(node);
1640 1641
1641 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack(); 1642 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack();
1642 FieldAccess context_field = AccessBuilder::ForJSGeneratorObjectContext(); 1643 FieldAccess context_field = AccessBuilder::ForJSGeneratorObjectContext();
1643 FieldAccess continuation_field = 1644 FieldAccess continuation_field =
1644 AccessBuilder::ForJSGeneratorObjectContinuation(); 1645 AccessBuilder::ForJSGeneratorObjectContinuation();
1645 1646
1646 Node* array = graph()->NewNode(simplified()->LoadField(array_field), 1647 Node* array = effect = graph()->NewNode(simplified()->LoadField(array_field),
1647 generator, effect, control); 1648 generator, effect, control);
1648 1649
1649 for (int i = 0; i < register_count; ++i) { 1650 for (int i = 0; i < register_count; ++i) {
1650 Node* value = NodeProperties::GetValueInput(node, 2 + i); 1651 Node* value = NodeProperties::GetValueInput(node, 2 + i);
1651 effect = graph()->NewNode( 1652 effect = graph()->NewNode(
1652 simplified()->StoreField(AccessBuilder::ForFixedArraySlot(i)), array, 1653 simplified()->StoreField(AccessBuilder::ForFixedArraySlot(i)), array,
1653 value, effect, control); 1654 value, effect, control);
1654 } 1655 }
1655 1656
1656 effect = graph()->NewNode(simplified()->StoreField(context_field), generator, 1657 effect = graph()->NewNode(simplified()->StoreField(context_field), generator,
1657 context, effect, control); 1658 context, effect, control);
1659 effect = graph()->NewNode(simplified()->StoreField(continuation_field),
1660 generator, continuation, effect, control);
1658 1661
1659 // Change the JSGeneratorStore node to a StoreField node. 1662 ReplaceWithValue(node, effect, effect, control);
1660 DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(node->op())); 1663 return Changed(effect);
1661 DCHECK_EQ(1, OperatorProperties::GetContextInputCount(node->op()));
1662 node->RemoveInput(NodeProperties::FirstContextIndex(node));
1663 for (int i = 0; i < register_count; ++i) {
1664 node->RemoveInput(NodeProperties::FirstValueIndex(node) + 2);
1665 }
1666 NodeProperties::RemoveType(node);
1667 NodeProperties::ChangeOp(node, simplified()->StoreField(continuation_field));
1668
1669 NodeProperties::ReplaceEffectInput(node, effect);
1670
1671 return Changed(node);
1672 } 1664 }
1673 1665
1674 Reduction JSTypedLowering::ReduceJSGeneratorRestoreContinuation(Node* node) { 1666 Reduction JSTypedLowering::ReduceJSGeneratorRestoreContinuation(Node* node) {
1675 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreContinuation, node->opcode()); 1667 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreContinuation, node->opcode());
1676 Node* generator = NodeProperties::GetValueInput(node, 0); 1668 Node* generator = NodeProperties::GetValueInput(node, 0);
1677 Node* effect = NodeProperties::GetEffectInput(node); 1669 Node* effect = NodeProperties::GetEffectInput(node);
1678 Node* control = NodeProperties::GetControlInput(node); 1670 Node* control = NodeProperties::GetControlInput(node);
1679 1671
1680 FieldAccess continuation_field = 1672 FieldAccess continuation_field =
1681 AccessBuilder::ForJSGeneratorObjectContinuation(); 1673 AccessBuilder::ForJSGeneratorObjectContinuation();
1682 1674
1683 Node* continuation = graph()->NewNode( 1675 Node* continuation = effect = graph()->NewNode(
1684 simplified()->LoadField(continuation_field), generator, effect, control); 1676 simplified()->LoadField(continuation_field), generator, effect, control);
1677 Node* executing = jsgraph()->Constant(JSGeneratorObject::kGeneratorExecuting);
1678 effect = graph()->NewNode(simplified()->StoreField(continuation_field),
1679 generator, executing, effect, control);
1685 1680
1686 // Change the JSGeneratorRestoreContinuation node to a StoreField node. 1681 ReplaceWithValue(node, continuation, effect, control);
1687 DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(node->op())); 1682 return Changed(continuation);
1688 DCHECK_EQ(1, OperatorProperties::GetContextInputCount(node->op()));
1689 node->RemoveInput(NodeProperties::FirstContextIndex(node));
1690 node->InsertInput(
1691 graph()->zone(), 1,
1692 jsgraph()->Constant(JSGeneratorObject::kGeneratorExecuting));
1693 NodeProperties::RemoveType(node);
1694 NodeProperties::ChangeOp(node, simplified()->StoreField(continuation_field));
1695
1696 NodeProperties::ReplaceEffectInput(node, continuation);
1697 ReplaceWithValue(node, continuation, node, control);
1698
1699 return Changed(node);
1700 } 1683 }
1701 1684
1702 Reduction JSTypedLowering::ReduceJSGeneratorRestoreRegister(Node* node) { 1685 Reduction JSTypedLowering::ReduceJSGeneratorRestoreRegister(Node* node) {
1703 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreRegister, node->opcode()); 1686 DCHECK_EQ(IrOpcode::kJSGeneratorRestoreRegister, node->opcode());
1704 Node* generator = NodeProperties::GetValueInput(node, 0); 1687 Node* generator = NodeProperties::GetValueInput(node, 0);
1705 Node* effect = NodeProperties::GetEffectInput(node); 1688 Node* effect = NodeProperties::GetEffectInput(node);
1706 Node* control = NodeProperties::GetControlInput(node); 1689 Node* control = NodeProperties::GetControlInput(node);
1707 int index = OpParameter<int>(node); 1690 int index = OpParameter<int>(node);
1708 1691
1709 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack(); 1692 FieldAccess array_field = AccessBuilder::ForJSGeneratorObjectOperandStack();
1710 FieldAccess element_field = AccessBuilder::ForFixedArraySlot(index); 1693 FieldAccess element_field = AccessBuilder::ForFixedArraySlot(index);
1711 1694
1712 Node* array = graph()->NewNode(simplified()->LoadField(array_field), 1695 Node* array = effect = graph()->NewNode(simplified()->LoadField(array_field),
1713 generator, effect, control); 1696 generator, effect, control);
1714 Node* element = graph()->NewNode(simplified()->LoadField(element_field), 1697 Node* element = effect = graph()->NewNode(
1715 array, array, control); 1698 simplified()->LoadField(element_field), array, effect, control);
1699 Node* stale = jsgraph()->StaleRegisterConstant();
1700 effect = graph()->NewNode(simplified()->StoreField(element_field), array,
1701 stale, effect, control);
1716 1702
1717 // Change the JSGeneratorRestoreRegister node to a StoreField node. 1703 ReplaceWithValue(node, element, effect, control);
1718 DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(node->op())); 1704 return Changed(element);
1719 DCHECK_EQ(1, OperatorProperties::GetContextInputCount(node->op()));
1720 node->RemoveInput(NodeProperties::FirstContextIndex(node));
1721 node->ReplaceInput(0, array);
1722 node->InsertInput(graph()->zone(), 1, jsgraph()->StaleRegisterConstant());
1723 NodeProperties::RemoveType(node);
1724 NodeProperties::ChangeOp(node, simplified()->StoreField(element_field));
1725
1726 NodeProperties::ReplaceEffectInput(node, element);
1727 ReplaceWithValue(node, element, node, control);
1728
1729 return Changed(node);
1730 } 1705 }
1731 1706
1732 Reduction JSTypedLowering::ReduceSelect(Node* node) { 1707 Reduction JSTypedLowering::ReduceSelect(Node* node) {
1733 DCHECK_EQ(IrOpcode::kSelect, node->opcode()); 1708 DCHECK_EQ(IrOpcode::kSelect, node->opcode());
1734 Node* const condition = NodeProperties::GetValueInput(node, 0); 1709 Node* const condition = NodeProperties::GetValueInput(node, 0);
1735 Type* const condition_type = NodeProperties::GetType(condition); 1710 Type* const condition_type = NodeProperties::GetType(condition);
1736 Node* const vtrue = NodeProperties::GetValueInput(node, 1); 1711 Node* const vtrue = NodeProperties::GetValueInput(node, 1);
1737 Type* const vtrue_type = NodeProperties::GetType(vtrue); 1712 Type* const vtrue_type = NodeProperties::GetType(vtrue);
1738 Node* const vfalse = NodeProperties::GetValueInput(node, 2); 1713 Node* const vfalse = NodeProperties::GetValueInput(node, 2);
1739 Type* const vfalse_type = NodeProperties::GetType(vfalse); 1714 Type* const vfalse_type = NodeProperties::GetType(vfalse);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 } 1890 }
1916 1891
1917 1892
1918 CompilationDependencies* JSTypedLowering::dependencies() const { 1893 CompilationDependencies* JSTypedLowering::dependencies() const {
1919 return dependencies_; 1894 return dependencies_;
1920 } 1895 }
1921 1896
1922 } // namespace compiler 1897 } // namespace compiler
1923 } // namespace internal 1898 } // namespace internal
1924 } // namespace v8 1899 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698