@@ -1554,80 +1554,93 @@ HexagonInstrInfo::expandVGatherPseudo(MachineInstr &MI) const {
15541554 MachineBasicBlock::iterator First;
15551555
15561556 switch (Opc) {
1557- case Hexagon::V6_vgathermh_pseudo:
1558- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermh))
1559- .add (MI.getOperand (2 ))
1560- .add (MI.getOperand (3 ))
1561- .add (MI.getOperand (4 ));
1562- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1563- .add (MI.getOperand (0 ))
1564- .addImm (MI.getOperand (1 ).getImm ())
1565- .addReg (Hexagon::VTMP);
1566- MBB.erase (MI);
1567- return First.getInstrIterator ();
1568-
1569- case Hexagon::V6_vgathermw_pseudo:
1570- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermw))
1571- .add (MI.getOperand (2 ))
1572- .add (MI.getOperand (3 ))
1573- .add (MI.getOperand (4 ));
1574- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1575- .add (MI.getOperand (0 ))
1576- .addImm (MI.getOperand (1 ).getImm ())
1577- .addReg (Hexagon::VTMP);
1578- MBB.erase (MI);
1579- return First.getInstrIterator ();
1580-
1581- case Hexagon::V6_vgathermhw_pseudo:
1582- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhw))
1583- .add (MI.getOperand (2 ))
1584- .add (MI.getOperand (3 ))
1585- .add (MI.getOperand (4 ));
1586- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1587- .add (MI.getOperand (0 ))
1588- .addImm (MI.getOperand (1 ).getImm ())
1589- .addReg (Hexagon::VTMP);
1590- MBB.erase (MI);
1591- return First.getInstrIterator ();
1592-
1593- case Hexagon::V6_vgathermhq_pseudo:
1594- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhq))
1595- .add (MI.getOperand (2 ))
1596- .add (MI.getOperand (3 ))
1597- .add (MI.getOperand (4 ))
1598- .add (MI.getOperand (5 ));
1599- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1600- .add (MI.getOperand (0 ))
1601- .addImm (MI.getOperand (1 ).getImm ())
1602- .addReg (Hexagon::VTMP);
1603- MBB.erase (MI);
1604- return First.getInstrIterator ();
1605-
1606- case Hexagon::V6_vgathermwq_pseudo:
1607- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermwq))
1608- .add (MI.getOperand (2 ))
1609- .add (MI.getOperand (3 ))
1610- .add (MI.getOperand (4 ))
1611- .add (MI.getOperand (5 ));
1612- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1613- .add (MI.getOperand (0 ))
1614- .addImm (MI.getOperand (1 ).getImm ())
1615- .addReg (Hexagon::VTMP);
1616- MBB.erase (MI);
1617- return First.getInstrIterator ();
1618-
1619- case Hexagon::V6_vgathermhwq_pseudo:
1620- First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhwq))
1621- .add (MI.getOperand (2 ))
1622- .add (MI.getOperand (3 ))
1623- .add (MI.getOperand (4 ))
1624- .add (MI.getOperand (5 ));
1625- BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1626- .add (MI.getOperand (0 ))
1627- .addImm (MI.getOperand (1 ).getImm ())
1628- .addReg (Hexagon::VTMP);
1629- MBB.erase (MI);
1630- return First.getInstrIterator ();
1557+ case Hexagon::V6_vgather_vscatter_mh_pseudo:
1558+ // This is mainly a place holder. It will be extended.
1559+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermh))
1560+ .add (MI.getOperand (2 ))
1561+ .add (MI.getOperand (3 ))
1562+ .add (MI.getOperand (4 ));
1563+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vscattermh))
1564+ .add (MI.getOperand (2 ))
1565+ .add (MI.getOperand (3 ))
1566+ .add (MI.getOperand (4 ))
1567+ .addReg (Hexagon::VTMP);
1568+ MBB.erase (MI);
1569+ return First.getInstrIterator ();
1570+ case Hexagon::V6_vgathermh_pseudo:
1571+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermh))
1572+ .add (MI.getOperand (2 ))
1573+ .add (MI.getOperand (3 ))
1574+ .add (MI.getOperand (4 ));
1575+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1576+ .add (MI.getOperand (0 ))
1577+ .addImm (MI.getOperand (1 ).getImm ())
1578+ .addReg (Hexagon::VTMP);
1579+ MBB.erase (MI);
1580+ return First.getInstrIterator ();
1581+
1582+ case Hexagon::V6_vgathermw_pseudo:
1583+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermw))
1584+ .add (MI.getOperand (2 ))
1585+ .add (MI.getOperand (3 ))
1586+ .add (MI.getOperand (4 ));
1587+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1588+ .add (MI.getOperand (0 ))
1589+ .addImm (MI.getOperand (1 ).getImm ())
1590+ .addReg (Hexagon::VTMP);
1591+ MBB.erase (MI);
1592+ return First.getInstrIterator ();
1593+
1594+ case Hexagon::V6_vgathermhw_pseudo:
1595+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhw))
1596+ .add (MI.getOperand (2 ))
1597+ .add (MI.getOperand (3 ))
1598+ .add (MI.getOperand (4 ));
1599+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1600+ .add (MI.getOperand (0 ))
1601+ .addImm (MI.getOperand (1 ).getImm ())
1602+ .addReg (Hexagon::VTMP);
1603+ MBB.erase (MI);
1604+ return First.getInstrIterator ();
1605+
1606+ case Hexagon::V6_vgathermhq_pseudo:
1607+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhq))
1608+ .add (MI.getOperand (2 ))
1609+ .add (MI.getOperand (3 ))
1610+ .add (MI.getOperand (4 ))
1611+ .add (MI.getOperand (5 ));
1612+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1613+ .add (MI.getOperand (0 ))
1614+ .addImm (MI.getOperand (1 ).getImm ())
1615+ .addReg (Hexagon::VTMP);
1616+ MBB.erase (MI);
1617+ return First.getInstrIterator ();
1618+
1619+ case Hexagon::V6_vgathermwq_pseudo:
1620+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermwq))
1621+ .add (MI.getOperand (2 ))
1622+ .add (MI.getOperand (3 ))
1623+ .add (MI.getOperand (4 ))
1624+ .add (MI.getOperand (5 ));
1625+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1626+ .add (MI.getOperand (0 ))
1627+ .addImm (MI.getOperand (1 ).getImm ())
1628+ .addReg (Hexagon::VTMP);
1629+ MBB.erase (MI);
1630+ return First.getInstrIterator ();
1631+
1632+ case Hexagon::V6_vgathermhwq_pseudo:
1633+ First = BuildMI (MBB, MI, DL, get (Hexagon::V6_vgathermhwq))
1634+ .add (MI.getOperand (2 ))
1635+ .add (MI.getOperand (3 ))
1636+ .add (MI.getOperand (4 ))
1637+ .add (MI.getOperand (5 ));
1638+ BuildMI (MBB, MI, DL, get (Hexagon::V6_vS32b_new_ai))
1639+ .add (MI.getOperand (0 ))
1640+ .addImm (MI.getOperand (1 ).getImm ())
1641+ .addReg (Hexagon::VTMP);
1642+ MBB.erase (MI);
1643+ return First.getInstrIterator ();
16311644 }
16321645
16331646 return MI.getIterator ();
@@ -2806,6 +2819,7 @@ bool HexagonInstrInfo::isValidOffset(unsigned Opcode, int Offset,
28062819 case Hexagon::V6_vL32b_nt_tmp_npred_ai:
28072820 case Hexagon::V6_vS32Ub_npred_ai:
28082821 case Hexagon::V6_vgathermh_pseudo:
2822+ case Hexagon::V6_vgather_vscatter_mh_pseudo:
28092823 case Hexagon::V6_vgathermw_pseudo:
28102824 case Hexagon::V6_vgathermhw_pseudo:
28112825 case Hexagon::V6_vgathermhq_pseudo:
0 commit comments