Don't decode vperm2i128 or vperm2f128 into a shuffle if bit 3 or 7 of the immediate...
[oota-llvm.git] / lib / Target / X86 / Utils / X86ShuffleDecode.cpp
index 32c722acc43767664aeffcbb20110b887c9509bf..a802333002d80966e3c4ce3d96a06657bc85dfda 100644 (file)
@@ -169,6 +169,9 @@ void DecodeUNPCKLMask(EVT VT, SmallVectorImpl<int> &ShuffleMask) {
 
 void DecodeVPERM2X128Mask(EVT VT, unsigned Imm,
                           SmallVectorImpl<int> &ShuffleMask) {
+  if (Imm & 0x88)
+    return; // Not a shuffle
+
   unsigned HalfSize = VT.getVectorNumElements()/2;
   unsigned FstHalfBegin = (Imm & 0x3) * HalfSize;
   unsigned SndHalfBegin = ((Imm >> 4) & 0x3) * HalfSize;