This is the correct fix for PR1427. This fixes mmx-shuffle.ll and doesn't
authorChris Lattner <sabre@nondot.org>
Thu, 17 May 2007 17:13:13 +0000 (17:13 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 17 May 2007 17:13:13 +0000 (17:13 +0000)
cause other regressions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37160 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 6de6b21c78e427f0b197d8626fbd926fa10345c6..0616513b5ee1203ae7d2f84eae4ca24ca6d2998d 100644 (file)
@@ -2675,7 +2675,8 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG) {
       return Op;
     }
 
-    if (X86::isSHUFPMask(PermMask.Val))
+    if (X86::isSHUFPMask(PermMask.Val) &&
+        MVT::getSizeInBits(VT) != 64)    // Don't do this for MMX.
       return Op;
 
     // Handle v8i16 shuffle high / low shuffle node pair.
@@ -2712,7 +2713,9 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG) {
     }
   }
 
-  if (NumElems == 4) {
+  if (NumElems == 4 && 
+      // Don't do this for MMX.
+      MVT::getSizeInBits(VT) != 64) {
     MVT::ValueType MaskVT = PermMask.getValueType();
     MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT);
     SmallVector<std::pair<int, int>, 8> Locs;