From: Eli Friedman Date: Thu, 15 Sep 2011 01:14:29 +0000 (+0000) Subject: Make demanded-elt simplification for shufflevector slightly stronger. Spotted by... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c82751dd6761e3db62668b6b1cfddd4f659855b6;p=oota-llvm.git Make demanded-elt simplification for shufflevector slightly stronger. Spotted by inspection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139768 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index 66f39be17b3..81929bc6230 100644 --- a/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -962,6 +962,9 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, APInt DemandedElts, unsigned MaskVal = Shuffle->getMaskValue(i); if (MaskVal == -1u) { UndefElts.setBit(i); + } else if (!DemandedElts[i]) { + NewUndefElts = true; + UndefElts.setBit(i); } else if (MaskVal < LHSVWidth) { if (UndefElts4[MaskVal]) { NewUndefElts = true; diff --git a/test/Transforms/InstCombine/vec_demanded_elts.ll b/test/Transforms/InstCombine/vec_demanded_elts.ll index e0188fe91ae..cc63371eded 100644 --- a/test/Transforms/InstCombine/vec_demanded_elts.ll +++ b/test/Transforms/InstCombine/vec_demanded_elts.ll @@ -152,3 +152,14 @@ entry: ret <4 x i32> %0 } declare <4 x i32> @llvm.x86.sse41.pmovzxwd(<8 x i16>) nounwind readnone + +define <4 x float> @dead_shuffle_elt(<4 x float> %x, <2 x float> %y) nounwind { +entry: +; CHECK: define <4 x float> @dead_shuffle_elt +; CHECK: shufflevector <2 x float> %y, <2 x float> undef, <4 x i32> + %shuffle.i = shufflevector <2 x float> %y, <2 x float> %y, <4 x i32> + %shuffle9.i = shufflevector <4 x float> %x, <4 x float> %shuffle.i, <4 x i32> + ret <4 x float> %shuffle9.i +} + +