Change type profile for vpermv back to using operand type for the mask argument to...
authorCraig Topper <craig.topper@gmail.com>
Mon, 16 Apr 2012 06:43:40 +0000 (06:43 +0000)
committerCraig Topper <craig.topper@gmail.com>
Mon, 16 Apr 2012 06:43:40 +0000 (06:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154798 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86InstrFragmentsSIMD.td

index d10f8fb0dce7110abd7ba80066ce35215820e0fe..5bd89eae7bde04ab2a7a8a80ede39098254ebbee 100644 (file)
@@ -6655,9 +6655,11 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
     for (unsigned i = 0; i != 8; ++i) {
       permclMask.push_back(DAG.getConstant((M[i]>=0) ? M[i] : 0, MVT::i32));
     }
+    SDValue Mask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i32,
+                               &permclMask[0], 8);
+    // Bitcast is for VPERMPS since mask is v8i32 but node takes v8f32
     return DAG.getNode(X86ISD::VPERMV, dl, VT,
-                       DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i32,
-                                   &permclMask[0], 8), V1);
+                       DAG.getNode(ISD::BITCAST, dl, VT, Mask), V1);
   }
 
   if (V2IsUndef && HasAVX2 && (VT == MVT::v4i64 || VT == MVT::v4f64))
index bf36a91f0f9148cedaf10c1fe016ab690d3d74f1..35801e43229be8c4f61bcddb1ae0f3fb1697b327 100644 (file)
@@ -124,8 +124,6 @@ def SDTShuff2OpI : SDTypeProfile<1, 2, [SDTCisVec<0>,
                                  SDTCisSameAs<0,1>, SDTCisInt<2>]>;
 def SDTShuff3OpI : SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
                                  SDTCisSameAs<0,2>, SDTCisInt<3>]>;
-def SDTVPermv : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisVT<1, v8i32>,
-                              SDTCisSameAs<0,2>]>;
 
 def SDTVBroadcast : SDTypeProfile<1, 1, [SDTCisVec<0>]>;
 def SDTBlend : SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
@@ -157,7 +155,7 @@ def X86Unpckl : SDNode<"X86ISD::UNPCKL", SDTShuff2Op>;
 def X86Unpckh : SDNode<"X86ISD::UNPCKH", SDTShuff2Op>;
 
 def X86VPermilp  : SDNode<"X86ISD::VPERMILP", SDTShuff2OpI>;
-def X86VPermv    : SDNode<"X86ISD::VPERMV",   SDTVPermv>;
+def X86VPermv    : SDNode<"X86ISD::VPERMV",   SDTShuff2Op>;
 def X86VPermi    : SDNode<"X86ISD::VPERMI",   SDTShuff2OpI>;
 
 def X86VPerm2x128 : SDNode<"X86ISD::VPERM2X128", SDTShuff3OpI>;