fp_round's produced by getCopyFromParts should always be exact, because
authorChris Lattner <sabre@nondot.org>
Sun, 9 Mar 2008 09:38:46 +0000 (09:38 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 9 Mar 2008 09:38:46 +0000 (09:38 +0000)
commit4468c1fd1c3dcc2cca7b881eb9f37f018405d2d9
treef276eba76968f6ef399826ccfef504bcf7248980
parentf30e1cf9b7f96395768e710b4707ecd5587e1185
fp_round's produced by getCopyFromParts should always be exact, because
they are produced by calls (which are known exact) and by cross block copies
which are known to be produced by extends.

This improves:

define double @test2() {
%tmp85 = call double asm sideeffect "fld0", "={st(0)}"()
ret double %tmp85
}

from:

_test2:
subl $20, %esp
# InlineAsm Start
fld0
# InlineAsm End
fstpl 8(%esp)
movsd 8(%esp), %xmm0
movsd %xmm0, (%esp)
fldl (%esp)
addl $20, %esp
#FP_REG_KILL
ret

to:

_test2:
# InlineAsm Start
fld0
# InlineAsm End
#FP_REG_KILL
ret

by avoiding a f64 <-> f80 trip

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48108 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp