diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-03-28 15:30:09 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-03-28 15:30:09 +0000 |
| commit | e7815282786a25de5c193e9804a2b10d1f07e530 (patch) | |
| tree | 65199d006da23de8208630dca05b5c59941f47bf /llvm/test | |
| parent | ac20b745735e1e00a5e7cb83806c5dd3d6108471 (diff) | |
| download | bcm5719-llvm-e7815282786a25de5c193e9804a2b10d1f07e530.tar.gz bcm5719-llvm-e7815282786a25de5c193e9804a2b10d1f07e530.zip | |
[x86] add vector test for sext of negate; NFC
llvm-svn: 357177
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/vector-sext.ll | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/vector-sext.ll b/llvm/test/CodeGen/X86/vector-sext.ll index a01efcbf17c..d99c370d5a3 100644 --- a/llvm/test/CodeGen/X86/vector-sext.ll +++ b/llvm/test/CodeGen/X86/vector-sext.ll @@ -6335,3 +6335,89 @@ entry: %e = sext <8 x i6> %d to <8 x i64> ret <8 x i64> %e } + +define <8 x i32> @zext_negate_sext(<8 x i8> %x) { +; SSE2-LABEL: zext_negate_sext: +; SSE2: # %bb.0: +; SSE2-NEXT: pand {{.*}}(%rip), %xmm0 +; SSE2-NEXT: pxor %xmm1, %xmm1 +; SSE2-NEXT: psubw %xmm0, %xmm1 +; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] +; SSE2-NEXT: psrad $16, %xmm0 +; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7] +; SSE2-NEXT: psrad $16, %xmm1 +; SSE2-NEXT: retq +; +; SSSE3-LABEL: zext_negate_sext: +; SSSE3: # %bb.0: +; SSSE3-NEXT: pand {{.*}}(%rip), %xmm0 +; SSSE3-NEXT: pxor %xmm1, %xmm1 +; SSSE3-NEXT: psubw %xmm0, %xmm1 +; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] +; SSSE3-NEXT: psrad $16, %xmm0 +; SSSE3-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7] +; SSSE3-NEXT: psrad $16, %xmm1 +; SSSE3-NEXT: retq +; +; SSE41-LABEL: zext_negate_sext: +; SSE41: # %bb.0: +; SSE41-NEXT: pand {{.*}}(%rip), %xmm0 +; SSE41-NEXT: pxor %xmm1, %xmm1 +; SSE41-NEXT: psubw %xmm0, %xmm1 +; SSE41-NEXT: pmovsxwd %xmm1, %xmm0 +; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1] +; SSE41-NEXT: pmovsxwd %xmm1, %xmm1 +; SSE41-NEXT: retq +; +; AVX1-LABEL: zext_negate_sext: +; AVX1: # %bb.0: +; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vpsubw %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vpmovsxwd %xmm0, %xmm1 +; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] +; AVX1-NEXT: vpmovsxwd %xmm0, %xmm0 +; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: retq +; +; AVX2-LABEL: zext_negate_sext: +; AVX2: # %bb.0: +; AVX2-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX2-NEXT: vpsubw %xmm0, %xmm1, %xmm0 +; AVX2-NEXT: vpmovsxwd %xmm0, %ymm0 +; AVX2-NEXT: retq +; +; AVX512-LABEL: zext_negate_sext: +; AVX512: # %bb.0: +; AVX512-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 +; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX512-NEXT: vpsubw %xmm0, %xmm1, %xmm0 +; AVX512-NEXT: vpmovsxwd %xmm0, %ymm0 +; AVX512-NEXT: retq +; +; X32-SSE2-LABEL: zext_negate_sext: +; X32-SSE2: # %bb.0: +; X32-SSE2-NEXT: pand {{\.LCPI.*}}, %xmm0 +; X32-SSE2-NEXT: pxor %xmm1, %xmm1 +; X32-SSE2-NEXT: psubw %xmm0, %xmm1 +; X32-SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] +; X32-SSE2-NEXT: psrad $16, %xmm0 +; X32-SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7] +; X32-SSE2-NEXT: psrad $16, %xmm1 +; X32-SSE2-NEXT: retl +; +; X32-SSE41-LABEL: zext_negate_sext: +; X32-SSE41: # %bb.0: +; X32-SSE41-NEXT: pand {{\.LCPI.*}}, %xmm0 +; X32-SSE41-NEXT: pxor %xmm1, %xmm1 +; X32-SSE41-NEXT: psubw %xmm0, %xmm1 +; X32-SSE41-NEXT: pmovsxwd %xmm1, %xmm0 +; X32-SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1] +; X32-SSE41-NEXT: pmovsxwd %xmm1, %xmm1 +; X32-SSE41-NEXT: retl + %z = zext <8 x i8> %x to <8 x i16> + %neg = sub nsw <8 x i16> zeroinitializer, %z + %r = sext <8 x i16> %neg to <8 x i32> + ret <8 x i32> %r +} |

