From: Simon Pilgrim Date: Thu, 10 Nov 2016 14:35:09 +0000 (+0000) Subject: [DAGCombiner] Correctly extract the ConstOrConstSplat shift value for SHL nodes X-Git-Tag: llvmorg-4.0.0-rc1~5039 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37c9034bd6d9ac397450e19314f875823e1b6819;p=platform%2Fupstream%2Fllvm.git [DAGCombiner] Correctly extract the ConstOrConstSplat shift value for SHL nodes We were failing to extract a constant splat shift value if the shifted value was being masked. The (shl (and (setcc) N01CV) N1CV) -> (and (setcc) N01CV<(N1); if (VT.isVector()) { if (SDValue FoldedVOp = SimplifyVBinOp(N)) return FoldedVOp; @@ -4533,12 +4532,12 @@ SDValue DAGCombiner::visitSHL(SDNode *N) { N01CV, N1CV)) return DAG.getNode(ISD::AND, SDLoc(N), VT, N00, C); } - } else { - N1C = isConstOrConstSplat(N1); } } } + ConstantSDNode *N1C = isConstOrConstSplat(N1); + // fold (shl c1, c2) -> c1<isOpaque()) diff --git a/llvm/test/CodeGen/X86/combine-shl.ll b/llvm/test/CodeGen/X86/combine-shl.ll index a35a309..68c4ddf 100644 --- a/llvm/test/CodeGen/X86/combine-shl.ll +++ b/llvm/test/CodeGen/X86/combine-shl.ll @@ -47,12 +47,10 @@ define <4 x i32> @combine_vec_shl_outofrange1(<4 x i32> %x) { define <4 x i32> @combine_vec_shl_outofrange2(<4 x i32> %a0) { ; SSE-LABEL: combine_vec_shl_outofrange2: ; SSE: # BB#0: -; SSE-NEXT: xorps %xmm0, %xmm0 ; SSE-NEXT: retq ; ; AVX-LABEL: combine_vec_shl_outofrange2: ; AVX: # BB#0: -; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: retq %1 = and <4 x i32> %a0, %2 = shl <4 x i32> %1,