[llvm] r313512 - [X86] Strengthen some of the SD type constraints in X86InstrFragmentsSIMD.td

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 17 22:50:55 PDT 2017


Author: ctopper
Date: Sun Sep 17 22:50:54 2017
New Revision: 313512

URL: http://llvm.org/viewvc/llvm-project?rev=313512&view=rev
Log:
[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.

Modified:
    llvm/trunk/lib/Target/X86/X86InstrFragmentsSIMD.td

Modified: llvm/trunk/lib/Target/X86/X86InstrFragmentsSIMD.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrFragmentsSIMD.td?rev=313512&r1=313511&r2=313512&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrFragmentsSIMD.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrFragmentsSIMD.td Sun Sep 17 22:50:54 2017
@@ -146,8 +146,11 @@ def X86fpextRnd  : SDNode<"X86ISD::VFPEX
                                              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"
 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 X86vsrav   : SDNode<"X86ISD::VSRAV" ,
-                        SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0,1>,
-                                             SDTCisSameAs<0,2>]>>;
-
-def X86vshli   : SDNode<"X86ISD::VSHLI", SDTIntShiftOp>;
-def X86vsrli   : SDNode<"X86ISD::VSRLI", SDTIntShiftOp>;
-def X86vsrai   : SDNode<"X86ISD::VSRAI", SDTIntShiftOp>;
+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", X86vshiftvariable>;
+
+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>,




More information about the llvm-commits mailing list