diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/combine-sdiv.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/combine-sdiv.ll | 312 |
1 files changed, 3 insertions, 309 deletions
diff --git a/llvm/test/CodeGen/X86/combine-sdiv.ll b/llvm/test/CodeGen/X86/combine-sdiv.ll index 26a3cd47645..baff826858c 100644 --- a/llvm/test/CodeGen/X86/combine-sdiv.ll +++ b/llvm/test/CodeGen/X86/combine-sdiv.ll @@ -3294,322 +3294,16 @@ define i1 @bool_sdiv(i1 %x, i1 %y) { ; CHECK-LABEL: bool_sdiv: ; CHECK: # %bb.0: ; CHECK-NEXT: movl %edi, %eax -; CHECK-NEXT: andb $1, %al -; CHECK-NEXT: negb %al ; CHECK-NEXT: # kill: def $al killed $al killed $eax -; CHECK-NEXT: cbtw -; CHECK-NEXT: andb $1, %sil -; CHECK-NEXT: negb %sil -; CHECK-NEXT: idivb %sil ; CHECK-NEXT: retq %r = sdiv i1 %x, %y ret i1 %r } define <4 x i1> @boolvec_sdiv(<4 x i1> %x, <4 x i1> %y) { -; SSE2-LABEL: boolvec_sdiv: -; SSE2: # %bb.0: -; SSE2-NEXT: pslld $31, %xmm1 -; SSE2-NEXT: psrad $31, %xmm1 -; SSE2-NEXT: pslld $31, %xmm0 -; SSE2-NEXT: psrad $31, %xmm0 -; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[3,1,2,3] -; SSE2-NEXT: movd %xmm2, %eax -; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,1,2,3] -; SSE2-NEXT: movd %xmm2, %ecx -; SSE2-NEXT: cltd -; SSE2-NEXT: idivl %ecx -; SSE2-NEXT: movd %eax, %xmm2 -; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] -; SSE2-NEXT: movd %xmm3, %eax -; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1] -; SSE2-NEXT: movd %xmm3, %ecx -; SSE2-NEXT: cltd -; SSE2-NEXT: idivl %ecx -; SSE2-NEXT: movd %eax, %xmm3 -; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1] -; SSE2-NEXT: movd %xmm0, %eax -; SSE2-NEXT: movd %xmm1, %ecx -; SSE2-NEXT: cltd -; SSE2-NEXT: idivl %ecx -; SSE2-NEXT: movd %eax, %xmm2 -; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] -; SSE2-NEXT: movd %xmm0, %eax -; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3] -; SSE2-NEXT: movd %xmm0, %ecx -; SSE2-NEXT: cltd -; SSE2-NEXT: idivl %ecx -; SSE2-NEXT: movd %eax, %xmm0 -; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] -; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0] -; SSE2-NEXT: movdqa %xmm2, %xmm0 -; SSE2-NEXT: retq -; -; SSE41-LABEL: boolvec_sdiv: -; SSE41: # %bb.0: -; SSE41-NEXT: pslld $31, %xmm1 -; SSE41-NEXT: psrad $31, %xmm1 -; SSE41-NEXT: pslld $31, %xmm0 -; SSE41-NEXT: psrad $31, %xmm0 -; SSE41-NEXT: pextrd $1, %xmm0, %eax -; SSE41-NEXT: pextrd $1, %xmm1, %ecx -; SSE41-NEXT: cltd -; SSE41-NEXT: idivl %ecx -; SSE41-NEXT: movl %eax, %ecx -; SSE41-NEXT: movd %xmm0, %eax -; SSE41-NEXT: movd %xmm1, %esi -; SSE41-NEXT: cltd -; SSE41-NEXT: idivl %esi -; SSE41-NEXT: movd %eax, %xmm2 -; SSE41-NEXT: pinsrd $1, %ecx, %xmm2 -; SSE41-NEXT: pextrd $2, %xmm0, %eax -; SSE41-NEXT: pextrd $2, %xmm1, %ecx -; SSE41-NEXT: cltd -; SSE41-NEXT: idivl %ecx -; SSE41-NEXT: pinsrd $2, %eax, %xmm2 -; SSE41-NEXT: pextrd $3, %xmm0, %eax -; SSE41-NEXT: pextrd $3, %xmm1, %ecx -; SSE41-NEXT: cltd -; SSE41-NEXT: idivl %ecx -; SSE41-NEXT: pinsrd $3, %eax, %xmm2 -; SSE41-NEXT: movdqa %xmm2, %xmm0 -; SSE41-NEXT: retq -; -; AVX1-LABEL: boolvec_sdiv: -; AVX1: # %bb.0: -; AVX1-NEXT: vpslld $31, %xmm1, %xmm1 -; AVX1-NEXT: vpsrad $31, %xmm1, %xmm1 -; AVX1-NEXT: vpslld $31, %xmm0, %xmm0 -; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 -; AVX1-NEXT: vpextrd $1, %xmm0, %eax -; AVX1-NEXT: vpextrd $1, %xmm1, %ecx -; AVX1-NEXT: cltd -; AVX1-NEXT: idivl %ecx -; AVX1-NEXT: movl %eax, %ecx -; AVX1-NEXT: vmovd %xmm0, %eax -; AVX1-NEXT: vmovd %xmm1, %esi -; AVX1-NEXT: cltd -; AVX1-NEXT: idivl %esi -; AVX1-NEXT: vmovd %eax, %xmm2 -; AVX1-NEXT: vpinsrd $1, %ecx, %xmm2, %xmm2 -; AVX1-NEXT: vpextrd $2, %xmm0, %eax -; AVX1-NEXT: vpextrd $2, %xmm1, %ecx -; AVX1-NEXT: cltd -; AVX1-NEXT: idivl %ecx -; AVX1-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2 -; AVX1-NEXT: vpextrd $3, %xmm0, %eax -; AVX1-NEXT: vpextrd $3, %xmm1, %ecx -; AVX1-NEXT: cltd -; AVX1-NEXT: idivl %ecx -; AVX1-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0 -; AVX1-NEXT: retq -; -; AVX2-LABEL: boolvec_sdiv: -; AVX2: # %bb.0: -; AVX2-NEXT: vpslld $31, %xmm1, %xmm1 -; AVX2-NEXT: vpsrad $31, %xmm1, %xmm1 -; AVX2-NEXT: vpslld $31, %xmm0, %xmm0 -; AVX2-NEXT: vpsrad $31, %xmm0, %xmm0 -; AVX2-NEXT: vpextrd $1, %xmm0, %eax -; AVX2-NEXT: vpextrd $1, %xmm1, %ecx -; AVX2-NEXT: cltd -; AVX2-NEXT: idivl %ecx -; AVX2-NEXT: movl %eax, %ecx -; AVX2-NEXT: vmovd %xmm0, %eax -; AVX2-NEXT: vmovd %xmm1, %esi -; AVX2-NEXT: cltd -; AVX2-NEXT: idivl %esi -; AVX2-NEXT: vmovd %eax, %xmm2 -; AVX2-NEXT: vpinsrd $1, %ecx, %xmm2, %xmm2 -; AVX2-NEXT: vpextrd $2, %xmm0, %eax -; AVX2-NEXT: vpextrd $2, %xmm1, %ecx -; AVX2-NEXT: cltd -; AVX2-NEXT: idivl %ecx -; AVX2-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2 -; AVX2-NEXT: vpextrd $3, %xmm0, %eax -; AVX2-NEXT: vpextrd $3, %xmm1, %ecx -; AVX2-NEXT: cltd -; AVX2-NEXT: idivl %ecx -; AVX2-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0 -; AVX2-NEXT: retq -; -; AVX512F-LABEL: boolvec_sdiv: -; AVX512F: # %bb.0: -; AVX512F-NEXT: vpslld $31, %xmm1, %xmm1 -; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k3 -; AVX512F-NEXT: kshiftrw $3, %k3, %k0 -; AVX512F-NEXT: vpslld $31, %xmm0, %xmm0 -; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k4 -; AVX512F-NEXT: kshiftrw $3, %k4, %k1 -; AVX512F-NEXT: kshiftrw $2, %k3, %k2 -; AVX512F-NEXT: kshiftrw $2, %k4, %k5 -; AVX512F-NEXT: kmovw %k5, %ecx -; AVX512F-NEXT: kshiftrw $1, %k3, %k5 -; AVX512F-NEXT: kmovw %k3, %edi -; AVX512F-NEXT: kshiftrw $1, %k4, %k3 -; AVX512F-NEXT: kmovw %k4, %esi -; AVX512F-NEXT: kmovw %k5, %edx -; AVX512F-NEXT: kmovw %k3, %eax -; AVX512F-NEXT: andb $1, %al -; AVX512F-NEXT: negb %al -; AVX512F-NEXT: # kill: def $al killed $al killed $eax -; AVX512F-NEXT: cbtw -; AVX512F-NEXT: andb $1, %dl -; AVX512F-NEXT: negb %dl -; AVX512F-NEXT: idivb %dl -; AVX512F-NEXT: movl %eax, %edx -; AVX512F-NEXT: andb $1, %sil -; AVX512F-NEXT: negb %sil -; AVX512F-NEXT: movl %esi, %eax -; AVX512F-NEXT: cbtw -; AVX512F-NEXT: andb $1, %dil -; AVX512F-NEXT: negb %dil -; AVX512F-NEXT: idivb %dil -; AVX512F-NEXT: movl %eax, %esi -; AVX512F-NEXT: andb $1, %cl -; AVX512F-NEXT: negb %cl -; AVX512F-NEXT: movl %ecx, %eax -; AVX512F-NEXT: cbtw -; AVX512F-NEXT: kmovw %k2, %ecx -; AVX512F-NEXT: andb $1, %cl -; AVX512F-NEXT: negb %cl -; AVX512F-NEXT: idivb %cl -; AVX512F-NEXT: movl %eax, %ecx -; AVX512F-NEXT: kmovw %k1, %eax -; AVX512F-NEXT: andb $1, %al -; AVX512F-NEXT: negb %al -; AVX512F-NEXT: # kill: def $al killed $al killed $eax -; AVX512F-NEXT: cbtw -; AVX512F-NEXT: kmovw %k0, %edi -; AVX512F-NEXT: andb $1, %dil -; AVX512F-NEXT: negb %dil -; AVX512F-NEXT: idivb %dil -; AVX512F-NEXT: # kill: def $al killed $al def $eax -; AVX512F-NEXT: kmovw %edx, %k0 -; AVX512F-NEXT: kmovw %esi, %k1 -; AVX512F-NEXT: kshiftrw $1, %k1, %k2 -; AVX512F-NEXT: kxorw %k0, %k2, %k0 -; AVX512F-NEXT: kshiftlw $15, %k0, %k0 -; AVX512F-NEXT: kshiftrw $14, %k0, %k0 -; AVX512F-NEXT: kxorw %k0, %k1, %k0 -; AVX512F-NEXT: kshiftrw $2, %k0, %k1 -; AVX512F-NEXT: kmovw %ecx, %k2 -; AVX512F-NEXT: kxorw %k2, %k1, %k1 -; AVX512F-NEXT: kshiftlw $15, %k1, %k1 -; AVX512F-NEXT: kshiftrw $13, %k1, %k1 -; AVX512F-NEXT: kxorw %k1, %k0, %k0 -; AVX512F-NEXT: kshiftlw $13, %k0, %k0 -; AVX512F-NEXT: kshiftrw $13, %k0, %k0 -; AVX512F-NEXT: kmovw %eax, %k1 -; AVX512F-NEXT: kshiftlw $3, %k1, %k1 -; AVX512F-NEXT: korw %k1, %k0, %k1 -; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z} -; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 -; AVX512F-NEXT: vzeroupper -; AVX512F-NEXT: retq -; -; AVX512BW-LABEL: boolvec_sdiv: -; AVX512BW: # %bb.0: -; AVX512BW-NEXT: vpslld $31, %xmm1, %xmm1 -; AVX512BW-NEXT: vptestmd %xmm1, %xmm1, %k3 -; AVX512BW-NEXT: kshiftrw $3, %k3, %k0 -; AVX512BW-NEXT: vpslld $31, %xmm0, %xmm0 -; AVX512BW-NEXT: vptestmd %xmm0, %xmm0, %k4 -; AVX512BW-NEXT: kshiftrw $3, %k4, %k1 -; AVX512BW-NEXT: kshiftrw $2, %k3, %k2 -; AVX512BW-NEXT: kshiftrw $2, %k4, %k5 -; AVX512BW-NEXT: kmovd %k5, %ecx -; AVX512BW-NEXT: kshiftrw $1, %k3, %k5 -; AVX512BW-NEXT: kmovd %k3, %edi -; AVX512BW-NEXT: kshiftrw $1, %k4, %k3 -; AVX512BW-NEXT: kmovd %k4, %esi -; AVX512BW-NEXT: kmovd %k5, %edx -; AVX512BW-NEXT: kmovd %k3, %eax -; AVX512BW-NEXT: andb $1, %al -; AVX512BW-NEXT: negb %al -; AVX512BW-NEXT: # kill: def $al killed $al killed $eax -; AVX512BW-NEXT: cbtw -; AVX512BW-NEXT: andb $1, %dl -; AVX512BW-NEXT: negb %dl -; AVX512BW-NEXT: idivb %dl -; AVX512BW-NEXT: movl %eax, %edx -; AVX512BW-NEXT: andb $1, %sil -; AVX512BW-NEXT: negb %sil -; AVX512BW-NEXT: movl %esi, %eax -; AVX512BW-NEXT: cbtw -; AVX512BW-NEXT: andb $1, %dil -; AVX512BW-NEXT: negb %dil -; AVX512BW-NEXT: idivb %dil -; AVX512BW-NEXT: movl %eax, %esi -; AVX512BW-NEXT: andb $1, %cl -; AVX512BW-NEXT: negb %cl -; AVX512BW-NEXT: movl %ecx, %eax -; AVX512BW-NEXT: cbtw -; AVX512BW-NEXT: kmovd %k2, %ecx -; AVX512BW-NEXT: andb $1, %cl -; AVX512BW-NEXT: negb %cl -; AVX512BW-NEXT: idivb %cl -; AVX512BW-NEXT: movl %eax, %ecx -; AVX512BW-NEXT: kmovd %k1, %eax -; AVX512BW-NEXT: andb $1, %al -; AVX512BW-NEXT: negb %al -; AVX512BW-NEXT: # kill: def $al killed $al killed $eax -; AVX512BW-NEXT: cbtw -; AVX512BW-NEXT: kmovd %k0, %edi -; AVX512BW-NEXT: andb $1, %dil -; AVX512BW-NEXT: negb %dil -; AVX512BW-NEXT: idivb %dil -; AVX512BW-NEXT: # kill: def $al killed $al def $eax -; AVX512BW-NEXT: kmovd %edx, %k0 -; AVX512BW-NEXT: kmovd %esi, %k1 -; AVX512BW-NEXT: kshiftrw $1, %k1, %k2 -; AVX512BW-NEXT: kxorw %k0, %k2, %k0 -; AVX512BW-NEXT: kshiftlw $15, %k0, %k0 -; AVX512BW-NEXT: kshiftrw $14, %k0, %k0 -; AVX512BW-NEXT: kxorw %k0, %k1, %k0 -; AVX512BW-NEXT: kshiftrw $2, %k0, %k1 -; AVX512BW-NEXT: kmovd %ecx, %k2 -; AVX512BW-NEXT: kxorw %k2, %k1, %k1 -; AVX512BW-NEXT: kshiftlw $15, %k1, %k1 -; AVX512BW-NEXT: kshiftrw $13, %k1, %k1 -; AVX512BW-NEXT: kxorw %k1, %k0, %k0 -; AVX512BW-NEXT: kshiftlw $13, %k0, %k0 -; AVX512BW-NEXT: kshiftrw $13, %k0, %k0 -; AVX512BW-NEXT: kmovd %eax, %k1 -; AVX512BW-NEXT: kshiftlw $3, %k1, %k1 -; AVX512BW-NEXT: korw %k1, %k0, %k1 -; AVX512BW-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 -; AVX512BW-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} -; AVX512BW-NEXT: retq -; -; XOP-LABEL: boolvec_sdiv: -; XOP: # %bb.0: -; XOP-NEXT: vpslld $31, %xmm1, %xmm1 -; XOP-NEXT: vpsrad $31, %xmm1, %xmm1 -; XOP-NEXT: vpslld $31, %xmm0, %xmm0 -; XOP-NEXT: vpsrad $31, %xmm0, %xmm0 -; XOP-NEXT: vpextrd $1, %xmm0, %eax -; XOP-NEXT: vpextrd $1, %xmm1, %ecx -; XOP-NEXT: cltd -; XOP-NEXT: idivl %ecx -; XOP-NEXT: movl %eax, %ecx -; XOP-NEXT: vmovd %xmm0, %eax -; XOP-NEXT: vmovd %xmm1, %esi -; XOP-NEXT: cltd -; XOP-NEXT: idivl %esi -; XOP-NEXT: vmovd %eax, %xmm2 -; XOP-NEXT: vpinsrd $1, %ecx, %xmm2, %xmm2 -; XOP-NEXT: vpextrd $2, %xmm0, %eax -; XOP-NEXT: vpextrd $2, %xmm1, %ecx -; XOP-NEXT: cltd -; XOP-NEXT: idivl %ecx -; XOP-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2 -; XOP-NEXT: vpextrd $3, %xmm0, %eax -; XOP-NEXT: vpextrd $3, %xmm1, %ecx -; XOP-NEXT: cltd -; XOP-NEXT: idivl %ecx -; XOP-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0 -; XOP-NEXT: retq +; CHECK-LABEL: boolvec_sdiv: +; CHECK: # %bb.0: +; CHECK-NEXT: retq %r = sdiv <4 x i1> %x, %y ret <4 x i1> %r } |