Lines Matching refs:Op
360 SDValue MipsSETargetLowering::LowerOperation(SDValue Op,
362 switch(Op.getOpcode()) {
363 case ISD::LOAD: return lowerLOAD(Op, DAG);
364 case ISD::STORE: return lowerSTORE(Op, DAG);
365 case ISD::SMUL_LOHI: return lowerMulDiv(Op, MipsISD::Mult, true, true, DAG);
366 case ISD::UMUL_LOHI: return lowerMulDiv(Op, MipsISD::Multu, true, true, DAG);
367 case ISD::MULHS: return lowerMulDiv(Op, MipsISD::Mult, false, true, DAG);
368 case ISD::MULHU: return lowerMulDiv(Op, MipsISD::Multu, false, true, DAG);
369 case ISD::MUL: return lowerMulDiv(Op, MipsISD::Mult, true, false, DAG);
370 case ISD::SDIVREM: return lowerMulDiv(Op, MipsISD::DivRem, true, true, DAG);
371 case ISD::UDIVREM: return lowerMulDiv(Op, MipsISD::DivRemU, true, true,
373 case ISD::INTRINSIC_WO_CHAIN: return lowerINTRINSIC_WO_CHAIN(Op, DAG);
374 case ISD::INTRINSIC_W_CHAIN: return lowerINTRINSIC_W_CHAIN(Op, DAG);
375 case ISD::INTRINSIC_VOID: return lowerINTRINSIC_VOID(Op, DAG);
376 case ISD::EXTRACT_VECTOR_ELT: return lowerEXTRACT_VECTOR_ELT(Op, DAG);
377 case ISD::BUILD_VECTOR: return lowerBUILD_VECTOR(Op, DAG);
378 case ISD::VECTOR_SHUFFLE: return lowerVECTOR_SHUFFLE(Op, DAG);
381 return MipsTargetLowering::LowerOperation(Op, DAG);
1209 SDValue MipsSETargetLowering::lowerLOAD(SDValue Op, SelectionDAG &DAG) const {
1210 LoadSDNode &Nd = *cast<LoadSDNode>(Op);
1213 return MipsTargetLowering::lowerLOAD(Op, DAG);
1216 SDLoc DL(Op);
1241 SDValue MipsSETargetLowering::lowerSTORE(SDValue Op, SelectionDAG &DAG) const {
1242 StoreSDNode &Nd = *cast<StoreSDNode>(Op);
1245 return MipsTargetLowering::lowerSTORE(Op, DAG);
1248 SDLoc DL(Op);
1271 SDValue MipsSETargetLowering::lowerMulDiv(SDValue Op, unsigned NewOpc,
1277 EVT Ty = Op.getOperand(0).getValueType();
1278 SDLoc DL(Op);
1280 Op.getOperand(0), Op.getOperand(1));
1303 static SDValue extractLOHI(SDValue Op, const SDLoc &DL, SelectionDAG &DAG) {
1304 SDValue Lo = DAG.getNode(MipsISD::MFLO, DL, MVT::i32, Op);
1305 SDValue Hi = DAG.getNode(MipsISD::MFHI, DL, MVT::i32, Op);
1321 static SDValue lowerDSPIntr(SDValue Op, SelectionDAG &DAG, unsigned Opc) {
1322 SDLoc DL(Op);
1323 bool HasChainIn = Op->getOperand(0).getValueType() == MVT::Other;
1327 // See if Op has a chain input.
1329 Ops.push_back(Op->getOperand(OpNo++));
1332 assert(Op->getOperand(OpNo).getOpcode() == ISD::TargetConstant);
1335 SDValue Opnd = Op->getOperand(++OpNo), In64;
1343 for (++OpNo ; OpNo < Op->getNumOperands(); ++OpNo)
1344 Ops.push_back(Op->getOperand(OpNo));
1353 for (SDNode::value_iterator I = Op->value_begin(), E = Op->value_end();
1370 static SDValue lowerMSACopyIntr(SDValue Op, SelectionDAG &DAG, unsigned Opc) {
1371 SDLoc DL(Op);
1372 SDValue Vec = Op->getOperand(1);
1373 SDValue Idx = Op->getOperand(2);
1374 EVT ResTy = Op->getValueType(0);
1383 static SDValue lowerMSASplatZExt(SDValue Op, unsigned OpNr, SelectionDAG &DAG) {
1384 EVT ResVecTy = Op->getValueType(0);
1386 SDLoc DL(Op);
1392 SDValue LaneB = Op->getOperand(2);
1412 static SDValue lowerMSASplatImm(SDValue Op, unsigned ImmOp, SelectionDAG &DAG) {
1413 return DAG.getConstant(Op->getConstantOperandVal(ImmOp), SDLoc(Op),
1414 Op->getValueType(0));
1453 static SDValue lowerMSABinaryBitImmIntr(SDValue Op, SelectionDAG &DAG,
1456 EVT VecTy = Op->getValueType(0);
1458 SDLoc DL(Op);
1494 return DAG.getNode(Opc, DL, VecTy, Op->getOperand(1), Exp2Imm);
1497 static SDValue lowerMSABitClear(SDValue Op, SelectionDAG &DAG) {
1498 EVT ResTy = Op->getValueType(0);
1499 SDLoc DL(Op);
1501 SDValue Bit = DAG.getNode(ISD::SHL, DL, ResTy, One, Op->getOperand(2));
1503 return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1),
1507 static SDValue lowerMSABitClearImm(SDValue Op, SelectionDAG &DAG) {
1508 SDLoc DL(Op);
1509 EVT ResTy = Op->getValueType(0);
1511 << cast<ConstantSDNode>(Op->getOperand(2))->getAPIntValue();
1514 return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1), BitMask);
1517 SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
1519 SDLoc DL(Op);
1521 switch (cast<ConstantSDNode>(Op->getOperand(0))->getZExtValue()) {
1525 return lowerDSPIntr(Op, DAG, MipsISD::SHILO);
1527 return lowerDSPIntr(Op, DAG, MipsISD::DPAU_H_QBL);
1529 return lowerDSPIntr(Op, DAG, MipsISD::DPAU_H_QBR);
1531 return lowerDSPIntr(Op, DAG, MipsISD::DPSU_H_QBL);
1533 return lowerDSPIntr(Op, DAG, MipsISD::DPSU_H_QBR);
1535 return lowerDSPIntr(Op, DAG, MipsISD::DPA_W_PH);
1537 return lowerDSPIntr(Op, DAG, MipsISD::DPS_W_PH);
1539 return lowerDSPIntr(Op, DAG, MipsISD::DPAX_W_PH);
1541 return lowerDSPIntr(Op, DAG, MipsISD::DPSX_W_PH);
1543 return lowerDSPIntr(Op, DAG, MipsISD::MULSA_W_PH);
1545 return lowerDSPIntr(Op, DAG, MipsISD::Mult);
1547 return lowerDSPIntr(Op, DAG, MipsISD::Multu);
1549 return lowerDSPIntr(Op, DAG, MipsISD::MAdd);
1551 return lowerDSPIntr(Op, DAG, MipsISD::MAddu);
1553 return lowerDSPIntr(Op, DAG, MipsISD::MSub);
1555 return lowerDSPIntr(Op, DAG, MipsISD::MSubu);
1560 return DAG.getNode(ISD::ADD, DL, Op->getValueType(0), Op->getOperand(1),
1561 Op->getOperand(2));
1566 return DAG.getNode(ISD::ADD, DL, Op->getValueType(0), Op->getOperand(1),
1567 lowerMSASplatImm(Op, 2, DAG));
1569 return DAG.getNode(ISD::AND, DL, Op->getValueType(0), Op->getOperand(1),
1570 Op->getOperand(2));
1572 return DAG.getNode(ISD::AND, DL, Op->getValueType(0), Op->getOperand(1),
1573 lowerMSASplatImm(Op, 2, DAG));
1578 return lowerMSABitClear(Op, DAG);
1583 return lowerMSABitClearImm(Op, DAG);
1589 EVT VecTy = Op->getValueType(0);
1592 Op->getConstantOperandVal(3));
1595 Op->getOperand(2), Op->getOperand(1));
1602 EVT VecTy = Op->getValueType(0);
1605 Op->getConstantOperandVal(3));
1608 Op->getOperand(2), Op->getOperand(1));
1611 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0), Op->getOperand(3),
1612 Op->getOperand(2), Op->getOperand(1));
1614 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0),
1615 lowerMSASplatImm(Op, 3, DAG), Op->getOperand(2),
1616 Op->getOperand(1));
1618 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0), Op->getOperand(3),
1619 Op->getOperand(1), Op->getOperand(2));
1621 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0),
1622 lowerMSASplatImm(Op, 3, DAG), Op->getOperand(1),
1623 Op->getOperand(2));
1628 EVT VecTy = Op->getValueType(0);
1631 return DAG.getNode(ISD::XOR, DL, VecTy, Op->getOperand(1),
1633 Op->getOperand(2)));
1639 return lowerMSABinaryBitImmIntr(Op, DAG, ISD::XOR, Op->getOperand(2),
1645 return DAG.getNode(MipsISD::VALL_NONZERO, DL, Op->getValueType(0),
1646 Op->getOperand(1));
1648 return DAG.getNode(MipsISD::VANY_NONZERO, DL, Op->getValueType(0),
1649 Op->getOperand(1));
1652 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0),
1653 Op->getOperand(1), Op->getOperand(3),
1654 Op->getOperand(2));
1657 return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0),
1658 Op->getOperand(1), lowerMSASplatImm(Op, 3, DAG),
1659 Op->getOperand(2));
1664 EVT VecTy = Op->getValueType(0);
1667 return DAG.getNode(ISD::OR, DL, VecTy, Op->getOperand(1),
1669 Op->getOperand(2)));
1675 return lowerMSABinaryBitImmIntr(Op, DAG, ISD::OR, Op->getOperand(2),
1681 return DAG.getNode(MipsISD::VALL_ZERO, DL, Op->getValueType(0),
1682 Op->getOperand(1));
1684 return DAG.getNode(MipsISD::VANY_ZERO, DL, Op->getValueType(0),
1685 Op->getOperand(1));
1690 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1691 Op->getOperand(2), ISD::SETEQ);
1696 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1697 lowerMSASplatImm(Op, 2, DAG), ISD::SETEQ);
1702 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1703 Op->getOperand(2), ISD::SETLE);
1708 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1709 lowerMSASplatImm(Op, 2, DAG), ISD::SETLE);
1714 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1715 Op->getOperand(2), ISD::SETULE);
1720 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1721 lowerMSASplatImm(Op, 2, DAG), ISD::SETULE);
1726 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1727 Op->getOperand(2), ISD::SETLT);
1732 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1733 lowerMSASplatImm(Op, 2, DAG), ISD::SETLT);
1738 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1739 Op->getOperand(2), ISD::SETULT);
1744 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1745 lowerMSASplatImm(Op, 2, DAG), ISD::SETULT);
1749 return lowerMSACopyIntr(Op, DAG, MipsISD::VEXTRACT_SEXT_ELT);
1753 return lowerMSACopyIntr(Op, DAG, MipsISD::VEXTRACT_SEXT_ELT);
1757 return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SDLoc(Op),
1758 Op->getValueType(0), Op->getOperand(1),
1759 Op->getOperand(2));
1764 return lowerMSACopyIntr(Op, DAG, MipsISD::VEXTRACT_ZEXT_ELT);
1768 return lowerMSACopyIntr(Op, DAG, MipsISD::VEXTRACT_ZEXT_ELT);
1775 return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SDLoc(Op),
1776 Op->getValueType(0), Op->getOperand(1),
1777 Op->getOperand(2));
1783 return DAG.getNode(ISD::SDIV, DL, Op->getValueType(0), Op->getOperand(1),
1784 Op->getOperand(2));
1789 return DAG.getNode(ISD::UDIV, DL, Op->getValueType(0), Op->getOperand(1),
1790 Op->getOperand(2));
1794 return DAG.getNode(ISD::FADD, DL, Op->getValueType(0), Op->getOperand(1),
1795 Op->getOperand(2));
1800 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1801 Op->getOperand(2), ISD::SETOEQ);
1804 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1805 Op->getOperand(2), ISD::SETOLE);
1808 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1809 Op->getOperand(2), ISD::SETOLT);
1812 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1813 Op->getOperand(2), ISD::SETONE);
1816 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1817 Op->getOperand(2), ISD::SETO);
1820 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1821 Op->getOperand(2), ISD::SETUEQ);
1824 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1825 Op->getOperand(2), ISD::SETULE);
1828 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1829 Op->getOperand(2), ISD::SETULT);
1832 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1833 Op->getOperand(2), ISD::SETUO);
1836 return DAG.getSetCC(DL, Op->getValueType(0), Op->getOperand(1),
1837 Op->getOperand(2), ISD::SETUNE);
1841 return DAG.getNode(ISD::FDIV, DL, Op->getValueType(0), Op->getOperand(1),
1842 Op->getOperand(2));
1846 return DAG.getNode(ISD::UINT_TO_FP, DL, Op->getValueType(0),
1847 Op->getOperand(1));
1850 return DAG.getNode(ISD::SINT_TO_FP, DL, Op->getValueType(0),
1851 Op->getOperand(1));
1856 EVT ResTy = Op->getValueType(0);
1858 Op->getOperand(1));
1867 EVT ResTy = Op->getValueType(0);
1869 ISD::FMUL, SDLoc(Op), ResTy, Op->getOperand(1),
1870 DAG.getNode(ISD::FEXP2, SDLoc(Op), ResTy, Op->getOperand(2)));
1874 return DAG.getNode(ISD::FLOG2, DL, Op->getValueType(0), Op->getOperand(1));
1877 return DAG.getNode(ISD::FMA, SDLoc(Op), Op->getValueType(0),
1878 Op->getOperand(1), Op->getOperand(2), Op->getOperand(3));
1882 return DAG.getNode(ISD::FMUL, DL, Op->getValueType(0), Op->getOperand(1),
1883 Op->getOperand(2));
1888 EVT ResTy = Op->getValueType(0);
1889 return DAG.getNode(ISD::FSUB, SDLoc(Op), ResTy, Op->getOperand(1),
1890 DAG.getNode(ISD::FMUL, SDLoc(Op), ResTy,
1891 Op->getOperand(2), Op->getOperand(3)));
1895 return DAG.getNode(ISD::FRINT, DL, Op->getValueType(0), Op->getOperand(1));
1898 return DAG.getNode(ISD::FSQRT, DL, Op->getValueType(0), Op->getOperand(1));
1902 return DAG.getNode(ISD::FSUB, DL, Op->getValueType(0), Op->getOperand(1),
1903 Op->getOperand(2));
1907 return DAG.getNode(ISD::FP_TO_UINT, DL, Op->getValueType(0),
1908 Op->getOperand(1));
1911 return DAG.getNode(ISD::FP_TO_SINT, DL, Op->getValueType(0),
1912 Op->getOperand(1));
1917 return DAG.getNode(MipsISD::ILVEV, DL, Op->getValueType(0),
1918 Op->getOperand(1), Op->getOperand(2));
1923 return DAG.getNode(MipsISD::ILVL, DL, Op->getValueType(0),
1924 Op->getOperand(1), Op->getOperand(2));
1929 return DAG.getNode(MipsISD::ILVOD, DL, Op->getValueType(0),
1930 Op->getOperand(1), Op->getOperand(2));
1935 return DAG.getNode(MipsISD::ILVR, DL, Op->getValueType(0),
1936 Op->getOperand(1), Op->getOperand(2));
1941 return DAG.getNode(ISD::INSERT_VECTOR_ELT, SDLoc(Op), Op->getValueType(0),
1942 Op->getOperand(1), Op->getOperand(3), Op->getOperand(2));
1947 return DAG.getNode(MipsISD::INSVE, DL, Op->getValueType(0),
1948 Op->getOperand(1), Op->getOperand(2), Op->getOperand(3),
1954 return lowerMSASplatImm(Op, 1, DAG);
1957 EVT ResTy = Op->getValueType(0);
1958 return DAG.getNode(ISD::ADD, SDLoc(Op), ResTy, Op->getOperand(1),
1959 DAG.getNode(ISD::SHL, SDLoc(Op), ResTy,
1960 Op->getOperand(2), Op->getOperand(3)));
1966 EVT ResTy = Op->getValueType(0);
1967 return DAG.getNode(ISD::ADD, SDLoc(Op), ResTy, Op->getOperand(1),
1968 DAG.getNode(ISD::MUL, SDLoc(Op), ResTy,
1969 Op->getOperand(2), Op->getOperand(3)));
1975 return DAG.getNode(MipsISD::VSMAX, DL, Op->getValueType(0),
1976 Op->getOperand(1), Op->getOperand(2));
1981 return DAG.getNode(MipsISD::VUMAX, DL, Op->getValueType(0),
1982 Op->getOperand(1), Op->getOperand(2));
1987 return DAG.getNode(MipsISD::VSMAX, DL, Op->getValueType(0),
1988 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
1993 return DAG.getNode(MipsISD::VUMAX, DL, Op->getValueType(0),
1994 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
1999 return DAG.getNode(MipsISD::VSMIN, DL, Op->getValueType(0),
2000 Op->getOperand(1), Op->getOperand(2));
2005 return DAG.getNode(MipsISD::VUMIN, DL, Op->getValueType(0),
2006 Op->getOperand(1), Op->getOperand(2));
2011 return DAG.getNode(MipsISD::VSMIN, DL, Op->getValueType(0),
2012 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2017 return DAG.getNode(MipsISD::VUMIN, DL, Op->getValueType(0),
2018 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2023 return DAG.getNode(ISD::SREM, DL, Op->getValueType(0), Op->getOperand(1),
2024 Op->getOperand(2));
2029 return DAG.getNode(ISD::UREM, DL, Op->getValueType(0), Op->getOperand(1),
2030 Op->getOperand(2));
2035 return DAG.getNode(ISD::MUL, DL, Op->getValueType(0), Op->getOperand(1),
2036 Op->getOperand(2));
2041 EVT ResTy = Op->getValueType(0);
2042 return DAG.getNode(ISD::SUB, SDLoc(Op), ResTy, Op->getOperand(1),
2043 DAG.getNode(ISD::MUL, SDLoc(Op), ResTy,
2044 Op->getOperand(2), Op->getOperand(3)));
2050 return DAG.getNode(ISD::CTLZ, DL, Op->getValueType(0), Op->getOperand(1));
2052 SDValue Res = DAG.getNode(ISD::OR, DL, Op->getValueType(0),
2053 Op->getOperand(1), Op->getOperand(2));
2057 SDValue Res = DAG.getNode(ISD::OR, DL, Op->getValueType(0),
2058 Op->getOperand(1),
2059 lowerMSASplatImm(Op, 2, DAG));
2063 return DAG.getNode(ISD::OR, DL, Op->getValueType(0), Op->getOperand(1),
2064 Op->getOperand(2));
2066 return DAG.getNode(ISD::OR, DL, Op->getValueType(0),
2067 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2072 return DAG.getNode(MipsISD::PCKEV, DL, Op->getValueType(0),
2073 Op->getOperand(1), Op->getOperand(2));
2078 return DAG.getNode(MipsISD::PCKOD, DL, Op->getValueType(0),
2079 Op->getOperand(1), Op->getOperand(2));
2084 return DAG.getNode(ISD::CTPOP, DL, Op->getValueType(0), Op->getOperand(1));
2088 return DAG.getNode(MipsISD::SHF, DL, Op->getValueType(0),
2089 Op->getOperand(2), Op->getOperand(1));
2094 return DAG.getNode(ISD::SHL, DL, Op->getValueType(0), Op->getOperand(1),
2095 Op->getOperand(2));
2100 return DAG.getNode(ISD::SHL, DL, Op->getValueType(0),
2101 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2110 return DAG.getNode(MipsISD::VSHF, DL, Op->getValueType(0),
2111 lowerMSASplatZExt(Op, 2, DAG), Op->getOperand(1),
2112 Op->getOperand(1));
2117 return DAG.getNode(MipsISD::VSHF, DL, Op->getValueType(0),
2118 lowerMSASplatImm(Op, 2, DAG), Op->getOperand(1),
2119 Op->getOperand(1));
2124 return DAG.getNode(ISD::SRA, DL, Op->getValueType(0), Op->getOperand(1),
2125 Op->getOperand(2));
2130 return DAG.getNode(ISD::SRA, DL, Op->getValueType(0),
2131 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2136 return DAG.getNode(ISD::SRL, DL, Op->getValueType(0), Op->getOperand(1),
2137 Op->getOperand(2));
2142 return DAG.getNode(ISD::SRL, DL, Op->getValueType(0),
2143 OpOp, 2, DAG));
2148 return DAG.getNode(ISD::SUB, DL, Op->getValueType(0), Op->getOperand(1),
2149 Op->getOperand(2));
2154 return DAG.getNode(ISD::SUB, DL, Op->getValueType(0),
2155 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2160 return DAG.getNode(MipsISD::VSHF, DL, Op->getValueType(0),
2161 Op->getOperand(1), Op->getOperand(2), Op->getOperand(3));
2163 return DAG.getNode(ISD::XOR, DL, Op->getValueType(0), Op->getOperand(1),
2164 Op->getOperand(2));
2166 return DAG.getNode(ISD::XOR, DL, Op->getValueType(0),
2167 Op->getOperand(1), lowerMSASplatImm(Op, 2, DAG));
2175 static SDValue lowerMSALoadIntr(SDValue Op, SelectionDAG &DAG, unsigned Intr) {
2176 SDLoc DL(Op);
2177 SDValue ChainIn = Op->getOperand(0);
2178 SDValue Address = Op->getOperand(2);
2179 SDValue Offset = Op->getOperand(3);
2180 EVT ResTy = Op->getValueType(0);
2189 SDValue MipsSETargetLowering::lowerINTRINSIC_W_CHAIN(SDValue Op,
2191 unsigned Intr = cast<ConstantSDNode>(Op->getOperand(1))->getZExtValue();
2196 return lowerDSPIntr(Op, DAG, MipsISD::EXTP);
2198 return lowerDSPIntr(Op, DAG, MipsISD::EXTPDP);
2200 return lowerDSPIntr(Op, DAG, MipsISD::EXTR_W);
2202 return lowerDSPIntr(Op, DAG, MipsISD::EXTR_R_W);
2204 return lowerDSPIntr(Op, DAG, MipsISD::EXTR_RS_W);
2206 return lowerDSPIntr(Op, DAG, MipsISD::EXTR_S_H);
2208 return lowerDSPIntr(Op, DAG, MipsISD::MTHLIP);
2210 return lowerDSPIntr(Op, DAG, MipsISD::MULSAQ_S_W_PH);
2212 return lowerDSPIntr(Op, DAG, MipsISD::MAQ_S_W_PHL);
2214 return lowerDSPIntr(Op, DAG, MipsISD::MAQ_S_W_PHR);
2216 return lowerDSPIntr(Op, DAG, MipsISD::MAQ_SA_W_PHL);
2218 return lowerDSPIntr(Op, DAG, MipsISD::MAQ_SA_W_PHR);
2220 return lowerDSPIntr(Op, DAG, MipsISD::DPAQ_S_W_PH);
2222 return lowerDSPIntr(Op, DAG, MipsISD::DPSQ_S_W_PH);
2224 return lowerDSPIntr(Op, DAG, MipsISD::DPAQ_SA_L_W);
2226 return lowerDSPIntr(Op, DAG, MipsISD::DPSQ_SA_L_W);
2228 return lowerDSPIntr(Op, DAG, MipsISD::DPAQX_S_W_PH);
2230 return lowerDSPIntr(Op, DAG, MipsISD::DPAQX_SA_W_PH);
2232 return lowerDSPIntr(Op, DAG, MipsISD::DPSQX_S_W_PH);
2234 return lowerDSPIntr(Op, DAG, MipsISD::DPSQX_SA_W_PH);
2239 return lowerMSALoadIntr(Op, DAG, Intr);
2243 static SDValue lowerMSAStoreIntr(SDValue Op, SelectionDAG &DAG, unsigned Intr) {
2244 SDLoc DL(Op);
2245 SDValue ChainIn = Op->getOperand(0);
2246 SDValue Value = Op->getOperand(2);
2247 SDValue Address = Op->getOperand(3);
2248 SDValue Offset = Op->getOperand(4);
2257 SDValue MipsSETargetLowering::lowerINTRINSIC_VOID(SDValue Op,
2259 unsigned Intr = cast<ConstantSDNode>(Op->getOperand(1))->getZExtValue();
2267 return lowerMSAStoreIntr(Op, DAG, Intr);
2297 lowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const {
2298 SDLoc DL(Op);
2299 EVT ResTy = Op->getValueType(0);
2300 SDValue Op0 = Op->getOperand(0);
2307 SDValue Op1 = Op->getOperand(1);
2313 return Op;
2316 static bool isConstantOrUndef(const SDValue Op) {
2317 if (Op->isUndef())
2319 if (isa<ConstantSDNode>(Op))
2321 if (isa<ConstantFPSDNode>(Op))
2326 static bool isConstantOrUndefBUILD_VECTOR(const BuildVectorSDNode *Op) {
2327 for (unsigned i = 0; i < Op->getNumOperands(); ++i)
2328 if (isConstantOrUndef(Op->getOperand(i)))
2346 SDValue MipsSETargetLowering::lowerBUILD_VECTOR(SDValue Op,
2348 BuildVectorSDNode *Node = cast<BuildVectorSDNode>(Op);
2349 EVT ResTy = Op->getValueType(0);
2350 SDLoc DL(Op);
2371 return Op;
2401 return Op;
2441 static SDValue lowerVECTOR_SHUFFLE_SHF(SDValue Op, EVT ResTy,
2485 SDLoc DL(Op);
2487 DAG.getConstant(Imm, DL, MVT::i32), Op->getOperand(0));
2521 static bool isVECTOR_SHUFFLE_SPLATI(SDValue Op, EVT ResTy,
2553 static SDValue lowerVECTOR_SHUFFLE_ILVEV(SDValue Op, EVT ResTy,
2566 Wt = Op->getOperand(0);
2568 Wt = Op->getOperand(1);
2575 Ws = Op->getOperand(0);
2577 Ws = Op->getOperand(1);
2581 return DAG.getNode(MipsISD::ILVEV, SDLoc(Op), ResTy, Ws, Wt);
2599 static SDValue lowerVECTOR_SHUFFLE_ILVOD(SDValue Op, EVT ResTy,
2612 Wt = Op
2614 Wt = Op->getOperand(1);
2621 Ws = Op->getOperand(0);
2623 Ws = Op->getOperand(1);
2627 return DAG.getNode(MipsISD::ILVOD, SDLoc(Op), ResTy, Wt, Ws);
2646 static SDValue lowerVECTOR_SHUFFLE_ILVR(SDValue Op, EVT ResTy,
2659 Wt = Op->getOperand(0);
2661 Wt = Op->getOperand(1);
2668 Ws = Op->getOperand(0);
2670 Ws = Op->getOperand(1);
2674 return DAG.getNode(MipsISD::ILVR, SDLoc(Op), ResTy, Ws, Wt);
2693 static SDValue lowerVECTOR_SHUFFLE_ILVL(SDValue Op, EVT ResTy,
2707 Wt = Op->getOperand(0);
2709 Wt = Op->getOperand(1);
2716 Ws = Op->getOperand(0);
2719 Ws = Op->getOperand(1);
2723 return DAG.getNode(MipsISD::ILVL, SDLoc(Op), ResTy, Ws, Wt);
2741 static SDValue lowerVECTOR_SHUFFLE_PCKEV(SDValue Op, EVT ResTy,
2753 Wt = Op->getOperand(0);
2755 Wt = Op->getOperand(1);
2760 Ws = Op->getOperand(0);
2762 Ws = Op->getOperand(1);
2766 return DAG.getNode(MipsISD::PCKEV, SDLoc(Op), ResTy, Ws, Wt);
2784 static SDValue lowerVECTOR_SHUFFLE_PCKOD(SDValue Op, EVT ResTy,
2796 Wt = Op->getOperand(0);
2798 Wt = Op->getOperand(1);
2803 Ws = Op->getOperand(0);
2805 Ws = Op->getOperand(1);
2809 return DAG.getNode(MipsISD::PCKOD, SDLoc(Op), ResTy, Ws, Wt);
2820 static SDValue lowerVECTOR_SHUFFLE_VSHF(SDValue Op, EVT ResTy,
2830 SDLoc DL(Op);
2850 Op0 = Op->getOperand(0);
2851 Op1 = Op->getOperand(1);
2853 Op0 = Op1 = Op->getOperand(0);
2855 Op0 = Op1 = Op->getOperand(1);
2871 SDValue MipsSETargetLowering::lowerVECTOR_SHUFFLE(SDValue Op,
2873 ShuffleVectorSDNode *Node = cast<ShuffleVectorSDNode>(Op);
2874 EVT ResTy = Op->getValueType(0);
2887 if (isVECTOR_SHUFFLE_SPLATI(Op, ResTy, Indices, DAG))
2888 return lowerVECTOR_SHUFFLE_VSHF(Op, ResTy, Indices, DAG);
2890 if ((Result = lowerVECTOR_SHUFFLE_ILVEV(Op, ResTy, Indices, DAG)))
2892 if ((Result = lowerVECTOR_SHUFFLE_ILVOD(Op, ResTy, Indices, DAG)))
2894 if ((Result = lowerVECTOR_SHUFFLE_ILVL(Op, ResTy, Indices, DAG)))
2896 if ((Result = lowerVECTOR_SHUFFLE_ILVR(Op, ResTy, Indices, DAG)))
2898 if ((Result = lowerVECTOR_SHUFFLE_PCKEV(Op, ResTy, Indices, DAG)))
2900 if ((Result = lowerVECTOR_SHUFFLE_PCKOD(Op, ResTy, Indices, DAG)))
2902 if ((Result = lowerVECTOR_SHUFFLE_SHF(Op, ResTy, Indices, DAG)))
2904 return lowerVECTOR_SHUFFLE_VSHF(Op, ResTy, Indices, DAG);