| 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/base/bits.h" | 5 #include "src/base/bits.h" |
| 6 #include "src/base/division-by-constant.h" | 6 #include "src/base/division-by-constant.h" |
| 7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
| 8 #include "src/compiler/machine-operator-reducer.h" | 8 #include "src/compiler/machine-operator-reducer.h" |
| 9 #include "src/compiler/typer.h" | 9 #include "src/compiler/typer.h" |
| 10 #include "src/conversions-inl.h" | 10 #include "src/conversions-inl.h" |
| (...skipping 1542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1553 } | 1553 } |
| 1554 } | 1554 } |
| 1555 } | 1555 } |
| 1556 | 1556 |
| 1557 | 1557 |
| 1558 // ----------------------------------------------------------------------------- | 1558 // ----------------------------------------------------------------------------- |
| 1559 // Store | 1559 // Store |
| 1560 | 1560 |
| 1561 | 1561 |
| 1562 TEST_F(MachineOperatorReducerTest, StoreRepWord8WithWord32And) { | 1562 TEST_F(MachineOperatorReducerTest, StoreRepWord8WithWord32And) { |
| 1563 const StoreRepresentation rep(MachineType::Uint8(), kNoWriteBarrier); | 1563 const StoreRepresentation rep(MachineRepresentation::kWord8, kNoWriteBarrier); |
| 1564 Node* const base = Parameter(0); | 1564 Node* const base = Parameter(0); |
| 1565 Node* const index = Parameter(1); | 1565 Node* const index = Parameter(1); |
| 1566 Node* const value = Parameter(2); | 1566 Node* const value = Parameter(2); |
| 1567 Node* const effect = graph()->start(); | 1567 Node* const effect = graph()->start(); |
| 1568 Node* const control = graph()->start(); | 1568 Node* const control = graph()->start(); |
| 1569 TRACED_FOREACH(uint32_t, x, kUint32Values) { | 1569 TRACED_FOREACH(uint32_t, x, kUint32Values) { |
| 1570 Node* const node = | 1570 Node* const node = |
| 1571 graph()->NewNode(machine()->Store(rep), base, index, | 1571 graph()->NewNode(machine()->Store(rep), base, index, |
| 1572 graph()->NewNode(machine()->Word32And(), value, | 1572 graph()->NewNode(machine()->Word32And(), value, |
| 1573 Uint32Constant(x | 0xffu)), | 1573 Uint32Constant(x | 0xffu)), |
| 1574 effect, control); | 1574 effect, control); |
| 1575 | 1575 |
| 1576 Reduction r = Reduce(node); | 1576 Reduction r = Reduce(node); |
| 1577 ASSERT_TRUE(r.Changed()); | 1577 ASSERT_TRUE(r.Changed()); |
| 1578 EXPECT_THAT(r.replacement(), | 1578 EXPECT_THAT(r.replacement(), |
| 1579 IsStore(rep, base, index, value, effect, control)); | 1579 IsStore(rep, base, index, value, effect, control)); |
| 1580 } | 1580 } |
| 1581 } | 1581 } |
| 1582 | 1582 |
| 1583 | 1583 |
| 1584 TEST_F(MachineOperatorReducerTest, StoreRepWord8WithWord32SarAndWord32Shl) { | 1584 TEST_F(MachineOperatorReducerTest, StoreRepWord8WithWord32SarAndWord32Shl) { |
| 1585 const StoreRepresentation rep(MachineType::Uint8(), kNoWriteBarrier); | 1585 const StoreRepresentation rep(MachineRepresentation::kWord8, kNoWriteBarrier); |
| 1586 Node* const base = Parameter(0); | 1586 Node* const base = Parameter(0); |
| 1587 Node* const index = Parameter(1); | 1587 Node* const index = Parameter(1); |
| 1588 Node* const value = Parameter(2); | 1588 Node* const value = Parameter(2); |
| 1589 Node* const effect = graph()->start(); | 1589 Node* const effect = graph()->start(); |
| 1590 Node* const control = graph()->start(); | 1590 Node* const control = graph()->start(); |
| 1591 TRACED_FORRANGE(int32_t, x, 1, 24) { | 1591 TRACED_FORRANGE(int32_t, x, 1, 24) { |
| 1592 Node* const node = graph()->NewNode( | 1592 Node* const node = graph()->NewNode( |
| 1593 machine()->Store(rep), base, index, | 1593 machine()->Store(rep), base, index, |
| 1594 graph()->NewNode( | 1594 graph()->NewNode( |
| 1595 machine()->Word32Sar(), | 1595 machine()->Word32Sar(), |
| 1596 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(x)), | 1596 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(x)), |
| 1597 Int32Constant(x)), | 1597 Int32Constant(x)), |
| 1598 effect, control); | 1598 effect, control); |
| 1599 | 1599 |
| 1600 Reduction r = Reduce(node); | 1600 Reduction r = Reduce(node); |
| 1601 ASSERT_TRUE(r.Changed()); | 1601 ASSERT_TRUE(r.Changed()); |
| 1602 EXPECT_THAT(r.replacement(), | 1602 EXPECT_THAT(r.replacement(), |
| 1603 IsStore(rep, base, index, value, effect, control)); | 1603 IsStore(rep, base, index, value, effect, control)); |
| 1604 } | 1604 } |
| 1605 } | 1605 } |
| 1606 | 1606 |
| 1607 | 1607 |
| 1608 TEST_F(MachineOperatorReducerTest, StoreRepWord16WithWord32And) { | 1608 TEST_F(MachineOperatorReducerTest, StoreRepWord16WithWord32And) { |
| 1609 const StoreRepresentation rep(MachineType::Uint16(), kNoWriteBarrier); | 1609 const StoreRepresentation rep(MachineRepresentation::kWord16, |
| 1610 kNoWriteBarrier); |
| 1610 Node* const base = Parameter(0); | 1611 Node* const base = Parameter(0); |
| 1611 Node* const index = Parameter(1); | 1612 Node* const index = Parameter(1); |
| 1612 Node* const value = Parameter(2); | 1613 Node* const value = Parameter(2); |
| 1613 Node* const effect = graph()->start(); | 1614 Node* const effect = graph()->start(); |
| 1614 Node* const control = graph()->start(); | 1615 Node* const control = graph()->start(); |
| 1615 TRACED_FOREACH(uint32_t, x, kUint32Values) { | 1616 TRACED_FOREACH(uint32_t, x, kUint32Values) { |
| 1616 Node* const node = | 1617 Node* const node = |
| 1617 graph()->NewNode(machine()->Store(rep), base, index, | 1618 graph()->NewNode(machine()->Store(rep), base, index, |
| 1618 graph()->NewNode(machine()->Word32And(), value, | 1619 graph()->NewNode(machine()->Word32And(), value, |
| 1619 Uint32Constant(x | 0xffffu)), | 1620 Uint32Constant(x | 0xffffu)), |
| 1620 effect, control); | 1621 effect, control); |
| 1621 | 1622 |
| 1622 Reduction r = Reduce(node); | 1623 Reduction r = Reduce(node); |
| 1623 ASSERT_TRUE(r.Changed()); | 1624 ASSERT_TRUE(r.Changed()); |
| 1624 EXPECT_THAT(r.replacement(), | 1625 EXPECT_THAT(r.replacement(), |
| 1625 IsStore(rep, base, index, value, effect, control)); | 1626 IsStore(rep, base, index, value, effect, control)); |
| 1626 } | 1627 } |
| 1627 } | 1628 } |
| 1628 | 1629 |
| 1629 | 1630 |
| 1630 TEST_F(MachineOperatorReducerTest, StoreRepWord16WithWord32SarAndWord32Shl) { | 1631 TEST_F(MachineOperatorReducerTest, StoreRepWord16WithWord32SarAndWord32Shl) { |
| 1631 const StoreRepresentation rep(MachineType::Uint16(), kNoWriteBarrier); | 1632 const StoreRepresentation rep(MachineRepresentation::kWord16, |
| 1633 kNoWriteBarrier); |
| 1632 Node* const base = Parameter(0); | 1634 Node* const base = Parameter(0); |
| 1633 Node* const index = Parameter(1); | 1635 Node* const index = Parameter(1); |
| 1634 Node* const value = Parameter(2); | 1636 Node* const value = Parameter(2); |
| 1635 Node* const effect = graph()->start(); | 1637 Node* const effect = graph()->start(); |
| 1636 Node* const control = graph()->start(); | 1638 Node* const control = graph()->start(); |
| 1637 TRACED_FORRANGE(int32_t, x, 1, 16) { | 1639 TRACED_FORRANGE(int32_t, x, 1, 16) { |
| 1638 Node* const node = graph()->NewNode( | 1640 Node* const node = graph()->NewNode( |
| 1639 machine()->Store(rep), base, index, | 1641 machine()->Store(rep), base, index, |
| 1640 graph()->NewNode( | 1642 graph()->NewNode( |
| 1641 machine()->Word32Sar(), | 1643 machine()->Word32Sar(), |
| 1642 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(x)), | 1644 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(x)), |
| 1643 Int32Constant(x)), | 1645 Int32Constant(x)), |
| 1644 effect, control); | 1646 effect, control); |
| 1645 | 1647 |
| 1646 Reduction r = Reduce(node); | 1648 Reduction r = Reduce(node); |
| 1647 ASSERT_TRUE(r.Changed()); | 1649 ASSERT_TRUE(r.Changed()); |
| 1648 EXPECT_THAT(r.replacement(), | 1650 EXPECT_THAT(r.replacement(), |
| 1649 IsStore(rep, base, index, value, effect, control)); | 1651 IsStore(rep, base, index, value, effect, control)); |
| 1650 } | 1652 } |
| 1651 } | 1653 } |
| 1652 | 1654 |
| 1653 } // namespace compiler | 1655 } // namespace compiler |
| 1654 } // namespace internal | 1656 } // namespace internal |
| 1655 } // namespace v8 | 1657 } // namespace v8 |
| OLD | NEW |