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:
parent
7048df99cd
commit
7a775bff1e
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user