Surprisingly, we missed a trivial case here. Fix that!
authorNick Lewycky <nicholas@mxc.ca>
Fri, 28 Sep 2012 09:33:53 +0000 (09:33 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Fri, 28 Sep 2012 09:33:53 +0000 (09:33 +0000)
llvm-svn: 164814

llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
llvm/test/Transforms/InstCombine/vec_shuffle.ll

index 70483ce..0ba7340 100644 (file)
@@ -930,6 +930,10 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
       Value *V = Builder->CreateShuffleVector(TrueVal, FalseVal, MaskVal);
       return ReplaceInstUsesWith(SI, V);
     }
+
+    if (isa<ConstantAggregateZero>(CondVal)) {
+      return ReplaceInstUsesWith(SI, FalseVal);
+    }
   }
 
   return 0;
index a7f9fcf..14f5321 100644 (file)
@@ -188,3 +188,11 @@ define <4 x i16> @test13d(<4 x i16> %lhs, <4 x i16> %rhs) {
            <4 x i16> %lhs, <4 x i16> %rhs
   ret <4 x i16> %A
 }
+
+define <4 x i16> @test13e(<4 x i16> %lhs, <4 x i16> %rhs) {
+; CHECK: @test13e
+; CHECK-NEXT: ret <4 x i16> %rhs
+  %A = select <4 x i1> <i1 false, i1 false, i1 false, i1 false>,
+           <4 x i16> %lhs, <4 x i16> %rhs
+  ret <4 x i16> %A
+}