1641 DivModINode* divmod = new DivModINode(n->in(0), n->in(1), n->in(2));
1642 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1643 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1644 return divmod;
1645 }
1646
1647 //------------------------------make------------------------------------------
1648 DivModLNode* DivModLNode::make(Node* div_or_mod) {
1649 Node* n = div_or_mod;
1650 assert(n->Opcode() == Op_DivL || n->Opcode() == Op_ModL,
1651 "only div or mod input pattern accepted");
1652
1653 DivModLNode* divmod = new DivModLNode(n->in(0), n->in(1), n->in(2));
1654 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1655 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1656 return divmod;
1657 }
1658
1659 //------------------------------match------------------------------------------
1660 // return result(s) along with their RegMask info
1661 Node *DivModINode::match( const ProjNode *proj, const Matcher *match ) {
1662 uint ideal_reg = proj->ideal_reg();
1663 RegMask rm;
1664 if (proj->_con == first_proj_num) {
1665 rm.assignFrom(match->firstI_proj_mask());
1666 } else {
1667 assert(proj->_con == second_proj_num, "must be div or mod projection");
1668 rm.assignFrom(match->secondI_proj_mask());
1669 }
1670 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1671 }
1672
1673
1674 //------------------------------match------------------------------------------
1675 // return result(s) along with their RegMask info
1676 Node *DivModLNode::match( const ProjNode *proj, const Matcher *match ) {
1677 uint ideal_reg = proj->ideal_reg();
1678 RegMask rm;
1679 if (proj->_con == first_proj_num) {
1680 rm.assignFrom(match->firstL_proj_mask());
1681 } else {
1682 assert(proj->_con == second_proj_num, "must be div or mod projection");
1683 rm.assignFrom(match->secondL_proj_mask());
1684 }
1685 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1686 }
1687
1688 //------------------------------make------------------------------------------
1689 UDivModINode* UDivModINode::make(Node* div_or_mod) {
1690 Node* n = div_or_mod;
1691 assert(n->Opcode() == Op_UDivI || n->Opcode() == Op_UModI,
1692 "only div or mod input pattern accepted");
1693
1694 UDivModINode* divmod = new UDivModINode(n->in(0), n->in(1), n->in(2));
1695 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1696 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1697 return divmod;
1698 }
1699
1700 //------------------------------make------------------------------------------
1701 UDivModLNode* UDivModLNode::make(Node* div_or_mod) {
1702 Node* n = div_or_mod;
1703 assert(n->Opcode() == Op_UDivL || n->Opcode() == Op_UModL,
1704 "only div or mod input pattern accepted");
1705
1706 UDivModLNode* divmod = new UDivModLNode(n->in(0), n->in(1), n->in(2));
1707 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1708 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1709 return divmod;
1710 }
1711
1712 //------------------------------match------------------------------------------
1713 // return result(s) along with their RegMask info
1714 Node* UDivModINode::match( const ProjNode *proj, const Matcher *match ) {
1715 uint ideal_reg = proj->ideal_reg();
1716 RegMask rm;
1717 if (proj->_con == first_proj_num) {
1718 rm.assignFrom(match->firstI_proj_mask());
1719 } else {
1720 assert(proj->_con == second_proj_num, "must be div or mod projection");
1721 rm.assignFrom(match->secondI_proj_mask());
1722 }
1723 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1724 }
1725
1726
1727 //------------------------------match------------------------------------------
1728 // return result(s) along with their RegMask info
1729 Node* UDivModLNode::match( const ProjNode *proj, const Matcher *match ) {
1730 uint ideal_reg = proj->ideal_reg();
1731 RegMask rm;
1732 if (proj->_con == first_proj_num) {
1733 rm.assignFrom(match->firstL_proj_mask());
1734 } else {
1735 assert(proj->_con == second_proj_num, "must be div or mod projection");
1736 rm.assignFrom(match->secondL_proj_mask());
1737 }
1738 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1739 }
|
1641 DivModINode* divmod = new DivModINode(n->in(0), n->in(1), n->in(2));
1642 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1643 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1644 return divmod;
1645 }
1646
1647 //------------------------------make------------------------------------------
1648 DivModLNode* DivModLNode::make(Node* div_or_mod) {
1649 Node* n = div_or_mod;
1650 assert(n->Opcode() == Op_DivL || n->Opcode() == Op_ModL,
1651 "only div or mod input pattern accepted");
1652
1653 DivModLNode* divmod = new DivModLNode(n->in(0), n->in(1), n->in(2));
1654 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1655 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1656 return divmod;
1657 }
1658
1659 //------------------------------match------------------------------------------
1660 // return result(s) along with their RegMask info
1661 Node *DivModINode::match(const ProjNode *proj, const Matcher *match, const RegMask* mask) {
1662 uint ideal_reg = proj->ideal_reg();
1663 RegMask rm;
1664 if (proj->_con == first_proj_num) {
1665 rm.assignFrom(match->firstI_proj_mask());
1666 } else {
1667 assert(proj->_con == second_proj_num, "must be div or mod projection");
1668 rm.assignFrom(match->secondI_proj_mask());
1669 }
1670 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1671 }
1672
1673
1674 //------------------------------match------------------------------------------
1675 // return result(s) along with their RegMask info
1676 Node *DivModLNode::match(const ProjNode *proj, const Matcher *match, const RegMask* mask) {
1677 uint ideal_reg = proj->ideal_reg();
1678 RegMask rm;
1679 if (proj->_con == first_proj_num) {
1680 rm.assignFrom(match->firstL_proj_mask());
1681 } else {
1682 assert(proj->_con == second_proj_num, "must be div or mod projection");
1683 rm.assignFrom(match->secondL_proj_mask());
1684 }
1685 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1686 }
1687
1688 //------------------------------make------------------------------------------
1689 UDivModINode* UDivModINode::make(Node* div_or_mod) {
1690 Node* n = div_or_mod;
1691 assert(n->Opcode() == Op_UDivI || n->Opcode() == Op_UModI,
1692 "only div or mod input pattern accepted");
1693
1694 UDivModINode* divmod = new UDivModINode(n->in(0), n->in(1), n->in(2));
1695 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1696 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1697 return divmod;
1698 }
1699
1700 //------------------------------make------------------------------------------
1701 UDivModLNode* UDivModLNode::make(Node* div_or_mod) {
1702 Node* n = div_or_mod;
1703 assert(n->Opcode() == Op_UDivL || n->Opcode() == Op_UModL,
1704 "only div or mod input pattern accepted");
1705
1706 UDivModLNode* divmod = new UDivModLNode(n->in(0), n->in(1), n->in(2));
1707 Node* dproj = new ProjNode(divmod, DivModNode::first_proj_num);
1708 Node* mproj = new ProjNode(divmod, DivModNode::second_proj_num);
1709 return divmod;
1710 }
1711
1712 //------------------------------match------------------------------------------
1713 // return result(s) along with their RegMask info
1714 Node* UDivModINode::match(const ProjNode* proj, const Matcher* match, const RegMask* mask) {
1715 uint ideal_reg = proj->ideal_reg();
1716 RegMask rm;
1717 if (proj->_con == first_proj_num) {
1718 rm.assignFrom(match->firstI_proj_mask());
1719 } else {
1720 assert(proj->_con == second_proj_num, "must be div or mod projection");
1721 rm.assignFrom(match->secondI_proj_mask());
1722 }
1723 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1724 }
1725
1726
1727 //------------------------------match------------------------------------------
1728 // return result(s) along with their RegMask info
1729 Node* UDivModLNode::match( const ProjNode* proj, const Matcher* match, const RegMask* mask) {
1730 uint ideal_reg = proj->ideal_reg();
1731 RegMask rm;
1732 if (proj->_con == first_proj_num) {
1733 rm.assignFrom(match->firstL_proj_mask());
1734 } else {
1735 assert(proj->_con == second_proj_num, "must be div or mod projection");
1736 rm.assignFrom(match->secondL_proj_mask());
1737 }
1738 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1739 }
|