[llvm-commits] CVS: llvm/lib/Target/X86/README.txt
Chris Lattner
lattner at cs.uiuc.edu
Sun Jan 29 01:15:00 PST 2006
Changes in directory llvm/lib/Target/X86:
README.txt updated: 1.27 -> 1.28
---
Log message:
add a high-priority SSE issue from sgefa
---
Diffs of the changes: (+34 -0)
README.txt | 34 ++++++++++++++++++++++++++++++++++
1 files changed, 34 insertions(+)
Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.27 llvm/lib/Target/X86/README.txt:1.28
--- llvm/lib/Target/X86/README.txt:1.27 Sun Jan 29 03:08:15 2006
+++ llvm/lib/Target/X86/README.txt Sun Jan 29 03:14:47 2006
@@ -213,4 +213,38 @@
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.
More information about the llvm-commits
mailing list