1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00

add a high-priority SSE issue from sgefa

llvm-svn: 25787
This commit is contained in:
Chris Lattner 2006-01-29 09:14:47 +00:00
parent 7048df99cd
commit 7a775bff1e

View File

@ -213,4 +213,38 @@ commutative, it is not matched with the load on both sides. The dag combiner
should be made smart enough to cannonicalize the load into the RHS of a compare
when it can invert the result of the compare for free.
//===---------------------------------------------------------------------===//
The code generated for 'abs' is truly aweful:
float %foo(float %tmp.38) {
%tmp.39 = setgt float %tmp.38, 0.000000e+00
%tmp.45 = sub float -0.000000e+00, %tmp.38
%mem_tmp.0.0 = select bool %tmp.39, float %tmp.38, float %tmp.45
ret float %mem_tmp.0.0
}
_foo:
subl $4, %esp
movss LCPI1_0, %xmm0
movss 8(%esp), %xmm1
subss %xmm1, %xmm0
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm1
setp %al
seta %cl
orb %cl, %al
testb %al, %al
jne LBB_foo_2 #
LBB_foo_1: #
movss %xmm0, %xmm1
LBB_foo_2: #
movss %xmm1, (%esp)
flds (%esp)
addl $4, %esp
ret
This should be a high-priority to fix. With the fp-stack, this is a single
instruction. With SSE it could be far better than this. Why is the sequence
above using 'setp'? It shouldn't care about nan's.