|
1545 | 1545 | // Don't Move from memory if the values are likely to already be
|
1546 | 1546 | // in registers.
|
1547 | 1547 | (Move {t1} [n] dst p1
|
1548 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1549 |
| - (Store {t3} op3:(OffPtr [0] p3) d2 _))) |
| 1548 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1549 | + (Store {t3} op3:(OffPtr <tt3> [0] p3) d2 _))) |
1550 | 1550 | && isSamePtr(p1, p2) && isSamePtr(p2, p3)
|
1551 | 1551 | && alignof(t2) <= alignof(t1)
|
1552 | 1552 | && alignof(t3) <= alignof(t1)
|
1553 | 1553 | && registerizable(b, t2)
|
1554 | 1554 | && registerizable(b, t3)
|
1555 | 1555 | && o2 == sizeof(t3)
|
1556 | 1556 | && n == sizeof(t2) + sizeof(t3)
|
1557 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1558 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [0] dst) d2 mem)) |
| 1557 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1558 | + (Store {t3} (OffPtr <tt3> [0] dst) d2 mem)) |
1559 | 1559 | (Move {t1} [n] dst p1
|
1560 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1561 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1562 |
| - (Store {t4} op4:(OffPtr [0] p4) d3 _)))) |
| 1560 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1561 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1562 | + (Store {t4} op4:(OffPtr <tt4> [0] p4) d3 _)))) |
1563 | 1563 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4)
|
1564 | 1564 | && alignof(t2) <= alignof(t1)
|
1565 | 1565 | && alignof(t3) <= alignof(t1)
|
|
1570 | 1570 | && o3 == sizeof(t4)
|
1571 | 1571 | && o2-o3 == sizeof(t3)
|
1572 | 1572 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4)
|
1573 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1574 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1575 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [0] dst) d3 mem))) |
| 1573 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1574 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1575 | + (Store {t4} (OffPtr <tt4> [0] dst) d3 mem))) |
1576 | 1576 | (Move {t1} [n] dst p1
|
1577 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1578 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1579 |
| - (Store {t4} op4:(OffPtr [o4] p4) d3 |
1580 |
| - (Store {t5} op5:(OffPtr [0] p5) d4 _))))) |
| 1577 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1578 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1579 | + (Store {t4} op4:(OffPtr <tt4> [o4] p4) d3 |
| 1580 | + (Store {t5} op5:(OffPtr <tt5> [0] p5) d4 _))))) |
1581 | 1581 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5)
|
1582 | 1582 | && alignof(t2) <= alignof(t1)
|
1583 | 1583 | && alignof(t3) <= alignof(t1)
|
|
1591 | 1591 | && o3-o4 == sizeof(t4)
|
1592 | 1592 | && o2-o3 == sizeof(t3)
|
1593 | 1593 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4) + sizeof(t5)
|
1594 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1595 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1596 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [o4] dst) d3 |
1597 |
| - (Store {t5} (OffPtr <t5.(*types.Type)> [0] dst) d4 mem)))) |
| 1594 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1595 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1596 | + (Store {t4} (OffPtr <tt4> [o4] dst) d3 |
| 1597 | + (Store {t5} (OffPtr <tt5> [0] dst) d4 mem)))) |
1598 | 1598 |
|
1599 | 1599 | // Same thing but with VarDef in the middle.
|
1600 | 1600 | (Move {t1} [n] dst p1
|
1601 | 1601 | mem:(VarDef
|
1602 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1603 |
| - (Store {t3} op3:(OffPtr [0] p3) d2 _)))) |
| 1602 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1603 | + (Store {t3} op3:(OffPtr <tt3> [0] p3) d2 _)))) |
1604 | 1604 | && isSamePtr(p1, p2) && isSamePtr(p2, p3)
|
1605 | 1605 | && alignof(t2) <= alignof(t1)
|
1606 | 1606 | && alignof(t3) <= alignof(t1)
|
1607 | 1607 | && registerizable(b, t2)
|
1608 | 1608 | && registerizable(b, t3)
|
1609 | 1609 | && o2 == sizeof(t3)
|
1610 | 1610 | && n == sizeof(t2) + sizeof(t3)
|
1611 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1612 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [0] dst) d2 mem)) |
| 1611 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1612 | + (Store {t3} (OffPtr <tt3> [0] dst) d2 mem)) |
1613 | 1613 | (Move {t1} [n] dst p1
|
1614 | 1614 | mem:(VarDef
|
1615 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1616 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1617 |
| - (Store {t4} op4:(OffPtr [0] p4) d3 _))))) |
| 1615 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1616 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1617 | + (Store {t4} op4:(OffPtr <tt4> [0] p4) d3 _))))) |
1618 | 1618 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4)
|
1619 | 1619 | && alignof(t2) <= alignof(t1)
|
1620 | 1620 | && alignof(t3) <= alignof(t1)
|
|
1625 | 1625 | && o3 == sizeof(t4)
|
1626 | 1626 | && o2-o3 == sizeof(t3)
|
1627 | 1627 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4)
|
1628 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1629 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1630 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [0] dst) d3 mem))) |
| 1628 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1629 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1630 | + (Store {t4} (OffPtr <tt4> [0] dst) d3 mem))) |
1631 | 1631 | (Move {t1} [n] dst p1
|
1632 | 1632 | mem:(VarDef
|
1633 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1634 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1635 |
| - (Store {t4} op4:(OffPtr [o4] p4) d3 |
1636 |
| - (Store {t5} op5:(OffPtr [0] p5) d4 _)))))) |
| 1633 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1634 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1635 | + (Store {t4} op4:(OffPtr <tt4> [o4] p4) d3 |
| 1636 | + (Store {t5} op5:(OffPtr <tt5> [0] p5) d4 _)))))) |
1637 | 1637 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5)
|
1638 | 1638 | && alignof(t2) <= alignof(t1)
|
1639 | 1639 | && alignof(t3) <= alignof(t1)
|
|
1647 | 1647 | && o3-o4 == sizeof(t4)
|
1648 | 1648 | && o2-o3 == sizeof(t3)
|
1649 | 1649 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4) + sizeof(t5)
|
1650 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1651 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1652 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [o4] dst) d3 |
1653 |
| - (Store {t5} (OffPtr <t5.(*types.Type)> [0] dst) d4 mem)))) |
| 1650 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1651 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1652 | + (Store {t4} (OffPtr <tt4> [o4] dst) d3 |
| 1653 | + (Store {t5} (OffPtr <tt5> [0] dst) d4 mem)))) |
1654 | 1654 |
|
1655 | 1655 | // Prefer to Zero and Store than to Move.
|
1656 | 1656 | (Move {t1} [n] dst p1
|
|
0 commit comments