]> granicus.if.org Git - llvm/commitdiff
[X86][SSE] Add test showing missing demanded elts PSADBW handling
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 12 Aug 2019 14:01:16 +0000 (14:01 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 12 Aug 2019 14:01:16 +0000 (14:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368575 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/X86/psadbw.ll

index 46916898063448936eeceefae0ab1e486f33dd39..753e88c3dbc0d313491948c461a619e88316a03b 100644 (file)
@@ -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> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11>
+  %4 = shufflevector <16 x i8> %1, <16 x i8> %1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11>
+  %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>)