diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/scalar_widen_div.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/scalar_widen_div.ll | 89 |
1 files changed, 48 insertions, 41 deletions
diff --git a/llvm/test/CodeGen/X86/scalar_widen_div.ll b/llvm/test/CodeGen/X86/scalar_widen_div.ll index 11dda4bc77a..17ca5143836 100644 --- a/llvm/test/CodeGen/X86/scalar_widen_div.ll +++ b/llvm/test/CodeGen/X86/scalar_widen_div.ll @@ -147,30 +147,34 @@ define <5 x i16> @test_short_div(<5 x i16> %num, <5 x i16> %div) { define <4 x i16> @test_ushort_div(<4 x i16> %num, <4 x i16> %div) { ; CHECK-LABEL: test_ushort_div: ; CHECK: # %bb.0: -; CHECK-NEXT: pxor %xmm2, %xmm2 -; CHECK-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] -; CHECK-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] -; CHECK-NEXT: pextrd $1, %xmm0, %eax -; CHECK-NEXT: pextrd $1, %xmm1, %ecx +; CHECK-NEXT: pextrw $1, %xmm0, %eax +; CHECK-NEXT: pextrw $1, %xmm1, %ecx +; CHECK-NEXT: # kill: def $ax killed $ax killed $eax ; CHECK-NEXT: xorl %edx, %edx -; CHECK-NEXT: divl %ecx +; CHECK-NEXT: divw %cx ; CHECK-NEXT: movl %eax, %ecx ; CHECK-NEXT: movd %xmm0, %eax ; CHECK-NEXT: movd %xmm1, %esi +; CHECK-NEXT: # kill: def $ax killed $ax killed $eax ; CHECK-NEXT: xorl %edx, %edx -; CHECK-NEXT: divl %esi +; CHECK-NEXT: divw %si +; CHECK-NEXT: # kill: def $ax killed $ax def $eax ; CHECK-NEXT: movd %eax, %xmm2 -; CHECK-NEXT: pinsrd $1, %ecx, %xmm2 -; CHECK-NEXT: pextrd $2, %xmm0, %eax -; CHECK-NEXT: pextrd $2, %xmm1, %ecx +; CHECK-NEXT: pinsrw $1, %ecx, %xmm2 +; CHECK-NEXT: pextrw $2, %xmm0, %eax +; CHECK-NEXT: pextrw $2, %xmm1, %ecx +; CHECK-NEXT: # kill: def $ax killed $ax killed $eax ; CHECK-NEXT: xorl %edx, %edx -; CHECK-NEXT: divl %ecx -; CHECK-NEXT: pinsrd $2, %eax, %xmm2 -; CHECK-NEXT: pextrd $3, %xmm0, %eax -; CHECK-NEXT: pextrd $3, %xmm1, %ecx +; CHECK-NEXT: divw %cx +; CHECK-NEXT: # kill: def $ax killed $ax def $eax +; CHECK-NEXT: pinsrw $2, %eax, %xmm2 +; CHECK-NEXT: pextrw $3, %xmm0, %eax +; CHECK-NEXT: pextrw $3, %xmm1, %ecx +; CHECK-NEXT: # kill: def $ax killed $ax killed $eax ; CHECK-NEXT: xorl %edx, %edx -; CHECK-NEXT: divl %ecx -; CHECK-NEXT: pinsrd $3, %eax, %xmm2 +; CHECK-NEXT: divw %cx +; CHECK-NEXT: # kill: def $ax killed $ax def $eax +; CHECK-NEXT: pinsrw $3, %eax, %xmm2 ; CHECK-NEXT: movdqa %xmm2, %xmm0 ; CHECK-NEXT: retq %div.r = udiv <4 x i16> %num, %div @@ -257,31 +261,34 @@ define <3 x i64> @test_ulong_div(<3 x i64> %num, <3 x i64> %div) { define <4 x i8> @test_char_rem(<4 x i8> %num, <4 x i8> %rem) { ; CHECK-LABEL: test_char_rem: ; CHECK: # %bb.0: -; CHECK-NEXT: pslld $24, %xmm1 -; CHECK-NEXT: psrad $24, %xmm1 -; CHECK-NEXT: pslld $24, %xmm0 -; CHECK-NEXT: psrad $24, %xmm0 -; CHECK-NEXT: pextrd $1, %xmm0, %eax -; CHECK-NEXT: pextrd $1, %xmm1, %ecx -; CHECK-NEXT: cltd -; CHECK-NEXT: idivl %ecx -; CHECK-NEXT: movl %edx, %ecx -; CHECK-NEXT: movd %xmm0, %eax -; CHECK-NEXT: movd %xmm1, %esi -; CHECK-NEXT: cltd -; CHECK-NEXT: idivl %esi -; CHECK-NEXT: movd %edx, %xmm2 -; CHECK-NEXT: pinsrd $1, %ecx, %xmm2 -; CHECK-NEXT: pextrd $2, %xmm0, %eax -; CHECK-NEXT: pextrd $2, %xmm1, %ecx -; CHECK-NEXT: cltd -; CHECK-NEXT: idivl %ecx -; CHECK-NEXT: pinsrd $2, %edx, %xmm2 -; CHECK-NEXT: pextrd $3, %xmm0, %eax -; CHECK-NEXT: pextrd $3, %xmm1, %ecx -; CHECK-NEXT: cltd -; CHECK-NEXT: idivl %ecx -; CHECK-NEXT: pinsrd $3, %edx, %xmm2 +; CHECK-NEXT: pextrb $1, %xmm0, %eax +; CHECK-NEXT: # kill: def $al killed $al killed $eax +; CHECK-NEXT: cbtw +; CHECK-NEXT: pextrb $1, %xmm1, %ecx +; CHECK-NEXT: idivb %cl +; CHECK-NEXT: movsbl %ah, %ecx +; CHECK-NEXT: pextrb $0, %xmm0, %eax +; CHECK-NEXT: # kill: def $al killed $al killed $eax +; CHECK-NEXT: cbtw +; CHECK-NEXT: pextrb $0, %xmm1, %edx +; CHECK-NEXT: idivb %dl +; CHECK-NEXT: movsbl %ah, %eax +; CHECK-NEXT: movd %eax, %xmm2 +; CHECK-NEXT: pextrb $2, %xmm0, %eax +; CHECK-NEXT: # kill: def $al killed $al killed $eax +; CHECK-NEXT: cbtw +; CHECK-NEXT: pinsrb $1, %ecx, %xmm2 +; CHECK-NEXT: pextrb $2, %xmm1, %ecx +; CHECK-NEXT: idivb %cl +; CHECK-NEXT: movsbl %ah, %ecx +; CHECK-NEXT: pextrb $3, %xmm0, %eax +; CHECK-NEXT: # kill: def $al killed $al killed $eax +; CHECK-NEXT: cbtw +; CHECK-NEXT: pinsrb $2, %ecx, %xmm2 +; CHECK-NEXT: pextrb $3, %xmm1, %ecx +; CHECK-NEXT: idivb %cl +; CHECK-NEXT: movsbl %ah, %eax +; CHECK-NEXT: pinsrb $3, %eax, %xmm2 ; CHECK-NEXT: movdqa %xmm2, %xmm0 ; CHECK-NEXT: retq %rem.r = srem <4 x i8> %num, %rem |