|
1539 | 1539 | // Don't Move from memory if the values are likely to already be
|
1540 | 1540 | // in registers.
|
1541 | 1541 | (Move {t1} [n] dst p1
|
1542 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1543 |
| - (Store {t3} op3:(OffPtr [0] p3) d2 _))) |
| 1542 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1543 | + (Store {t3} op3:(OffPtr <tt3> [0] p3) d2 _))) |
1544 | 1544 | && isSamePtr(p1, p2) && isSamePtr(p2, p3)
|
1545 | 1545 | && alignof(t2) <= alignof(t1)
|
1546 | 1546 | && alignof(t3) <= alignof(t1)
|
1547 | 1547 | && registerizable(b, t2)
|
1548 | 1548 | && registerizable(b, t3)
|
1549 | 1549 | && o2 == sizeof(t3)
|
1550 | 1550 | && n == sizeof(t2) + sizeof(t3)
|
1551 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1552 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [0] dst) d2 mem)) |
| 1551 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1552 | + (Store {t3} (OffPtr <tt3> [0] dst) d2 mem)) |
1553 | 1553 | (Move {t1} [n] dst p1
|
1554 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1555 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1556 |
| - (Store {t4} op4:(OffPtr [0] p4) d3 _)))) |
| 1554 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1555 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1556 | + (Store {t4} op4:(OffPtr <tt4> [0] p4) d3 _)))) |
1557 | 1557 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4)
|
1558 | 1558 | && alignof(t2) <= alignof(t1)
|
1559 | 1559 | && alignof(t3) <= alignof(t1)
|
|
1564 | 1564 | && o3 == sizeof(t4)
|
1565 | 1565 | && o2-o3 == sizeof(t3)
|
1566 | 1566 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4)
|
1567 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1568 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1569 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [0] dst) d3 mem))) |
| 1567 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1568 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1569 | + (Store {t4} (OffPtr <tt4> [0] dst) d3 mem))) |
1570 | 1570 | (Move {t1} [n] dst p1
|
1571 |
| - mem:(Store {t2} op2:(OffPtr [o2] p2) d1 |
1572 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1573 |
| - (Store {t4} op4:(OffPtr [o4] p4) d3 |
1574 |
| - (Store {t5} op5:(OffPtr [0] p5) d4 _))))) |
| 1571 | + mem:(Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1572 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1573 | + (Store {t4} op4:(OffPtr <tt4> [o4] p4) d3 |
| 1574 | + (Store {t5} op5:(OffPtr <tt5> [0] p5) d4 _))))) |
1575 | 1575 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5)
|
1576 | 1576 | && alignof(t2) <= alignof(t1)
|
1577 | 1577 | && alignof(t3) <= alignof(t1)
|
|
1585 | 1585 | && o3-o4 == sizeof(t4)
|
1586 | 1586 | && o2-o3 == sizeof(t3)
|
1587 | 1587 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4) + sizeof(t5)
|
1588 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1589 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1590 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [o4] dst) d3 |
1591 |
| - (Store {t5} (OffPtr <t5.(*types.Type)> [0] dst) d4 mem)))) |
| 1588 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1589 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1590 | + (Store {t4} (OffPtr <tt4> [o4] dst) d3 |
| 1591 | + (Store {t5} (OffPtr <tt5> [0] dst) d4 mem)))) |
1592 | 1592 |
|
1593 | 1593 | // Same thing but with VarDef in the middle.
|
1594 | 1594 | (Move {t1} [n] dst p1
|
1595 | 1595 | mem:(VarDef
|
1596 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1597 |
| - (Store {t3} op3:(OffPtr [0] p3) d2 _)))) |
| 1596 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1597 | + (Store {t3} op3:(OffPtr <tt3> [0] p3) d2 _)))) |
1598 | 1598 | && isSamePtr(p1, p2) && isSamePtr(p2, p3)
|
1599 | 1599 | && alignof(t2) <= alignof(t1)
|
1600 | 1600 | && alignof(t3) <= alignof(t1)
|
1601 | 1601 | && registerizable(b, t2)
|
1602 | 1602 | && registerizable(b, t3)
|
1603 | 1603 | && o2 == sizeof(t3)
|
1604 | 1604 | && n == sizeof(t2) + sizeof(t3)
|
1605 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1606 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [0] dst) d2 mem)) |
| 1605 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1606 | + (Store {t3} (OffPtr <tt3> [0] dst) d2 mem)) |
1607 | 1607 | (Move {t1} [n] dst p1
|
1608 | 1608 | mem:(VarDef
|
1609 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1610 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1611 |
| - (Store {t4} op4:(OffPtr [0] p4) d3 _))))) |
| 1609 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1610 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1611 | + (Store {t4} op4:(OffPtr <tt4> [0] p4) d3 _))))) |
1612 | 1612 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4)
|
1613 | 1613 | && alignof(t2) <= alignof(t1)
|
1614 | 1614 | && alignof(t3) <= alignof(t1)
|
|
1619 | 1619 | && o3 == sizeof(t4)
|
1620 | 1620 | && o2-o3 == sizeof(t3)
|
1621 | 1621 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4)
|
1622 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1623 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1624 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [0] dst) d3 mem))) |
| 1622 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1623 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1624 | + (Store {t4} (OffPtr <tt4> [0] dst) d3 mem))) |
1625 | 1625 | (Move {t1} [n] dst p1
|
1626 | 1626 | mem:(VarDef
|
1627 |
| - (Store {t2} op2:(OffPtr [o2] p2) d1 |
1628 |
| - (Store {t3} op3:(OffPtr [o3] p3) d2 |
1629 |
| - (Store {t4} op4:(OffPtr [o4] p4) d3 |
1630 |
| - (Store {t5} op5:(OffPtr [0] p5) d4 _)))))) |
| 1627 | + (Store {t2} op2:(OffPtr <tt2> [o2] p2) d1 |
| 1628 | + (Store {t3} op3:(OffPtr <tt3> [o3] p3) d2 |
| 1629 | + (Store {t4} op4:(OffPtr <tt4> [o4] p4) d3 |
| 1630 | + (Store {t5} op5:(OffPtr <tt5> [0] p5) d4 _)))))) |
1631 | 1631 | && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5)
|
1632 | 1632 | && alignof(t2) <= alignof(t1)
|
1633 | 1633 | && alignof(t3) <= alignof(t1)
|
|
1641 | 1641 | && o3-o4 == sizeof(t4)
|
1642 | 1642 | && o2-o3 == sizeof(t3)
|
1643 | 1643 | && n == sizeof(t2) + sizeof(t3) + sizeof(t4) + sizeof(t5)
|
1644 |
| - -> (Store {t2} (OffPtr <t2.(*types.Type)> [o2] dst) d1 |
1645 |
| - (Store {t3} (OffPtr <t3.(*types.Type)> [o3] dst) d2 |
1646 |
| - (Store {t4} (OffPtr <t4.(*types.Type)> [o4] dst) d3 |
1647 |
| - (Store {t5} (OffPtr <t5.(*types.Type)> [0] dst) d4 mem)))) |
| 1644 | + -> (Store {t2} (OffPtr <tt2> [o2] dst) d1 |
| 1645 | + (Store {t3} (OffPtr <tt3> [o3] dst) d2 |
| 1646 | + (Store {t4} (OffPtr <tt4> [o4] dst) d3 |
| 1647 | + (Store {t5} (OffPtr <tt5> [0] dst) d4 mem)))) |
1648 | 1648 |
|
1649 | 1649 | // Prefer to Zero and Store than to Move.
|
1650 | 1650 | (Move {t1} [n] dst p1
|
|
0 commit comments