summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-09-18 05:50:54 +0000
committerCraig Topper <craig.topper@intel.com>2017-09-18 05:50:54 +0000
commitfc52eb37af2f859ffeb11b08732f508845fb0c6d (patch)
treeb07ba66e4a85bb5f77c64baf8cbdc354183accc6
parent0004057985a30c879f0f36ab805ef1ff059247f8 (diff)
downloadbcm5719-llvm-fc52eb37af2f859ffeb11b08732f508845fb0c6d.tar.gz
bcm5719-llvm-fc52eb37af2f859ffeb11b08732f508845fb0c6d.zip
[X86] Strengthen some of the SD type constraints in X86InstrFragmentsSIMD.td
This effects the vector shift and rotates as well as some of the vector compares. The changes to the shifts by immediates allows a few hundred bytes to be removed by removing type checks for the size of the immediate containing the shift/rotate amount. llvm-svn: 313512
-rw-r--r--llvm/lib/Target/X86/X86InstrFragmentsSIMD.td69
1 files changed, 32 insertions, 37 deletions
diff --git a/llvm/lib/Target/X86/X86InstrFragmentsSIMD.td b/llvm/lib/Target/X86/X86InstrFragmentsSIMD.td
index c791e7c7cd4..ca3d78dd7f2 100644
--- a/llvm/lib/Target/X86/X86InstrFragmentsSIMD.td
+++ b/llvm/lib/Target/X86/X86InstrFragmentsSIMD.td
@@ -146,8 +146,11 @@ def X86fpextRnd : SDNode<"X86ISD::VFPEXTS_RND",
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>;
@@ -164,15 +167,16 @@ def X86CmpMaskCC :
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>;
@@ -180,23 +184,22 @@ def X86cmpmu : SDNode<"X86ISD::CMPMU", X86CmpMaskCC>;
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>,
@@ -207,31 +210,23 @@ def X86kshiftr : SDNode<"X86ISD::KSHIFTR",
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>,
OpenPOWER on IntegriCloud