[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