From cdfd20070adf15da1f727f492c953deb34539348 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 21 Jul 2017 10:22:49 +0000 Subject: [PATCH] [X86][SSE] Add extra (sra (sra x, c1), c2) -> (sra x, (add c1, c2)) test case We should be able to handle the case where some c1+c2 elements exceed max shift and some don't by performing a clamp after the sum git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308724 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/combine-sra.ll | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/CodeGen/X86/combine-sra.ll b/test/CodeGen/X86/combine-sra.ll index f9927198978..fb16faa30a9 100644 --- a/test/CodeGen/X86/combine-sra.ll +++ b/test/CodeGen/X86/combine-sra.ll @@ -125,6 +125,36 @@ define <4 x i32> @combine_vec_ashr_ashr2(<4 x i32> %x) { ret <4 x i32> %2 } +define <4 x i32> @combine_vec_ashr_ashr3(<4 x i32> %x) { +; SSE-LABEL: combine_vec_ashr_ashr3: +; SSE: # BB#0: +; SSE-NEXT: movdqa %xmm0, %xmm1 +; SSE-NEXT: psrad $27, %xmm1 +; SSE-NEXT: movdqa %xmm0, %xmm2 +; SSE-NEXT: psrad $5, %xmm2 +; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7] +; SSE-NEXT: movdqa %xmm0, %xmm1 +; SSE-NEXT: psrad $31, %xmm1 +; SSE-NEXT: psrad $1, %xmm0 +; SSE-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] +; SSE-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] +; SSE-NEXT: movdqa %xmm0, %xmm1 +; SSE-NEXT: psrad $10, %xmm1 +; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm0[4,5,6,7] +; SSE-NEXT: psrad $31, %xmm0 +; SSE-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] +; SSE-NEXT: retq +; +; AVX-LABEL: combine_vec_ashr_ashr3: +; AVX: # BB#0: +; AVX-NEXT: vpsravd {{.*}}(%rip), %xmm0, %xmm0 +; AVX-NEXT: vpsravd {{.*}}(%rip), %xmm0, %xmm0 +; AVX-NEXT: retq + %1 = ashr <4 x i32> %x, + %2 = ashr <4 x i32> %1, + ret <4 x i32> %2 +} + ; fold (sra x, (trunc (and y, c))) -> (sra x, (and (trunc y), (trunc c))). define <4 x i32> @combine_vec_ashr_trunc_and(<4 x i32> %x, <4 x i64> %y) { ; SSE-LABEL: combine_vec_ashr_trunc_and: -- 2.40.0