diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-08-06 19:31:50 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-08-06 19:31:50 +0000 |
commit | 19505bc35498658093829d63435c4d04964100c8 (patch) | |
tree | b53530ab7d9e4d38939a82c14b7263196d53c3e5 /llvm/test | |
parent | b0476fcc1f6636ff69c7132d63eda823248594e4 (diff) | |
download | bcm5719-llvm-19505bc35498658093829d63435c4d04964100c8.tar.gz bcm5719-llvm-19505bc35498658093829d63435c4d04964100c8.zip |
[AVX-512] Add AVX-512 scalar CVT instructions to hasUndefRegUpdate.
llvm-svn: 277933
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/X86/avx512-cvt.ll | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/vec_int_to_fp.ll | 105 |
2 files changed, 46 insertions, 66 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-cvt.ll b/llvm/test/CodeGen/X86/avx512-cvt.ll index 3f0df70ba0d..22e62378780 100644 --- a/llvm/test/CodeGen/X86/avx512-cvt.ll +++ b/llvm/test/CodeGen/X86/avx512-cvt.ll @@ -36,6 +36,7 @@ define <8 x double> @sltof864(<8 x i64> %a) { ; KNL-NEXT: vpextrq $1, %xmm0, %rax ; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm3 ; KNL-NEXT: vmovq %xmm0, %rax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 ; KNL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0] ; KNL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 @@ -62,6 +63,7 @@ define <4 x double> @sltof464(<4 x i64> %a) { ; KNL-NEXT: vpextrq $1, %xmm0, %rax ; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 ; KNL-NEXT: vmovq %xmm0, %rax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 ; KNL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 @@ -81,6 +83,7 @@ define <2 x float> @sltof2f32(<2 x i64> %a) { ; KNL-NEXT: vpextrq $1, %xmm0, %rax ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 ; KNL-NEXT: vmovq %xmm0, %rax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 @@ -111,6 +114,7 @@ define <4 x float> @sltof4f32_mem(<4 x i64>* %a) { ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 ; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] ; KNL-NEXT: vpextrq $1, %xmm0, %rax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] ; KNL-NEXT: retq @@ -191,6 +195,7 @@ define <4 x float> @sltof432(<4 x i64> %a) { ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 ; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] ; KNL-NEXT: vpextrq $1, %xmm0, %rax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] ; KNL-NEXT: retq @@ -884,6 +889,7 @@ define <2 x float> @sitofp_2i1_float(<2 x float> %a) { ; KNL-NEXT: vmovq %xmm0, %rdx ; KNL-NEXT: testb $1, %dl ; KNL-NEXT: cmovnel %eax, %ecx +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2ssl %ecx, %xmm0, %xmm0 ; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] ; KNL-NEXT: retq @@ -1089,6 +1095,7 @@ define <2 x float> @uitofp_2i1_float(<2 x i32> %a) { ; KNL-NEXT: vcvtsi2ssl %eax, %xmm0, %xmm1 ; KNL-NEXT: vmovq %xmm0, %rax ; KNL-NEXT: andl $1, %eax +; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; KNL-NEXT: vcvtsi2ssl %eax, %xmm0, %xmm0 ; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] ; KNL-NEXT: retq diff --git a/llvm/test/CodeGen/X86/vec_int_to_fp.ll b/llvm/test/CodeGen/X86/vec_int_to_fp.ll index ac6b09ce8fc..5c1ecfba32f 100644 --- a/llvm/test/CodeGen/X86/vec_int_to_fp.ll +++ b/llvm/test/CodeGen/X86/vec_int_to_fp.ll @@ -25,24 +25,15 @@ define <2 x double> @sitofp_2i64_to_2f64(<2 x i64> %a) { ; SSE-NEXT: movapd %xmm1, %xmm0 ; SSE-NEXT: retq ; -; VEX-LABEL: sitofp_2i64_to_2f64: -; VEX: # BB#0: -; VEX-NEXT: vpextrq $1, %xmm0, %rax -; VEX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 -; VEX-NEXT: vmovq %xmm0, %rax -; VEX-NEXT: vxorps %xmm0, %xmm0, %xmm0 -; VEX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 -; VEX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] -; VEX-NEXT: retq -; -; AVX512-LABEL: sitofp_2i64_to_2f64: -; AVX512: # BB#0: -; AVX512-NEXT: vpextrq $1, %xmm0, %rax -; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 -; AVX512-NEXT: vmovq %xmm0, %rax -; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] -; AVX512-NEXT: retq +; AVX-LABEL: sitofp_2i64_to_2f64: +; AVX: # BB#0: +; AVX-NEXT: vpextrq $1, %xmm0, %rax +; AVX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 +; AVX-NEXT: vmovq %xmm0, %rax +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; AVX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 +; AVX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] +; AVX-NEXT: retq %cvt = sitofp <2 x i64> %a to <2 x double> ret <2 x double> %cvt } @@ -260,6 +251,7 @@ define <4 x double> @sitofp_4i64_to_4f64(<4 x i64> %a) { ; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 ; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; AVX512-NEXT: vinsertf32x4 $1, %xmm1, %ymm0, %ymm0 @@ -950,30 +942,18 @@ define <4 x float> @sitofp_2i64_to_4f32(<2 x i64> %a) { ; SSE-NEXT: movaps %xmm1, %xmm0 ; SSE-NEXT: retq ; -; VEX-LABEL: sitofp_2i64_to_4f32: -; VEX: # BB#0: -; VEX-NEXT: vpextrq $1, %xmm0, %rax -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; VEX-NEXT: vmovq %xmm0, %rax -; VEX-NEXT: vxorps %xmm0, %xmm0, %xmm0 -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] -; VEX-NEXT: retq -; -; AVX512-LABEL: sitofp_2i64_to_4f32: -; AVX512: # BB#0: -; AVX512-NEXT: vpextrq $1, %xmm0, %rax -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; AVX512-NEXT: vmovq %xmm0, %rax -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] -; AVX512-NEXT: retq +; AVX-LABEL: sitofp_2i64_to_4f32: +; AVX: # BB#0: +; AVX-NEXT: vpextrq $1, %xmm0, %rax +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 +; AVX-NEXT: vmovq %xmm0, %rax +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] +; AVX-NEXT: retq %cvt = sitofp <2 x i64> %a to <2 x float> %ext = shufflevector <2 x float> %cvt, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> ret <4 x float> %ext @@ -995,30 +975,18 @@ define <4 x float> @sitofp_4i64_to_4f32_undef(<2 x i64> %a) { ; SSE-NEXT: movaps %xmm1, %xmm0 ; SSE-NEXT: retq ; -; VEX-LABEL: sitofp_4i64_to_4f32_undef: -; VEX: # BB#0: -; VEX-NEXT: vpextrq $1, %xmm0, %rax -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; VEX-NEXT: vmovq %xmm0, %rax -; VEX-NEXT: vxorps %xmm0, %xmm0, %xmm0 -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] -; VEX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] -; VEX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] -; VEX-NEXT: retq -; -; AVX512-LABEL: sitofp_4i64_to_4f32_undef: -; AVX512: # BB#0: -; AVX512-NEXT: vpextrq $1, %xmm0, %rax -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; AVX512-NEXT: vmovq %xmm0, %rax -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] -; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] -; AVX512-NEXT: retq +; AVX-LABEL: sitofp_4i64_to_4f32_undef: +; AVX: # BB#0: +; AVX-NEXT: vpextrq $1, %xmm0, %rax +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 +; AVX-NEXT: vmovq %xmm0, %rax +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] +; AVX-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] +; AVX-NEXT: retq %ext = shufflevector <2 x i64> %a, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> %cvt = sitofp <4 x i64> %ext to <4 x float> ret <4 x float> %cvt @@ -1222,6 +1190,7 @@ define <4 x float> @sitofp_4i64_to_4f32(<4 x i64> %a) { ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 ; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] ; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] ; AVX512-NEXT: retq @@ -2170,6 +2139,7 @@ define <2 x double> @sitofp_load_2i64_to_2f64(<2 x i64> *%a) { ; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; AVX512-NEXT: retq @@ -2312,6 +2282,7 @@ define <4 x double> @sitofp_load_4i64_to_4f64(<4 x i64> *%a) { ; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 ; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; AVX512-NEXT: vinsertf32x4 $1, %xmm1, %ymm0, %ymm0 @@ -2840,6 +2811,7 @@ define <4 x float> @sitofp_load_4i64_to_4f32(<4 x i64> *%a) { ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 ; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] ; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] ; AVX512-NEXT: retq @@ -3033,6 +3005,7 @@ define <8 x float> @sitofp_load_8i64_to_8f32(<8 x i64> *%a) { ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm3 ; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3] ; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX512-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 ; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0] ; AVX512-NEXT: vinsertf32x4 $1, %xmm1, %ymm0, %ymm0 |