diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
| commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
| tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /test/CodeGen/X86/known-bits-vector.ll | |
| parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
Notes
Diffstat (limited to 'test/CodeGen/X86/known-bits-vector.ll')
| -rw-r--r-- | test/CodeGen/X86/known-bits-vector.ll | 240 |
1 files changed, 158 insertions, 82 deletions
diff --git a/test/CodeGen/X86/known-bits-vector.ll b/test/CodeGen/X86/known-bits-vector.ll index eee466a5a60a..283d1f93dfb6 100644 --- a/test/CodeGen/X86/known-bits-vector.ll +++ b/test/CodeGen/X86/known-bits-vector.ll @@ -4,13 +4,13 @@ define i32 @knownbits_mask_extract_sext(<8 x i16> %a0) nounwind { ; X32-LABEL: knownbits_mask_extract_sext: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpextrw $0, %xmm0, %eax ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_extract_sext: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpextrw $0, %xmm0, %eax ; X64-NEXT: retq @@ -22,7 +22,7 @@ define i32 @knownbits_mask_extract_sext(<8 x i16> %a0) nounwind { define float @knownbits_mask_extract_uitofp(<2 x i64> %a0) nounwind { ; X32-LABEL: knownbits_mask_extract_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: pushl %eax ; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3],xmm0[4,5,6,7] @@ -34,7 +34,7 @@ define float @knownbits_mask_extract_uitofp(<2 x i64> %a0) nounwind { ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_extract_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3],xmm0[4,5,6,7] ; X64-NEXT: vmovq %xmm0, %rax @@ -48,7 +48,7 @@ define float @knownbits_mask_extract_uitofp(<2 x i64> %a0) nounwind { define <4 x float> @knownbits_insert_uitofp(<4 x i32> %a0, i16 %a1, i16 %a2) nounwind { ; X32-LABEL: knownbits_insert_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movzwl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vpinsrd $0, %eax, %xmm0, %xmm0 @@ -58,7 +58,7 @@ define <4 x float> @knownbits_insert_uitofp(<4 x i32> %a0, i16 %a1, i16 %a2) nou ; X32-NEXT: retl ; ; X64-LABEL: knownbits_insert_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: movzwl %di, %eax ; X64-NEXT: movzwl %si, %ecx ; X64-NEXT: vpinsrd $0, %eax, %xmm0, %xmm0 @@ -77,14 +77,14 @@ define <4 x float> @knownbits_insert_uitofp(<4 x i32> %a0, i16 %a1, i16 %a2) nou define <4 x i32> @knownbits_mask_shuffle_sext(<8 x i16> %a0) nounwind { ; X32-LABEL: knownbits_mask_shuffle_sext: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X32-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_shuffle_sext: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X64-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero @@ -97,14 +97,14 @@ define <4 x i32> @knownbits_mask_shuffle_sext(<8 x i16> %a0) nounwind { define <4 x i32> @knownbits_mask_shuffle_shuffle_sext(<8 x i16> %a0) nounwind { ; X32-LABEL: knownbits_mask_shuffle_shuffle_sext: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X32-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_shuffle_shuffle_sext: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X64-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero @@ -118,14 +118,14 @@ define <4 x i32> @knownbits_mask_shuffle_shuffle_sext(<8 x i16> %a0) nounwind { define <4 x i32> @knownbits_mask_shuffle_shuffle_undef_sext(<8 x i16> %a0) nounwind { ; X32-LABEL: knownbits_mask_shuffle_shuffle_undef_sext: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X32-NEXT: vpmovsxwd %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_shuffle_shuffle_undef_sext: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X64-NEXT: vpmovsxwd %xmm0, %xmm0 @@ -139,16 +139,16 @@ define <4 x i32> @knownbits_mask_shuffle_shuffle_undef_sext(<8 x i16> %a0) nounw define <4 x float> @knownbits_mask_shuffle_uitofp(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_shuffle_uitofp: -; X32: # BB#0: -; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X32: # %bb.0: +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_shuffle_uitofp: -; X64: # BB#0: -; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X64: # %bb.0: +; X64-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -1, i32 -1, i32 255, i32 4085> @@ -159,18 +159,18 @@ define <4 x float> @knownbits_mask_shuffle_uitofp(<4 x i32> %a0) nounwind { define <4 x float> @knownbits_mask_or_shuffle_uitofp(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_or_shuffle_uitofp: -; X32: # BB#0: -; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpor {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X32: # %bb.0: +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vorps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_or_shuffle_uitofp: -; X64: # BB#0: -; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpor {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X64: # %bb.0: +; X64-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vorps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -1, i32 -1, i32 255, i32 4085> @@ -182,18 +182,18 @@ define <4 x float> @knownbits_mask_or_shuffle_uitofp(<4 x i32> %a0) nounwind { define <4 x float> @knownbits_mask_xor_shuffle_uitofp(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_xor_shuffle_uitofp: -; X32: # BB#0: -; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpxor {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X32: # %bb.0: +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vxorps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_xor_shuffle_uitofp: -; X64: # BB#0: -; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X64: # %bb.0: +; X64-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vxorps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -1, i32 -1, i32 255, i32 4085> @@ -205,12 +205,12 @@ define <4 x float> @knownbits_mask_xor_shuffle_uitofp(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_shl_shuffle_lshr(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_shl_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_shl_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -65536, i32 -7, i32 -7, i32 -65536> @@ -222,12 +222,12 @@ define <4 x i32> @knownbits_mask_shl_shuffle_lshr(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_ashr_shuffle_lshr(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_ashr_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_ashr_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 131071, i32 -1, i32 -1, i32 131071> @@ -239,12 +239,12 @@ define <4 x i32> @knownbits_mask_ashr_shuffle_lshr(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_mul_shuffle_shl(<4 x i32> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_mask_mul_shuffle_shl: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_mul_shuffle_shl: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -65536, i32 -7, i32 -7, i32 -65536> @@ -256,12 +256,12 @@ define <4 x i32> @knownbits_mask_mul_shuffle_shl(<4 x i32> %a0, <4 x i32> %a1) n define <4 x i32> @knownbits_mask_trunc_shuffle_shl(<4 x i64> %a0) nounwind { ; X32-LABEL: knownbits_mask_trunc_shuffle_shl: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_trunc_shuffle_shl: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i64> %a0, <i64 -65536, i64 -7, i64 7, i64 -65536> @@ -273,12 +273,12 @@ define <4 x i32> @knownbits_mask_trunc_shuffle_shl(<4 x i64> %a0) nounwind { define <4 x i32> @knownbits_mask_add_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_mask_add_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_add_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 32767, i32 -1, i32 -1, i32 32767> @@ -291,12 +291,12 @@ define <4 x i32> @knownbits_mask_add_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) define <4 x i32> @knownbits_mask_sub_shuffle_lshr(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_sub_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_sub_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 15, i32 -1, i32 -1, i32 15> @@ -308,12 +308,12 @@ define <4 x i32> @knownbits_mask_sub_shuffle_lshr(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_udiv_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_mask_udiv_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_udiv_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 32767, i32 -1, i32 -1, i32 32767> @@ -325,12 +325,12 @@ define <4 x i32> @knownbits_mask_udiv_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) define <4 x i32> @knownbits_urem_lshr(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_urem_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_urem_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = urem <4 x i32> %a0, <i32 16, i32 16, i32 16, i32 16> @@ -340,12 +340,12 @@ define <4 x i32> @knownbits_urem_lshr(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_urem_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_mask_urem_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_urem_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 32767, i32 -1, i32 -1, i32 32767> @@ -358,12 +358,12 @@ define <4 x i32> @knownbits_mask_urem_shuffle_lshr(<4 x i32> %a0, <4 x i32> %a1) define <4 x i32> @knownbits_mask_srem_shuffle_lshr(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_srem_shuffle_lshr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_srem_shuffle_lshr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -32768, i32 -1, i32 -1, i32 -32768> @@ -375,12 +375,12 @@ define <4 x i32> @knownbits_mask_srem_shuffle_lshr(<4 x i32> %a0) nounwind { define <4 x i32> @knownbits_mask_bswap_shuffle_shl(<4 x i32> %a0) nounwind { ; X32-LABEL: knownbits_mask_bswap_shuffle_shl: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_bswap_shuffle_shl: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 32767, i32 -1, i32 -1, i32 32767> @@ -393,21 +393,21 @@ declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>) define <8 x float> @knownbits_mask_concat_uitofp(<4 x i32> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_mask_concat_uitofp: -; X32: # BB#0: -; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 -; X32-NEXT: vpand {{\.LCPI.*}}, %xmm1, %xmm1 -; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,0,2] -; X32-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,3,1,3] +; X32: # %bb.0: +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm0, %xmm0 +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm1, %xmm1 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,2] +; X32-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[1,3,1,3] ; X32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; X32-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_concat_uitofp: -; X64: # BB#0: -; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 -; X64-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1 -; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,0,2] -; X64-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,3,1,3] +; X64: # %bb.0: +; X64-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 +; X64-NEXT: vandps {{.*}}(%rip), %xmm1, %xmm1 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,2] +; X64-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[1,3,1,3] ; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X64-NEXT: retq @@ -420,14 +420,14 @@ define <8 x float> @knownbits_mask_concat_uitofp(<4 x i32> %a0, <4 x i32> %a1) n define <4 x float> @knownbits_lshr_bitcast_shuffle_uitofp(<2 x i64> %a0, <4 x i32> %a1) nounwind { ; X32-LABEL: knownbits_lshr_bitcast_shuffle_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpsrlq $1, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] ; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_lshr_bitcast_shuffle_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpsrlq $1, %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] ; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 @@ -441,7 +441,7 @@ define <4 x float> @knownbits_lshr_bitcast_shuffle_uitofp(<2 x i64> %a0, <4 x i3 define <4 x float> @knownbits_smax_smin_shuffle_uitofp(<4 x i32> %a0) { ; X32-LABEL: knownbits_smax_smin_shuffle_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpminsd {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpmaxsd {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] @@ -453,7 +453,7 @@ define <4 x float> @knownbits_smax_smin_shuffle_uitofp(<4 x i32> %a0) { ; X32-NEXT: retl ; ; X64-LABEL: knownbits_smax_smin_shuffle_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpminsd {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpmaxsd {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] @@ -474,14 +474,14 @@ declare <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32>, <4 x i32>) nounwind readnone define <4 x float> @knownbits_umin_shuffle_uitofp(<4 x i32> %a0) { ; X32-LABEL: knownbits_umin_shuffle_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpminud {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] ; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_umin_shuffle_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpminud {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] ; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 @@ -496,13 +496,13 @@ declare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) nounwind readnone define <4 x i32> @knownbits_umax_shuffle_ashr(<4 x i32> %a0) { ; X32-LABEL: knownbits_umax_shuffle_ashr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpmaxud {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,2] ; X32-NEXT: retl ; ; X64-LABEL: knownbits_umax_shuffle_ashr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpmaxud {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,2] ; X64-NEXT: retq @@ -514,7 +514,7 @@ define <4 x i32> @knownbits_umax_shuffle_ashr(<4 x i32> %a0) { define <4 x float> @knownbits_mask_umax_shuffle_uitofp(<4 x i32> %a0) { ; X32-LABEL: knownbits_mask_umax_shuffle_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpand {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpmaxud {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] @@ -522,7 +522,7 @@ define <4 x float> @knownbits_mask_umax_shuffle_uitofp(<4 x i32> %a0) { ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_umax_shuffle_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpmaxud {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,3,3] @@ -537,12 +537,12 @@ define <4 x float> @knownbits_mask_umax_shuffle_uitofp(<4 x i32> %a0) { define <4 x i32> @knownbits_mask_bitreverse_ashr(<4 x i32> %a0) { ; X32-LABEL: knownbits_mask_bitreverse_ashr: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: knownbits_mask_bitreverse_ashr: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %1 = and <4 x i32> %a0, <i32 -2, i32 -2, i32 -2, i32 -2> @@ -555,7 +555,7 @@ declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) nounwind readnone ; If we don't know that the input isn't INT_MIN we can't combine to sitofp define <4 x float> @knownbits_abs_uitofp(<4 x i32> %a0) { ; X32-LABEL: knownbits_abs_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpabsd %xmm0, %xmm0 ; X32-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7] ; X32-NEXT: vpsrld $16, %xmm0, %xmm0 @@ -565,7 +565,7 @@ define <4 x float> @knownbits_abs_uitofp(<4 x i32> %a0) { ; X32-NEXT: retl ; ; X64-LABEL: knownbits_abs_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpabsd %xmm0, %xmm0 ; X64-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7] ; X64-NEXT: vpsrld $16, %xmm0, %xmm0 @@ -582,7 +582,7 @@ define <4 x float> @knownbits_abs_uitofp(<4 x i32> %a0) { define <4 x float> @knownbits_or_abs_uitofp(<4 x i32> %a0) { ; X32-LABEL: knownbits_or_abs_uitofp: -; X32: # BB#0: +; X32: # %bb.0: ; X32-NEXT: vpor {{\.LCPI.*}}, %xmm0, %xmm0 ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,0,2] ; X32-NEXT: vpabsd %xmm0, %xmm0 @@ -590,7 +590,7 @@ define <4 x float> @knownbits_or_abs_uitofp(<4 x i32> %a0) { ; X32-NEXT: retl ; ; X64-LABEL: knownbits_or_abs_uitofp: -; X64: # BB#0: +; X64: # %bb.0: ; X64-NEXT: vpor {{.*}}(%rip), %xmm0, %xmm0 ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,0,2] ; X64-NEXT: vpabsd %xmm0, %xmm0 @@ -604,3 +604,79 @@ define <4 x float> @knownbits_or_abs_uitofp(<4 x i32> %a0) { %6 = uitofp <4 x i32> %5 to <4 x float> ret <4 x float> %6 } + +define <4 x float> @knownbits_and_select_shuffle_uitofp(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2, <4 x i32> %a3) nounwind { +; X32-LABEL: knownbits_and_select_shuffle_uitofp: +; X32: # %bb.0: +; X32-NEXT: pushl %ebp +; X32-NEXT: movl %esp, %ebp +; X32-NEXT: andl $-16, %esp +; X32-NEXT: subl $16, %esp +; X32-NEXT: vmovaps 8(%ebp), %xmm3 +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm2, %xmm2 +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm3, %xmm3 +; X32-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 +; X32-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 +; X32-NEXT: movl %ebp, %esp +; X32-NEXT: popl %ebp +; X32-NEXT: retl +; +; X64-LABEL: knownbits_and_select_shuffle_uitofp: +; X64: # %bb.0: +; X64-NEXT: vandps {{.*}}(%rip), %xmm2, %xmm2 +; X64-NEXT: vandps {{.*}}(%rip), %xmm3, %xmm3 +; X64-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 +; X64-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 +; X64-NEXT: retq + %1 = and <4 x i32> %a2, <i32 65535, i32 -1, i32 255, i32 -1> + %2 = and <4 x i32> %a3, <i32 255, i32 -1, i32 65535, i32 -1> + %3 = icmp eq <4 x i32> %a0, %a1 + %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 + %5 = shufflevector <4 x i32> %4, <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> + %6 = uitofp <4 x i32> %5 to <4 x float> + ret <4 x float> %6 +} + +define <4 x float> @knownbits_lshr_and_select_shuffle_uitofp(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2, <4 x i32> %a3) nounwind { +; X32-LABEL: knownbits_lshr_and_select_shuffle_uitofp: +; X32: # %bb.0: +; X32-NEXT: pushl %ebp +; X32-NEXT: movl %esp, %ebp +; X32-NEXT: andl $-16, %esp +; X32-NEXT: subl $16, %esp +; X32-NEXT: vmovaps 8(%ebp), %xmm3 +; X32-NEXT: vpsrld $1, %xmm2, %xmm4 +; X32-NEXT: vpsrld $5, %xmm2, %xmm2 +; X32-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7] +; X32-NEXT: vandps {{\.LCPI.*}}, %xmm3, %xmm3 +; X32-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 +; X32-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 +; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X32-NEXT: vcvtdq2ps %xmm0, %xmm0 +; X32-NEXT: movl %ebp, %esp +; X32-NEXT: popl %ebp +; X32-NEXT: retl +; +; X64-LABEL: knownbits_lshr_and_select_shuffle_uitofp: +; X64: # %bb.0: +; X64-NEXT: vpsrld $1, %xmm2, %xmm4 +; X64-NEXT: vpsrld $5, %xmm2, %xmm2 +; X64-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7] +; X64-NEXT: vandps {{.*}}(%rip), %xmm3, %xmm3 +; X64-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 +; X64-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 +; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 +; X64-NEXT: retq + %1 = lshr <4 x i32> %a2, <i32 5, i32 1, i32 5, i32 1> + %2 = and <4 x i32> %a3, <i32 255, i32 -1, i32 65535, i32 -1> + %3 = icmp eq <4 x i32> %a0, %a1 + %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 + %5 = shufflevector <4 x i32> %4, <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> + %6 = uitofp <4 x i32> %5 to <4 x float> + ret <4 x float> %6 +} |
