diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll b/llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll index c694cf29313..6cd52c4d25c 100644 --- a/llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll +++ b/llvm/test/CodeGen/X86/bitcast-int-to-vector-bool-zext.ll @@ -50,15 +50,17 @@ define <2 x i64> @ext_i2_2i64(i2 %a0) { ; AVX512F-LABEL: ext_i2_2i64: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z} -; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrlq $63, %xmm0, %xmm0 ; AVX512F-NEXT: vzeroupper ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i2_2i64: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 +; AVX512VLBW-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrlq $63, %xmm0, %xmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i2 %a0 to <2 x i1> %2 = zext <2 x i1> %1 to <2 x i64> @@ -99,15 +101,17 @@ define <4 x i32> @ext_i4_4i32(i4 %a0) { ; AVX512F-LABEL: ext_i4_4i32: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} -; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrld $31, %xmm0, %xmm0 ; AVX512F-NEXT: vzeroupper ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i4_4i32: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vpbroadcastd {{.*}}(%rip), %xmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 +; AVX512VLBW-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrld $31, %xmm0, %xmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i4 %a0 to <4 x i1> %2 = zext <4 x i1> %1 to <4 x i32> @@ -150,16 +154,17 @@ define <8 x i16> @ext_i8_8i16(i8 %a0) { ; AVX512F-LABEL: ext_i8_8i16: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 -; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 +; AVX512F-NEXT: vpsrlw $15, %xmm0, %xmm0 ; AVX512F-NEXT: vzeroupper ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i8_8i16: ; AVX512VLBW: # %bb.0: -; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vmovdqu16 {{.*}}(%rip), %xmm0 {%k1} {z} +; AVX512VLBW-NEXT: kmovd %edi, %k0 +; AVX512VLBW-NEXT: vpmovm2w %k0, %xmm0 +; AVX512VLBW-NEXT: vpsrlw $15, %xmm0, %xmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i8 %a0 to <8 x i1> %2 = zext <8 x i1> %1 to <8 x i16> @@ -289,14 +294,16 @@ define <4 x i64> @ext_i4_4i64(i4 %a0) { ; AVX512F-LABEL: ext_i4_4i64: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z} -; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrlq $63, %ymm0, %ymm0 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i4_4i64: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vpbroadcastq {{.*}}(%rip), %ymm0 {%k1} {z} +; AVX512VLBW-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 +; AVX512VLBW-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrlq $63, %ymm0, %ymm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i4 %a0 to <4 x i1> %2 = zext <4 x i1> %1 to <4 x i64> @@ -350,14 +357,16 @@ define <8 x i32> @ext_i8_8i32(i8 %a0) { ; AVX512F-LABEL: ext_i8_8i32: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} -; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrld $31, %ymm0, %ymm0 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i8_8i32: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vpbroadcastd {{.*}}(%rip), %ymm0 {%k1} {z} +; AVX512VLBW-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 +; AVX512VLBW-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrld $31, %ymm0, %ymm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i8 %a0 to <8 x i1> %2 = zext <8 x i1> %1 to <8 x i32> @@ -413,14 +422,16 @@ define <16 x i16> @ext_i16_16i16(i16 %a0) { ; AVX512F-LABEL: ext_i16_16i16: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 +; AVX512F-NEXT: vpsrlw $15, %ymm0, %ymm0 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i16_16i16: ; AVX512VLBW: # %bb.0: -; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vmovdqu16 {{.*}}(%rip), %ymm0 {%k1} {z} +; AVX512VLBW-NEXT: kmovd %edi, %k0 +; AVX512VLBW-NEXT: vpmovm2w %k0, %ymm0 +; AVX512VLBW-NEXT: vpsrlw $15, %ymm0, %ymm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i16 %a0 to <16 x i1> %2 = zext <16 x i1> %1 to <16 x i16> @@ -611,13 +622,15 @@ define <8 x i64> @ext_i8_8i64(i8 %a0) { ; AVX512F-LABEL: ext_i8_8i64: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrlq $63, %zmm0, %zmm0 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i8_8i64: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrlq $63, %zmm0, %zmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i8 %a0 to <8 x i1> %2 = zext <8 x i1> %1 to <8 x i64> @@ -694,13 +707,15 @@ define <16 x i32> @ext_i16_16i32(i16 %a0) { ; AVX512F-LABEL: ext_i16_16i32: ; AVX512F: # %bb.0: ; AVX512F-NEXT: kmovw %edi, %k1 -; AVX512F-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpsrld $31, %zmm0, %zmm0 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i16_16i32: ; AVX512VLBW: # %bb.0: ; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} +; AVX512VLBW-NEXT: vpsrld $31, %zmm0, %zmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i16 %a0 to <16 x i1> %2 = zext <16 x i1> %1 to <16 x i32> @@ -786,17 +801,19 @@ define <32 x i16> @ext_i32_32i16(i32 %a0) { ; AVX512F-NEXT: kmovw %edi, %k1 ; AVX512F-NEXT: shrl $16, %edi ; AVX512F-NEXT: kmovw %edi, %k2 -; AVX512F-NEXT: movl {{.*}}(%rip), %eax -; AVX512F-NEXT: vpbroadcastd %eax, %zmm0 {%k1} {z} +; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 -; AVX512F-NEXT: vpbroadcastd %eax, %zmm1 {%k2} {z} +; AVX512F-NEXT: vpsrlw $15, %ymm0, %ymm0 +; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k2} {z} ; AVX512F-NEXT: vpmovdw %zmm1, %ymm1 +; AVX512F-NEXT: vpsrlw $15, %ymm1, %ymm1 ; AVX512F-NEXT: retq ; ; AVX512VLBW-LABEL: ext_i32_32i16: ; AVX512VLBW: # %bb.0: -; AVX512VLBW-NEXT: kmovd %edi, %k1 -; AVX512VLBW-NEXT: vmovdqu16 {{.*}}(%rip), %zmm0 {%k1} {z} +; AVX512VLBW-NEXT: kmovd %edi, %k0 +; AVX512VLBW-NEXT: vpmovm2w %k0, %zmm0 +; AVX512VLBW-NEXT: vpsrlw $15, %zmm0, %zmm0 ; AVX512VLBW-NEXT: retq %1 = bitcast i32 %a0 to <32 x i1> %2 = zext <32 x i1> %1 to <32 x i16> |