diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/ftrunc.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/ftrunc.ll | 157 |
1 files changed, 73 insertions, 84 deletions
diff --git a/llvm/test/CodeGen/X86/ftrunc.ll b/llvm/test/CodeGen/X86/ftrunc.ll index 01112f48bf4..ff40f619853 100644 --- a/llvm/test/CodeGen/X86/ftrunc.ll +++ b/llvm/test/CodeGen/X86/ftrunc.ll @@ -106,39 +106,34 @@ define <4 x float> @trunc_unsigned_v4f32(<4 x float> %x) #0 { define <2 x double> @trunc_unsigned_v2f64(<2 x double> %x) #0 { ; SSE2-LABEL: trunc_unsigned_v2f64: ; SSE2: # %bb.0: -; SSE2-NEXT: movapd %xmm0, %xmm1 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1] ; SSE2-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero -; SSE2-NEXT: movapd %xmm1, %xmm3 -; SSE2-NEXT: subsd %xmm2, %xmm3 -; SSE2-NEXT: cvttsd2si %xmm3, %rax -; SSE2-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000 -; SSE2-NEXT: xorq %rcx, %rax -; SSE2-NEXT: cvttsd2si %xmm1, %rdx -; SSE2-NEXT: ucomisd %xmm2, %xmm1 -; SSE2-NEXT: cmovaeq %rax, %rdx ; SSE2-NEXT: movapd %xmm0, %xmm1 ; SSE2-NEXT: subsd %xmm2, %xmm1 ; SSE2-NEXT: cvttsd2si %xmm1, %rax +; SSE2-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000 +; SSE2-NEXT: xorq %rcx, %rax +; SSE2-NEXT: cvttsd2si %xmm0, %rdx +; SSE2-NEXT: ucomisd %xmm2, %xmm0 +; SSE2-NEXT: cmovaeq %rax, %rdx +; SSE2-NEXT: movq %rdx, %xmm1 +; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1] +; SSE2-NEXT: movapd %xmm0, %xmm3 +; SSE2-NEXT: subsd %xmm2, %xmm3 +; SSE2-NEXT: cvttsd2si %xmm3, %rax ; SSE2-NEXT: xorq %rcx, %rax ; SSE2-NEXT: cvttsd2si %xmm0, %rcx ; SSE2-NEXT: ucomisd %xmm2, %xmm0 ; SSE2-NEXT: cmovaeq %rax, %rcx -; SSE2-NEXT: movq %rcx, %xmm1 -; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [1127219200,1160773632,0,0] -; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; SSE2-NEXT: movapd {{.*#+}} xmm3 = [4503599627370496,1.9342813113834067E+25] -; SSE2-NEXT: subpd %xmm3, %xmm1 +; SSE2-NEXT: movq %rcx, %xmm0 +; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0] +; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [4294967295,4294967295] +; SSE2-NEXT: pand %xmm1, %xmm0 +; SSE2-NEXT: por {{.*}}(%rip), %xmm0 +; SSE2-NEXT: psrlq $32, %xmm1 +; SSE2-NEXT: por {{.*}}(%rip), %xmm1 +; SSE2-NEXT: subpd {{.*}}(%rip), %xmm1 +; SSE2-NEXT: addpd %xmm0, %xmm1 ; SSE2-NEXT: movapd %xmm1, %xmm0 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] -; SSE2-NEXT: addpd %xmm1, %xmm0 -; SSE2-NEXT: movq %rdx, %xmm1 -; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; SSE2-NEXT: subpd %xmm3, %xmm1 -; SSE2-NEXT: movapd %xmm1, %xmm2 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm1[1] -; SSE2-NEXT: addpd %xmm1, %xmm2 -; SSE2-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; SSE2-NEXT: retq ; ; SSE41-LABEL: trunc_unsigned_v2f64: @@ -158,68 +153,62 @@ define <2 x double> @trunc_unsigned_v2f64(<2 x double> %x) #0 { define <4 x double> @trunc_unsigned_v4f64(<4 x double> %x) #0 { ; SSE2-LABEL: trunc_unsigned_v4f64: ; SSE2: # %bb.0: -; SSE2-NEXT: movapd %xmm1, %xmm3 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm3 = xmm3[1],xmm1[1] -; SSE2-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero -; SSE2-NEXT: movapd %xmm3, %xmm4 -; SSE2-NEXT: subsd %xmm2, %xmm4 -; SSE2-NEXT: cvttsd2si %xmm4, %rcx -; SSE2-NEXT: movabsq $-9223372036854775808, %rdx # imm = 0x8000000000000000 -; SSE2-NEXT: xorq %rdx, %rcx -; SSE2-NEXT: cvttsd2si %xmm3, %rax -; SSE2-NEXT: ucomisd %xmm2, %xmm3 -; SSE2-NEXT: cmovaeq %rcx, %rax -; SSE2-NEXT: movapd %xmm1, %xmm3 -; SSE2-NEXT: subsd %xmm2, %xmm3 -; SSE2-NEXT: cvttsd2si %xmm3, %rsi -; SSE2-NEXT: xorq %rdx, %rsi +; SSE2-NEXT: movapd %xmm1, %xmm2 +; SSE2-NEXT: movsd {{.*#+}} xmm3 = mem[0],zero +; SSE2-NEXT: subsd %xmm3, %xmm1 ; SSE2-NEXT: cvttsd2si %xmm1, %rcx -; SSE2-NEXT: ucomisd %xmm2, %xmm1 -; SSE2-NEXT: cmovaeq %rsi, %rcx -; SSE2-NEXT: movapd %xmm0, %xmm1 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1] -; SSE2-NEXT: movapd %xmm1, %xmm3 -; SSE2-NEXT: subsd %xmm2, %xmm3 -; SSE2-NEXT: cvttsd2si %xmm3, %rsi -; SSE2-NEXT: xorq %rdx, %rsi -; SSE2-NEXT: cvttsd2si %xmm1, %rdi -; SSE2-NEXT: ucomisd %xmm2, %xmm1 -; SSE2-NEXT: cmovaeq %rsi, %rdi -; SSE2-NEXT: movapd %xmm0, %xmm1 -; SSE2-NEXT: subsd %xmm2, %xmm1 -; SSE2-NEXT: cvttsd2si %xmm1, %rsi -; SSE2-NEXT: xorq %rdx, %rsi -; SSE2-NEXT: cvttsd2si %xmm0, %rdx -; SSE2-NEXT: ucomisd %xmm2, %xmm0 -; SSE2-NEXT: cmovaeq %rsi, %rdx +; SSE2-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000 +; SSE2-NEXT: xorq %rax, %rcx +; SSE2-NEXT: cvttsd2si %xmm2, %rdx +; SSE2-NEXT: ucomisd %xmm3, %xmm2 +; SSE2-NEXT: cmovaeq %rcx, %rdx ; SSE2-NEXT: movq %rdx, %xmm1 -; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [1127219200,1160773632,0,0] -; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; SSE2-NEXT: movapd {{.*#+}} xmm3 = [4503599627370496,1.9342813113834067E+25] -; SSE2-NEXT: subpd %xmm3, %xmm1 -; SSE2-NEXT: movapd %xmm1, %xmm0 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] -; SSE2-NEXT: addpd %xmm1, %xmm0 -; SSE2-NEXT: movq %rdi, %xmm1 -; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; SSE2-NEXT: subpd %xmm3, %xmm1 -; SSE2-NEXT: movapd %xmm1, %xmm4 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm1[1] -; SSE2-NEXT: addpd %xmm1, %xmm4 -; SSE2-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm4[0] -; SSE2-NEXT: movq %rcx, %xmm4 -; SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1] -; SSE2-NEXT: subpd %xmm3, %xmm4 -; SSE2-NEXT: movapd %xmm4, %xmm1 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm4[1] -; SSE2-NEXT: addpd %xmm4, %xmm1 -; SSE2-NEXT: movq %rax, %xmm4 -; SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1] -; SSE2-NEXT: subpd %xmm3, %xmm4 -; SSE2-NEXT: movapd %xmm4, %xmm2 -; SSE2-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm4[1] -; SSE2-NEXT: addpd %xmm4, %xmm2 -; SSE2-NEXT: unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] +; SSE2-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1,1] +; SSE2-NEXT: movapd %xmm2, %xmm4 +; SSE2-NEXT: subsd %xmm3, %xmm4 +; SSE2-NEXT: cvttsd2si %xmm4, %rcx +; SSE2-NEXT: xorq %rax, %rcx +; SSE2-NEXT: cvttsd2si %xmm2, %rdx +; SSE2-NEXT: ucomisd %xmm3, %xmm2 +; SSE2-NEXT: cmovaeq %rcx, %rdx +; SSE2-NEXT: movq %rdx, %xmm2 +; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] +; SSE2-NEXT: movapd %xmm0, %xmm2 +; SSE2-NEXT: subsd %xmm3, %xmm2 +; SSE2-NEXT: cvttsd2si %xmm2, %rcx +; SSE2-NEXT: xorq %rax, %rcx +; SSE2-NEXT: cvttsd2si %xmm0, %rdx +; SSE2-NEXT: ucomisd %xmm3, %xmm0 +; SSE2-NEXT: cmovaeq %rcx, %rdx +; SSE2-NEXT: movq %rdx, %xmm2 +; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1] +; SSE2-NEXT: movapd %xmm0, %xmm4 +; SSE2-NEXT: subsd %xmm3, %xmm4 +; SSE2-NEXT: cvttsd2si %xmm4, %rcx +; SSE2-NEXT: xorq %rax, %rcx +; SSE2-NEXT: cvttsd2si %xmm0, %rax +; SSE2-NEXT: ucomisd %xmm3, %xmm0 +; SSE2-NEXT: cmovaeq %rcx, %rax +; SSE2-NEXT: movq %rax, %xmm0 +; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0] +; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [4294967295,4294967295] +; SSE2-NEXT: movdqa %xmm2, %xmm3 +; SSE2-NEXT: pand %xmm0, %xmm3 +; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200] +; SSE2-NEXT: por %xmm4, %xmm3 +; SSE2-NEXT: psrlq $32, %xmm2 +; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072] +; SSE2-NEXT: por %xmm5, %xmm2 +; SSE2-NEXT: movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25] +; SSE2-NEXT: subpd %xmm6, %xmm2 +; SSE2-NEXT: addpd %xmm3, %xmm2 +; SSE2-NEXT: pand %xmm1, %xmm0 +; SSE2-NEXT: por %xmm4, %xmm0 +; SSE2-NEXT: psrlq $32, %xmm1 +; SSE2-NEXT: por %xmm5, %xmm1 +; SSE2-NEXT: subpd %xmm6, %xmm1 +; SSE2-NEXT: addpd %xmm0, %xmm1 +; SSE2-NEXT: movapd %xmm2, %xmm0 ; SSE2-NEXT: retq ; ; SSE41-LABEL: trunc_unsigned_v4f64: |