From: Simon Pilgrim Date: Mon, 12 Aug 2019 14:01:16 +0000 (+0000) Subject: [X86][SSE] Add test showing missing demanded elts PSADBW handling X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=39bc7ded13ecfb9a76a3a51b365a93906db726db;p=llvm [X86][SSE] Add test showing missing demanded elts PSADBW handling git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368575 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/psadbw.ll b/test/CodeGen/X86/psadbw.ll index 46916898063..753e88c3dbc 100644 --- a/test/CodeGen/X86/psadbw.ll +++ b/test/CodeGen/X86/psadbw.ll @@ -13,5 +13,31 @@ define <2 x i64> @combine_psadbw_shift(<16 x i8> %0, <16 x i8> %1) { ret <2 x i64> %4 } +; Propagate the demanded result elements to the 8 aliasing source elements. +define i64 @combine_psadbw_demandedelt(<16 x i8> %0, <16 x i8> %1) { +; X86-LABEL: combine_psadbw_demandedelt: +; X86: # %bb.0: +; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2] +; X86-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,3,2] +; X86-NEXT: psadbw %xmm0, %xmm1 +; X86-NEXT: movd %xmm1, %eax +; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3] +; X86-NEXT: movd %xmm0, %edx +; X86-NEXT: retl +; +; X64-LABEL: combine_psadbw_demandedelt: +; X64: # %bb.0: +; X64-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2] +; X64-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,3,2] +; X64-NEXT: psadbw %xmm0, %xmm1 +; X64-NEXT: movq %xmm1, %rax +; X64-NEXT: retq + %3 = shufflevector <16 x i8> %0, <16 x i8> %0, <16 x i32> + %4 = shufflevector <16 x i8> %1, <16 x i8> %1, <16 x i32> + %5 = tail call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %3, <16 x i8> %4) + %6 = extractelement <2 x i64> %5, i32 0 + ret i64 %6 +} + declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>)