Skip to content

Commit 89ba150

Browse files
committed
[X86] Add knownbits tests showing missing shift amount demanded elts handling.
1 parent 6a634a5 commit 89ba150

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

llvm/test/CodeGen/X86/combine-shl.ll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,3 +864,37 @@ define <4 x i32> @combine_vec_add_shl_nonsplat(<4 x i32> %a0) {
864864
%2 = add <4 x i32> %1, <i32 3, i32 3, i32 3, i32 3>
865865
ret <4 x i32> %2
866866
}
867+
868+
define <4 x i32> @combine_vec_add_shuffle_shl(<4 x i32> %a0) {
869+
; SSE2-LABEL: combine_vec_add_shuffle_shl:
870+
; SSE2: # %bb.0:
871+
; SSE2-NEXT: movdqa %xmm0, %xmm1
872+
; SSE2-NEXT: pslld $3, %xmm1
873+
; SSE2-NEXT: pslld $2, %xmm0
874+
; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
875+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,3,0]
876+
; SSE2-NEXT: por {{.*}}(%rip), %xmm0
877+
; SSE2-NEXT: retq
878+
;
879+
; SSE41-LABEL: combine_vec_add_shuffle_shl:
880+
; SSE41: # %bb.0:
881+
; SSE41-NEXT: movdqa %xmm0, %xmm1
882+
; SSE41-NEXT: pslld $3, %xmm1
883+
; SSE41-NEXT: pslld $2, %xmm0
884+
; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]
885+
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,1,0]
886+
; SSE41-NEXT: por {{.*}}(%rip), %xmm0
887+
; SSE41-NEXT: retq
888+
;
889+
; AVX-LABEL: combine_vec_add_shuffle_shl:
890+
; AVX: # %bb.0:
891+
; AVX-NEXT: vpsllvd {{.*}}(%rip), %xmm0, %xmm0
892+
; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,1,0]
893+
; AVX-NEXT: vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
894+
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
895+
; AVX-NEXT: retq
896+
%1 = shl <4 x i32> %a0, <i32 2, i32 3, i32 0, i32 1>
897+
%2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 1, i32 0>
898+
%3 = add <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
899+
ret <4 x i32> %3
900+
}

llvm/test/CodeGen/X86/known-bits-vector.ll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,3 +664,31 @@ define <4 x float> @knownbits_lshr_and_select_shuffle_uitofp(<4 x i32> %a0, <4 x
664664
%6 = uitofp <4 x i32> %5 to <4 x float>
665665
ret <4 x float> %6
666666
}
667+
668+
define <2 x double> @knownbits_lshr_subvector_uitofp(<4 x i32> %x) {
669+
; X32-LABEL: knownbits_lshr_subvector_uitofp:
670+
; X32: # %bb.0:
671+
; X32-NEXT: vpsrld $2, %xmm0, %xmm1
672+
; X32-NEXT: vpsrld $1, %xmm0, %xmm0
673+
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]
674+
; X32-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
675+
; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]
676+
; X32-NEXT: vpor %xmm1, %xmm0, %xmm0
677+
; X32-NEXT: vsubpd %xmm1, %xmm0, %xmm0
678+
; X32-NEXT: retl
679+
;
680+
; X64-LABEL: knownbits_lshr_subvector_uitofp:
681+
; X64: # %bb.0:
682+
; X64-NEXT: vpsrld $2, %xmm0, %xmm1
683+
; X64-NEXT: vpsrld $1, %xmm0, %xmm0
684+
; X64-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]
685+
; X64-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
686+
; X64-NEXT: vmovdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]
687+
; X64-NEXT: vpor %xmm1, %xmm0, %xmm0
688+
; X64-NEXT: vsubpd %xmm1, %xmm0, %xmm0
689+
; X64-NEXT: retq
690+
%1 = lshr <4 x i32> %x, <i32 1, i32 2, i32 0, i32 0>
691+
%2 = shufflevector <4 x i32> %1, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
692+
%3 = uitofp <2 x i32> %2 to <2 x double>
693+
ret <2 x double> %3
694+
}

0 commit comments

Comments
 (0)