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 "test/unittests/compiler/instruction-selector-unittest.h" | 5 #include "test/unittests/compiler/instruction-selector-unittest.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace compiler { | 9 namespace compiler { |
10 | 10 |
(...skipping 1562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1573 m.Return( | 1573 m.Return( |
1574 m.Int32Sub(m.Parameter(0), m.Int32Mul(m.Parameter(1), m.Parameter(2)))); | 1574 m.Int32Sub(m.Parameter(0), m.Int32Mul(m.Parameter(1), m.Parameter(2)))); |
1575 Stream s = m.Build(MLS); | 1575 Stream s = m.Build(MLS); |
1576 ASSERT_EQ(1U, s.size()); | 1576 ASSERT_EQ(1U, s.size()); |
1577 EXPECT_EQ(kArmMls, s[0]->arch_opcode()); | 1577 EXPECT_EQ(kArmMls, s[0]->arch_opcode()); |
1578 EXPECT_EQ(1U, s[0]->OutputCount()); | 1578 EXPECT_EQ(1U, s[0]->OutputCount()); |
1579 EXPECT_EQ(3U, s[0]->InputCount()); | 1579 EXPECT_EQ(3U, s[0]->InputCount()); |
1580 } | 1580 } |
1581 | 1581 |
1582 | 1582 |
1583 TEST_F(InstructionSelectorTest, Int32UDivWithParameters) { | 1583 TEST_F(InstructionSelectorTest, Uint32DivWithParameters) { |
1584 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 1584 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
1585 m.Return(m.Int32UDiv(m.Parameter(0), m.Parameter(1))); | 1585 m.Return(m.Uint32Div(m.Parameter(0), m.Parameter(1))); |
1586 Stream s = m.Build(); | 1586 Stream s = m.Build(); |
1587 ASSERT_EQ(4U, s.size()); | 1587 ASSERT_EQ(4U, s.size()); |
1588 EXPECT_EQ(kArmVcvtF64U32, s[0]->arch_opcode()); | 1588 EXPECT_EQ(kArmVcvtF64U32, s[0]->arch_opcode()); |
1589 ASSERT_EQ(1U, s[0]->OutputCount()); | 1589 ASSERT_EQ(1U, s[0]->OutputCount()); |
1590 EXPECT_EQ(kArmVcvtF64U32, s[1]->arch_opcode()); | 1590 EXPECT_EQ(kArmVcvtF64U32, s[1]->arch_opcode()); |
1591 ASSERT_EQ(1U, s[1]->OutputCount()); | 1591 ASSERT_EQ(1U, s[1]->OutputCount()); |
1592 EXPECT_EQ(kArmVdivF64, s[2]->arch_opcode()); | 1592 EXPECT_EQ(kArmVdivF64, s[2]->arch_opcode()); |
1593 ASSERT_EQ(2U, s[2]->InputCount()); | 1593 ASSERT_EQ(2U, s[2]->InputCount()); |
1594 ASSERT_EQ(1U, s[2]->OutputCount()); | 1594 ASSERT_EQ(1U, s[2]->OutputCount()); |
1595 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[2]->InputAt(0))); | 1595 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[2]->InputAt(0))); |
1596 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); | 1596 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); |
1597 EXPECT_EQ(kArmVcvtU32F64, s[3]->arch_opcode()); | 1597 EXPECT_EQ(kArmVcvtU32F64, s[3]->arch_opcode()); |
1598 ASSERT_EQ(1U, s[3]->InputCount()); | 1598 ASSERT_EQ(1U, s[3]->InputCount()); |
1599 EXPECT_EQ(s.ToVreg(s[2]->Output()), s.ToVreg(s[3]->InputAt(0))); | 1599 EXPECT_EQ(s.ToVreg(s[2]->Output()), s.ToVreg(s[3]->InputAt(0))); |
1600 } | 1600 } |
1601 | 1601 |
1602 | 1602 |
1603 TEST_F(InstructionSelectorTest, Int32UDivWithParametersForSUDIV) { | 1603 TEST_F(InstructionSelectorTest, Uint32DivWithParametersForSUDIV) { |
1604 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 1604 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
1605 m.Return(m.Int32UDiv(m.Parameter(0), m.Parameter(1))); | 1605 m.Return(m.Uint32Div(m.Parameter(0), m.Parameter(1))); |
1606 Stream s = m.Build(SUDIV); | 1606 Stream s = m.Build(SUDIV); |
1607 ASSERT_EQ(1U, s.size()); | 1607 ASSERT_EQ(1U, s.size()); |
1608 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); | 1608 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); |
1609 } | 1609 } |
1610 | 1610 |
1611 | 1611 |
1612 TEST_F(InstructionSelectorTest, Int32UModWithParameters) { | 1612 TEST_F(InstructionSelectorTest, Uint32ModWithParameters) { |
1613 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 1613 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
1614 m.Return(m.Int32UMod(m.Parameter(0), m.Parameter(1))); | 1614 m.Return(m.Uint32Mod(m.Parameter(0), m.Parameter(1))); |
1615 Stream s = m.Build(); | 1615 Stream s = m.Build(); |
1616 ASSERT_EQ(6U, s.size()); | 1616 ASSERT_EQ(6U, s.size()); |
1617 EXPECT_EQ(kArmVcvtF64U32, s[0]->arch_opcode()); | 1617 EXPECT_EQ(kArmVcvtF64U32, s[0]->arch_opcode()); |
1618 ASSERT_EQ(1U, s[0]->OutputCount()); | 1618 ASSERT_EQ(1U, s[0]->OutputCount()); |
1619 EXPECT_EQ(kArmVcvtF64U32, s[1]->arch_opcode()); | 1619 EXPECT_EQ(kArmVcvtF64U32, s[1]->arch_opcode()); |
1620 ASSERT_EQ(1U, s[1]->OutputCount()); | 1620 ASSERT_EQ(1U, s[1]->OutputCount()); |
1621 EXPECT_EQ(kArmVdivF64, s[2]->arch_opcode()); | 1621 EXPECT_EQ(kArmVdivF64, s[2]->arch_opcode()); |
1622 ASSERT_EQ(2U, s[2]->InputCount()); | 1622 ASSERT_EQ(2U, s[2]->InputCount()); |
1623 ASSERT_EQ(1U, s[2]->OutputCount()); | 1623 ASSERT_EQ(1U, s[2]->OutputCount()); |
1624 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[2]->InputAt(0))); | 1624 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[2]->InputAt(0))); |
1625 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); | 1625 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); |
1626 EXPECT_EQ(kArmVcvtU32F64, s[3]->arch_opcode()); | 1626 EXPECT_EQ(kArmVcvtU32F64, s[3]->arch_opcode()); |
1627 ASSERT_EQ(1U, s[3]->InputCount()); | 1627 ASSERT_EQ(1U, s[3]->InputCount()); |
1628 EXPECT_EQ(s.ToVreg(s[2]->Output()), s.ToVreg(s[3]->InputAt(0))); | 1628 EXPECT_EQ(s.ToVreg(s[2]->Output()), s.ToVreg(s[3]->InputAt(0))); |
1629 EXPECT_EQ(kArmMul, s[4]->arch_opcode()); | 1629 EXPECT_EQ(kArmMul, s[4]->arch_opcode()); |
1630 ASSERT_EQ(1U, s[4]->OutputCount()); | 1630 ASSERT_EQ(1U, s[4]->OutputCount()); |
1631 ASSERT_EQ(2U, s[4]->InputCount()); | 1631 ASSERT_EQ(2U, s[4]->InputCount()); |
1632 EXPECT_EQ(s.ToVreg(s[3]->Output()), s.ToVreg(s[4]->InputAt(0))); | 1632 EXPECT_EQ(s.ToVreg(s[3]->Output()), s.ToVreg(s[4]->InputAt(0))); |
1633 EXPECT_EQ(s.ToVreg(s[1]->InputAt(0)), s.ToVreg(s[4]->InputAt(1))); | 1633 EXPECT_EQ(s.ToVreg(s[1]->InputAt(0)), s.ToVreg(s[4]->InputAt(1))); |
1634 EXPECT_EQ(kArmSub, s[5]->arch_opcode()); | 1634 EXPECT_EQ(kArmSub, s[5]->arch_opcode()); |
1635 ASSERT_EQ(1U, s[5]->OutputCount()); | 1635 ASSERT_EQ(1U, s[5]->OutputCount()); |
1636 ASSERT_EQ(2U, s[5]->InputCount()); | 1636 ASSERT_EQ(2U, s[5]->InputCount()); |
1637 EXPECT_EQ(s.ToVreg(s[0]->InputAt(0)), s.ToVreg(s[5]->InputAt(0))); | 1637 EXPECT_EQ(s.ToVreg(s[0]->InputAt(0)), s.ToVreg(s[5]->InputAt(0))); |
1638 EXPECT_EQ(s.ToVreg(s[4]->Output()), s.ToVreg(s[5]->InputAt(1))); | 1638 EXPECT_EQ(s.ToVreg(s[4]->Output()), s.ToVreg(s[5]->InputAt(1))); |
1639 } | 1639 } |
1640 | 1640 |
1641 | 1641 |
1642 TEST_F(InstructionSelectorTest, Int32UModWithParametersForSUDIV) { | 1642 TEST_F(InstructionSelectorTest, Uint32ModWithParametersForSUDIV) { |
1643 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 1643 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
1644 m.Return(m.Int32UMod(m.Parameter(0), m.Parameter(1))); | 1644 m.Return(m.Uint32Mod(m.Parameter(0), m.Parameter(1))); |
1645 Stream s = m.Build(SUDIV); | 1645 Stream s = m.Build(SUDIV); |
1646 ASSERT_EQ(3U, s.size()); | 1646 ASSERT_EQ(3U, s.size()); |
1647 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); | 1647 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); |
1648 ASSERT_EQ(1U, s[0]->OutputCount()); | 1648 ASSERT_EQ(1U, s[0]->OutputCount()); |
1649 ASSERT_EQ(2U, s[0]->InputCount()); | 1649 ASSERT_EQ(2U, s[0]->InputCount()); |
1650 EXPECT_EQ(kArmMul, s[1]->arch_opcode()); | 1650 EXPECT_EQ(kArmMul, s[1]->arch_opcode()); |
1651 ASSERT_EQ(1U, s[1]->OutputCount()); | 1651 ASSERT_EQ(1U, s[1]->OutputCount()); |
1652 ASSERT_EQ(2U, s[1]->InputCount()); | 1652 ASSERT_EQ(2U, s[1]->InputCount()); |
1653 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[1]->InputAt(0))); | 1653 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[1]->InputAt(0))); |
1654 EXPECT_EQ(s.ToVreg(s[0]->InputAt(1)), s.ToVreg(s[1]->InputAt(1))); | 1654 EXPECT_EQ(s.ToVreg(s[0]->InputAt(1)), s.ToVreg(s[1]->InputAt(1))); |
1655 EXPECT_EQ(kArmSub, s[2]->arch_opcode()); | 1655 EXPECT_EQ(kArmSub, s[2]->arch_opcode()); |
1656 ASSERT_EQ(1U, s[2]->OutputCount()); | 1656 ASSERT_EQ(1U, s[2]->OutputCount()); |
1657 ASSERT_EQ(2U, s[2]->InputCount()); | 1657 ASSERT_EQ(2U, s[2]->InputCount()); |
1658 EXPECT_EQ(s.ToVreg(s[0]->InputAt(0)), s.ToVreg(s[2]->InputAt(0))); | 1658 EXPECT_EQ(s.ToVreg(s[0]->InputAt(0)), s.ToVreg(s[2]->InputAt(0))); |
1659 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); | 1659 EXPECT_EQ(s.ToVreg(s[1]->Output()), s.ToVreg(s[2]->InputAt(1))); |
1660 } | 1660 } |
1661 | 1661 |
1662 | 1662 |
1663 TEST_F(InstructionSelectorTest, Int32UModWithParametersForSUDIVAndMLS) { | 1663 TEST_F(InstructionSelectorTest, Uint32ModWithParametersForSUDIVAndMLS) { |
1664 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 1664 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
1665 m.Return(m.Int32UMod(m.Parameter(0), m.Parameter(1))); | 1665 m.Return(m.Uint32Mod(m.Parameter(0), m.Parameter(1))); |
1666 Stream s = m.Build(MLS, SUDIV); | 1666 Stream s = m.Build(MLS, SUDIV); |
1667 ASSERT_EQ(2U, s.size()); | 1667 ASSERT_EQ(2U, s.size()); |
1668 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); | 1668 EXPECT_EQ(kArmUdiv, s[0]->arch_opcode()); |
1669 ASSERT_EQ(1U, s[0]->OutputCount()); | 1669 ASSERT_EQ(1U, s[0]->OutputCount()); |
1670 ASSERT_EQ(2U, s[0]->InputCount()); | 1670 ASSERT_EQ(2U, s[0]->InputCount()); |
1671 EXPECT_EQ(kArmMls, s[1]->arch_opcode()); | 1671 EXPECT_EQ(kArmMls, s[1]->arch_opcode()); |
1672 ASSERT_EQ(1U, s[1]->OutputCount()); | 1672 ASSERT_EQ(1U, s[1]->OutputCount()); |
1673 ASSERT_EQ(3U, s[1]->InputCount()); | 1673 ASSERT_EQ(3U, s[1]->InputCount()); |
1674 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[1]->InputAt(0))); | 1674 EXPECT_EQ(s.ToVreg(s[0]->Output()), s.ToVreg(s[1]->InputAt(0))); |
1675 EXPECT_EQ(s.ToVreg(s[0]->InputAt(1)), s.ToVreg(s[1]->InputAt(1))); | 1675 EXPECT_EQ(s.ToVreg(s[0]->InputAt(1)), s.ToVreg(s[1]->InputAt(1))); |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1916 ASSERT_EQ(3U, s[0]->InputCount()); | 1916 ASSERT_EQ(3U, s[0]->InputCount()); |
1917 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1))); | 1917 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1))); |
1918 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2))); | 1918 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2))); |
1919 } | 1919 } |
1920 } | 1920 } |
1921 } | 1921 } |
1922 | 1922 |
1923 } // namespace compiler | 1923 } // namespace compiler |
1924 } // namespace internal | 1924 } // namespace internal |
1925 } // namespace v8 | 1925 } // namespace v8 |
OLD | NEW |