forked from OSchip/llvm-project
[X86] Add test case for v8i64->v8i8 truncate with avx512 and prefer-vector-width/min-legal-vector-width=256. NFC
With vpmovqb, we should be able to do better here until we get AVX512VBMI on Cannonlake/Icelake. llvm-svn: 373569
This commit is contained in:
parent
efb5a24ab0
commit
3a6950d3f0
|
@ -828,6 +828,37 @@ define <16 x i8> @trunc_v16i32_v16i8(<16 x i32>* %x) nounwind "min-legal-vector-
|
|||
ret <16 x i8> %b
|
||||
}
|
||||
|
||||
define <8 x i8> @trunc_v8i64_v8i8(<8 x i64>* %x) nounwind "min-legal-vector-width"="256" {
|
||||
; CHECK-AVX512-LABEL: trunc_v8i64_v8i8:
|
||||
; CHECK-AVX512: # %bb.0:
|
||||
; CHECK-AVX512-NEXT: vmovdqa (%rdi), %xmm0
|
||||
; CHECK-AVX512-NEXT: vmovdqa 16(%rdi), %xmm1
|
||||
; CHECK-AVX512-NEXT: vmovdqa 32(%rdi), %xmm2
|
||||
; CHECK-AVX512-NEXT: vmovdqa 48(%rdi), %xmm3
|
||||
; CHECK-AVX512-NEXT: vmovdqa {{.*#+}} xmm4 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
|
||||
; CHECK-AVX512-NEXT: vpshufb %xmm4, %xmm3, %xmm3
|
||||
; CHECK-AVX512-NEXT: vpshufb %xmm4, %xmm2, %xmm2
|
||||
; CHECK-AVX512-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
|
||||
; CHECK-AVX512-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
|
||||
; CHECK-AVX512-NEXT: vpshufb %xmm3, %xmm1, %xmm1
|
||||
; CHECK-AVX512-NEXT: vpshufb %xmm3, %xmm0, %xmm0
|
||||
; CHECK-AVX512-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
|
||||
; CHECK-AVX512-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2,3]
|
||||
; CHECK-AVX512-NEXT: retq
|
||||
;
|
||||
; CHECK-VBMI-LABEL: trunc_v8i64_v8i8:
|
||||
; CHECK-VBMI: # %bb.0:
|
||||
; CHECK-VBMI-NEXT: vmovdqa (%rdi), %ymm1
|
||||
; CHECK-VBMI-NEXT: vpbroadcastq {{.*#+}} ymm0 = [4048780183313844224,4048780183313844224,4048780183313844224,4048780183313844224]
|
||||
; CHECK-VBMI-NEXT: vpermi2b 32(%rdi), %ymm1, %ymm0
|
||||
; CHECK-VBMI-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
|
||||
; CHECK-VBMI-NEXT: vzeroupper
|
||||
; CHECK-VBMI-NEXT: retq
|
||||
%a = load <8 x i64>, <8 x i64>* %x
|
||||
%b = trunc <8 x i64> %a to <8 x i8>
|
||||
ret <8 x i8> %b
|
||||
}
|
||||
|
||||
define <8 x i16> @trunc_v8i64_v8i16(<8 x i64>* %x) nounwind "min-legal-vector-width"="256" {
|
||||
; CHECK-LABEL: trunc_v8i64_v8i16:
|
||||
; CHECK: # %bb.0:
|
||||
|
|
Loading…
Reference in New Issue