Lines Matching defs:Permute
3701 return DAG.getNode(SystemZISD::PERMUTE, SDLoc(Op), Op.getValueType(),
3743 // of a VPERM with permute vector Bytes. If Opcode takes three operands,
3746 struct Permute {
3753 static const Permute PermuteForms[] = {
3816 // Bytes is a VPERM-like permute vector, except that -1 is used for
3825 static bool matchPermute(const SmallVectorImpl<int> &Bytes, const Permute &P,
3831 // Make sure that the two permute vectors use the same suboperand
3848 // As above, but search for a matching permute.
3849 static const Permute *matchPermute(const SmallVectorImpl<int> &Bytes,
3857 // Bytes is a VPERM-like permute vector, except that -1 is used for
3858 // undefined bytes. This permute is an operand of an outer permute.
3860 // implemented using P. If so, set Transform to a VPERM-like permute vector
3861 // that, when applied to the result of P, gives the original permute in Bytes.
3863 const Permute &P,
3883 // As above, but search for a matching permute.
3884 static const Permute *matchDoublePermute(const SmallVectorImpl<int> &Bytes,
3922 // Bytes is a VPERM-like permute vector, except that -1 is used for
3944 // Bytes is a VPERM-like permute vector, except that -1 is used for
3978 const Permute &P, SDValue Op0, SDValue Op1) {
4003 // Bytes is a VPERM-like permute vector, except that -1 is used for
4018 // Fall back on VPERM. Construct an SDNode for the permute vector.
4026 return DAG.getNode(SystemZISD::PERMUTE, DL, MVT::v16i8, Ops[0], Ops[1], Op2);
4136 // the parent node's permute vector to compensate for the new order.
4161 if (const Permute *P = matchDoublePermute(NewBytes, NewBytesMap)) {
4167 "Invalid double permute");
4170 assert(NewBytesMap[J] < 0 && "Invalid double permute");
4190 // Look for an instruction that can do the permute without resorting
4194 if (const Permute *P = matchPermute(Bytes, OpNo0, OpNo1))
5032 OPCODE(PERMUTE);
5125 // Get a VPERM-like permute mask and see whether the bytes covered
5738 // VECTOR PERMUTE DWORD IMMEDIATE selects one element from each source.