when we know the signbit of an input to uint_to_fp is zero,
authorChris Lattner <sabre@nondot.org>
Thu, 26 Jun 2008 00:16:49 +0000 (00:16 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Jun 2008 00:16:49 +0000 (00:16 +0000)
commitcda8875433ef74c39c4151d1a58df0588168b2e2
treefb6cbc1c7eefef0b053482a3995b934944f0d256
parent6b098dee286cc6fe5a5a476464d92dec5602e406
when we know the signbit of an input to uint_to_fp is zero,
change it to sint_to_fp on targets where that is cheaper (and
visaversa of course).  This allows us to compile uint_to_fp to:

_test:
movl 4(%esp), %eax
shrl $23, %eax
cvtsi2ss %eax, %xmm0
movl 8(%esp), %eax
movss %xmm0, (%eax)
ret

instead of:

.align 3
LCPI1_0: ##  double
.long 0 ## double least significant word 4.5036e+15
.long 1127219200 ## double most significant word 4.5036e+15
.text
.align 4,0x90
.globl _test
_test:
subl $12, %esp
movl 16(%esp), %eax
shrl $23, %eax
movl %eax, (%esp)
movl $1127219200, 4(%esp)
movsd (%esp), %xmm0
subsd LCPI1_0, %xmm0
cvtsd2ss %xmm0, %xmm0
movl 20(%esp), %eax
movss %xmm0, (%eax)
addl $12, %esp
ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52747 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/uint_to_fp.ll [new file with mode: 0644]