OSDN Git Service

Fix type of shuffle resulted from shuffle merge.
authorSerge Pavlov <sepavloff@gmail.com>
Tue, 13 May 2014 06:07:21 +0000 (06:07 +0000)
committerSerge Pavlov <sepavloff@gmail.com>
Tue, 13 May 2014 06:07:21 +0000 (06:07 +0000)
This fix resolves PR19730.

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

lib/Transforms/InstCombine/InstCombineVectorOps.cpp
test/Transforms/InstCombine/vec_shuffle.ll

index bd647d9..8c5e202 100644 (file)
@@ -1114,12 +1114,10 @@ Instruction *InstCombiner::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
 
   // If the result mask is an identity, replace uses of this instruction with
   // corresponding argument.
-  if (VWidth == LHSWidth) {
-    bool isLHSID, isRHSID;
-    RecognizeIdentityMask(newMask, isLHSID, isRHSID);
-    if (isLHSID) return ReplaceInstUsesWith(SVI, newLHS);
-    if (isRHSID) return ReplaceInstUsesWith(SVI, newRHS);
-  }
+  bool isLHSID, isRHSID;
+  RecognizeIdentityMask(newMask, isLHSID, isRHSID);
+  if (isLHSID && VWidth == LHSOp0Width) return ReplaceInstUsesWith(SVI, newLHS);
+  if (isRHSID && VWidth == RHSOp0Width) return ReplaceInstUsesWith(SVI, newRHS);
 
   return MadeChange ? &SVI : nullptr;
 }
index a3f7f79..2e6f787 100644 (file)
@@ -386,3 +386,11 @@ define <4 x i16> @pr19717a(<8 x i16> %in0, <8 x i16> %in1) {
   %mul = mul <4 x i16> %shuffle, %shuffle1
   ret <4 x i16> %mul
 }
+
+define <8 x i8> @pr19730(<16 x i8> %in0) {
+; CHECK-LABEL: @pr19730(
+; CHECK: shufflevector
+  %shuffle = shufflevector <16 x i8> %in0, <16 x i8> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
+  %shuffle1 = shufflevector <8 x i8> %shuffle, <8 x i8> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
+  ret <8 x i8> %shuffle1
+}