Changeset 174025 in webkit for trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
- Timestamp:
- Sep 26, 2014, 3:53:20 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r173993 r174025 645 645 fixEdge<KnownCellUse>(child1); 646 646 fixEdge<Int32Use>(child2); 647 insertStoreBarrier(m_indexInBlock, child1 );647 insertStoreBarrier(m_indexInBlock, child1, child3); 648 648 break; 649 649 default: … … 683 683 case Array::Contiguous: 684 684 case Array::ArrayStorage: 685 insertStoreBarrier(m_indexInBlock, node->child1() );685 insertStoreBarrier(m_indexInBlock, node->child1(), node->child2()); 686 686 break; 687 687 default: … … 855 855 case PutClosureVar: { 856 856 fixEdge<KnownCellUse>(node->child1()); 857 insertStoreBarrier(m_indexInBlock, node->child1() );857 insertStoreBarrier(m_indexInBlock, node->child1(), node->child2()); 858 858 break; 859 859 } … … 900 900 case PutByIdDirect: { 901 901 fixEdge<CellUse>(node->child1()); 902 insertStoreBarrier(m_indexInBlock, node->child1() );902 insertStoreBarrier(m_indexInBlock, node->child1(), node->child2()); 903 903 break; 904 904 } … … 943 943 fixEdge<KnownCellUse>(node->child1()); 944 944 fixEdge<KnownCellUse>(node->child2()); 945 insertStoreBarrier(m_indexInBlock, node->child2() );945 insertStoreBarrier(m_indexInBlock, node->child2(), node->child3()); 946 946 break; 947 947 } … … 949 949 case MultiPutByOffset: { 950 950 fixEdge<CellUse>(node->child1()); 951 insertStoreBarrier(m_indexInBlock, node->child1() );951 insertStoreBarrier(m_indexInBlock, node->child1(), node->child2()); 952 952 break; 953 953 } … … 1641 1641 } 1642 1642 1643 void insertStoreBarrier(unsigned indexInBlock, Edge child1) 1644 { 1645 Node* barrierNode = m_graph.addNode(SpecNone, StoreBarrier, m_currentNode->origin, child1); 1646 m_insertionSet.insert(indexInBlock, barrierNode); 1643 void insertStoreBarrier(unsigned indexInBlock, Edge base, Edge value = Edge()) 1644 { 1645 if (!!value) { 1646 if (value->shouldSpeculateInt32()) { 1647 insertCheck<Int32Use>(indexInBlock, value.node()); 1648 return; 1649 } 1650 1651 if (value->shouldSpeculateBoolean()) { 1652 insertCheck<BooleanUse>(indexInBlock, value.node()); 1653 return; 1654 } 1655 1656 if (value->shouldSpeculateOther()) { 1657 insertCheck<OtherUse>(indexInBlock, value.node()); 1658 return; 1659 } 1660 1661 if (value->shouldSpeculateNumber()) { 1662 insertCheck<NumberUse>(indexInBlock, value.node()); 1663 return; 1664 } 1665 1666 if (value->shouldSpeculateNotCell()) { 1667 insertCheck<NotCellUse>(indexInBlock, value.node()); 1668 return; 1669 } 1670 } 1671 1672 m_insertionSet.insertNode( 1673 indexInBlock, SpecNone, StoreBarrier, m_currentNode->origin, base); 1674 } 1675 1676 template<UseKind useKind> 1677 void insertCheck(unsigned indexInBlock, Node* node) 1678 { 1679 observeUseKindOnNode<useKind>(node); 1680 m_insertionSet.insertNode( 1681 indexInBlock, SpecNone, Check, m_currentNode->origin, Edge(node, useKind)); 1647 1682 } 1648 1683
Note:
See TracChangeset
for help on using the changeset viewer.