diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/vector-shift-lshr-256.ll')
| -rw-r--r-- | llvm/test/CodeGen/X86/vector-shift-lshr-256.ll | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/llvm/test/CodeGen/X86/vector-shift-lshr-256.ll b/llvm/test/CodeGen/X86/vector-shift-lshr-256.ll index c448921db7d..24395c9169f 100644 --- a/llvm/test/CodeGen/X86/vector-shift-lshr-256.ll +++ b/llvm/test/CodeGen/X86/vector-shift-lshr-256.ll @@ -1399,71 +1399,77 @@ define <4 x i32> @sh_trunc_sh_vec(<4 x i64> %x) { ; AVX1-LABEL: sh_trunc_sh_vec: ; AVX1: # %bb.0: ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 -; AVX1-NEXT: vpsrlq $24, %xmm1, %xmm1 -; AVX1-NEXT: vpsrlq $24, %xmm0, %xmm0 +; AVX1-NEXT: vpsrlq $36, %xmm1, %xmm1 +; AVX1-NEXT: vpsrlq $36, %xmm0, %xmm0 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] -; AVX1-NEXT: vpsrld $12, %xmm0, %xmm0 +; AVX1-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX2-LABEL: sh_trunc_sh_vec: ; AVX2: # %bb.0: -; AVX2-NEXT: vpsrlq $24, %ymm0, %ymm0 +; AVX2-NEXT: vpsrlq $36, %ymm0, %ymm0 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] -; AVX2-NEXT: vpsrld $12, %xmm0, %xmm0 +; AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [1048575,1048575,1048575,1048575] +; AVX2-NEXT: vandps %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq ; ; XOPAVX1-LABEL: sh_trunc_sh_vec: ; XOPAVX1: # %bb.0: ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 -; XOPAVX1-NEXT: vpperm {{.*#+}} xmm0 = xmm0[3,4,5,6,11,12,13,14],xmm1[3,4,5,6,11,12,13,14] -; XOPAVX1-NEXT: vpsrld $12, %xmm0, %xmm0 +; XOPAVX1-NEXT: vpsrlq $36, %xmm1, %xmm1 +; XOPAVX1-NEXT: vpsrlq $36, %xmm0, %xmm0 +; XOPAVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] +; XOPAVX1-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 ; XOPAVX1-NEXT: vzeroupper ; XOPAVX1-NEXT: retq ; ; XOPAVX2-LABEL: sh_trunc_sh_vec: ; XOPAVX2: # %bb.0: -; XOPAVX2-NEXT: vpsrlq $24, %ymm0, %ymm0 +; XOPAVX2-NEXT: vpsrlq $36, %ymm0, %ymm0 ; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; XOPAVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] -; XOPAVX2-NEXT: vpsrld $12, %xmm0, %xmm0 +; XOPAVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [1048575,1048575,1048575,1048575] +; XOPAVX2-NEXT: vandps %xmm1, %xmm0, %xmm0 ; XOPAVX2-NEXT: vzeroupper ; XOPAVX2-NEXT: retq ; ; AVX512-LABEL: sh_trunc_sh_vec: ; AVX512: # %bb.0: -; AVX512-NEXT: vpsrlq $24, %ymm0, %ymm0 +; AVX512-NEXT: vpsrlq $36, %ymm0, %ymm0 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0 -; AVX512-NEXT: vpsrld $12, %xmm0, %xmm0 +; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1048575,1048575,1048575,1048575] +; AVX512-NEXT: vpand %xmm1, %xmm0, %xmm0 ; AVX512-NEXT: vzeroupper ; AVX512-NEXT: retq ; ; AVX512VL-LABEL: sh_trunc_sh_vec: ; AVX512VL: # %bb.0: -; AVX512VL-NEXT: vpsrlq $24, %ymm0, %ymm0 +; AVX512VL-NEXT: vpsrlq $36, %ymm0, %ymm0 ; AVX512VL-NEXT: vpmovqd %ymm0, %xmm0 -; AVX512VL-NEXT: vpsrld $12, %xmm0, %xmm0 +; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to4}, %xmm0, %xmm0 ; AVX512VL-NEXT: vzeroupper ; AVX512VL-NEXT: retq ; ; X32-AVX1-LABEL: sh_trunc_sh_vec: ; X32-AVX1: # %bb.0: ; X32-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 -; X32-AVX1-NEXT: vpsrlq $24, %xmm1, %xmm1 -; X32-AVX1-NEXT: vpsrlq $24, %xmm0, %xmm0 +; X32-AVX1-NEXT: vpsrlq $36, %xmm1, %xmm1 +; X32-AVX1-NEXT: vpsrlq $36, %xmm0, %xmm0 ; X32-AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] -; X32-AVX1-NEXT: vpsrld $12, %xmm0, %xmm0 +; X32-AVX1-NEXT: vandps {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-AVX1-NEXT: vzeroupper ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: sh_trunc_sh_vec: ; X32-AVX2: # %bb.0: -; X32-AVX2-NEXT: vpsrlq $24, %ymm0, %ymm0 +; X32-AVX2-NEXT: vpsrlq $36, %ymm0, %ymm0 ; X32-AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; X32-AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] -; X32-AVX2-NEXT: vpsrld $12, %xmm0, %xmm0 +; X32-AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [1048575,1048575,1048575,1048575] +; X32-AVX2-NEXT: vandps %xmm1, %xmm0, %xmm0 ; X32-AVX2-NEXT: vzeroupper ; X32-AVX2-NEXT: retl %s = lshr <4 x i64> %x, <i64 24, i64 24, i64 24, i64 24> |

