From 9a452740ec89f856492841af3f9c616f5be96c7c Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 12 Aug 2019 14:01:16 +0000 Subject: [PATCH] [X86][SSE] Add test showing missing demanded elts PSADBW handling llvm-svn: 368575 --- llvm/test/CodeGen/X86/psadbw.ll | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/llvm/test/CodeGen/X86/psadbw.ll b/llvm/test/CodeGen/X86/psadbw.ll index 4691689..753e88c 100644 --- a/llvm/test/CodeGen/X86/psadbw.ll +++ b/llvm/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>) -- 2.7.4