SDTCisSameSizeAs<0, 2>,
SDTCisVT<3, i32>]>>;
-def X86vshldq : SDNode<"X86ISD::VSHLDQ", SDTIntShiftOp>;
-def X86vshrdq : SDNode<"X86ISD::VSRLDQ", SDTIntShiftOp>;
+def X86vshiftimm : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
+ SDTCisVT<2, i8>, SDTCisInt<0>]>;
+
+def X86vshldq : SDNode<"X86ISD::VSHLDQ", X86vshiftimm>;
+def X86vshrdq : SDNode<"X86ISD::VSRLDQ", X86vshiftimm>;
def X86cmpp : SDNode<"X86ISD::CMPP", SDTX86VFCMP>;
def X86pcmpeq : SDNode<"X86ISD::PCMPEQ", SDTIntBinOp, [SDNPCommutative]>;
def X86pcmpgt : SDNode<"X86ISD::PCMPGT", SDTIntBinOp>;
SDTCisSameNumEltsAs<0, 1>, SDTCisVT<3, i8>]>;
def X86CmpMaskCCRound :
SDTypeProfile<1, 4, [SDTCisVec<0>,SDTCVecEltisVT<0, i1>,
- SDTCisVec<1>, SDTCisSameAs<2, 1>,
+ SDTCisVec<1>, SDTCisFP<1>, SDTCisSameAs<2, 1>,
SDTCisSameNumEltsAs<0, 1>, SDTCisVT<3, i8>,
SDTCisVT<4, i32>]>;
def X86CmpMaskCCScalar :
- SDTypeProfile<1, 3, [SDTCisInt<0>, SDTCisSameAs<1, 2>, SDTCisVT<3, i8>]>;
+ SDTypeProfile<1, 3, [SDTCisInt<0>, SDTCisFP<1>, SDTCisSameAs<1, 2>,
+ SDTCisVT<3, i8>]>;
def X86CmpMaskCCScalarRound :
- SDTypeProfile<1, 4, [SDTCisInt<0>, SDTCisSameAs<1, 2>, SDTCisVT<3, i8>,
- SDTCisVT<4, i32>]>;
+ SDTypeProfile<1, 4, [SDTCisInt<0>, SDTCisFP<1>, SDTCisSameAs<1, 2>,
+ SDTCisVT<3, i8>, SDTCisVT<4, i32>]>;
def X86cmpm : SDNode<"X86ISD::CMPM", X86CmpMaskCC>;
def X86cmpmRnd : SDNode<"X86ISD::CMPM_RND", X86CmpMaskCCRound>;
def X86cmpms : SDNode<"X86ISD::FSETCCM", X86CmpMaskCCScalar>;
def X86cmpmsRnd : SDNode<"X86ISD::FSETCCM_RND", X86CmpMaskCCScalarRound>;
-def X86vshl : SDNode<"X86ISD::VSHL",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisVec<2>]>>;
-def X86vsrl : SDNode<"X86ISD::VSRL",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisVec<2>]>>;
-def X86vsra : SDNode<"X86ISD::VSRA",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisVec<2>]>>;
+def X86vshiftuniform : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
+ SDTCisVec<2>, SDTCisInt<0>,
+ SDTCisInt<1>]>;
+
+def X86vshl : SDNode<"X86ISD::VSHL", X86vshiftuniform>;
+def X86vsrl : SDNode<"X86ISD::VSRL", X86vshiftuniform>;
+def X86vsra : SDNode<"X86ISD::VSRA", X86vshiftuniform>;
+
+def X86vshiftvariable : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
+ SDTCisSameAs<0,2>, SDTCisInt<0>]>;
-def X86vsrav : SDNode<"X86ISD::VSRAV" ,
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisSameAs<0,2>]>>;
+def X86vsrav : SDNode<"X86ISD::VSRAV", X86vshiftvariable>;
-def X86vshli : SDNode<"X86ISD::VSHLI", SDTIntShiftOp>;
-def X86vsrli : SDNode<"X86ISD::VSRLI", SDTIntShiftOp>;
-def X86vsrai : SDNode<"X86ISD::VSRAI", SDTIntShiftOp>;
+def X86vshli : SDNode<"X86ISD::VSHLI", X86vshiftimm>;
+def X86vsrli : SDNode<"X86ISD::VSRLI", X86vshiftimm>;
+def X86vsrai : SDNode<"X86ISD::VSRAI", X86vshiftimm>;
def X86kshiftl : SDNode<"X86ISD::KSHIFTL",
SDTypeProfile<1, 2, [SDTCVecEltisVT<0, i1>,
SDTCisSameAs<0, 1>,
SDTCisVT<2, i8>]>>;
-def X86vrotli : SDNode<"X86ISD::VROTLI", SDTIntShiftOp>;
-def X86vrotri : SDNode<"X86ISD::VROTRI", SDTIntShiftOp>;
+def X86vrotli : SDNode<"X86ISD::VROTLI", X86vshiftimm>;
+def X86vrotri : SDNode<"X86ISD::VROTRI", X86vshiftimm>;
-def X86vprot : SDNode<"X86ISD::VPROT",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisSameAs<0,2>]>>;
-def X86vproti : SDNode<"X86ISD::VPROTI",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisVT<2, i8>]>>;
+def X86vprot : SDNode<"X86ISD::VPROT", X86vshiftvariable>;
+def X86vproti : SDNode<"X86ISD::VPROTI", X86vshiftimm>;
-def X86vpshl : SDNode<"X86ISD::VPSHL",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisSameAs<0,2>]>>;
-def X86vpsha : SDNode<"X86ISD::VPSHA",
- SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
- SDTCisSameAs<0,2>]>>;
+def X86vpshl : SDNode<"X86ISD::VPSHL", X86vshiftvariable>;
+def X86vpsha : SDNode<"X86ISD::VPSHA", X86vshiftvariable>;
def X86vpcom : SDNode<"X86ISD::VPCOM",
SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
SDTCisSameAs<0,2>,
- SDTCisVT<3, i8>]>>;
+ SDTCisVT<3, i8>, SDTCisInt<0>]>>;
def X86vpcomu : SDNode<"X86ISD::VPCOMU",
SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
SDTCisSameAs<0,2>,
- SDTCisVT<3, i8>]>>;
+ SDTCisVT<3, i8>, SDTCisInt<0>]>>;
def X86vpermil2 : SDNode<"X86ISD::VPERMIL2",
SDTypeProfile<1, 4, [SDTCisVec<0>, SDTCisSameAs<0,1>,
SDTCisSameAs<0,2>,