summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2008-05-11 14:33:15 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2008-05-11 14:33:15 +0000
commita38e72d247506d97578e87bd6e0e228b09dd2d24 (patch)
tree8882f257606875d89f9569a6e0dd3b24ec4053c0 /llvm/lib
parent47fed61526358fb60b4293e7393b70f181be4558 (diff)
downloadbcm5719-llvm-a38e72d247506d97578e87bd6e0e228b09dd2d24.tar.gz
bcm5719-llvm-a38e72d247506d97578e87bd6e0e228b09dd2d24.zip
Add note
llvm-svn: 50959
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/README-SSE.txt38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/README-SSE.txt b/llvm/lib/Target/X86/README-SSE.txt
index 5cccfa8daa4..1a5d9045b05 100644
--- a/llvm/lib/Target/X86/README-SSE.txt
+++ b/llvm/lib/Target/X86/README-SSE.txt
@@ -835,3 +835,41 @@ LLVM should be able to generate the same thing as gcc. This looks like it is
just a matter of matching (scalar_to_vector (load x)) to movd.
//===---------------------------------------------------------------------===//
+
+LLVM currently generates stack realignment code, when it is not necessary
+needed. The problem is that we need to know about stack alignment too early,
+before RA runs.
+
+At that point we don't know, whether there will be vector spill, or not.
+Stack realignment logic is overly conservative here, but otherwise we can
+produce unaligned loads/stores.
+
+Fixing this will require some huge RA changes.
+
+Testcase:
+#include <emmintrin.h>
+
+typedef short vSInt16 __attribute__ ((__vector_size__ (16)));
+
+static const vSInt16 a = {- 22725, - 12873, - 22725, - 12873, - 22725, - 12873,
+- 22725, - 12873};;
+
+vSInt16 madd(vSInt16 b)
+{
+ return _mm_madd_epi16(a, b);
+}
+
+Generated code (x86-32, linux):
+madd:
+ pushl %ebp
+ movl %esp, %ebp
+ andl $-16, %esp
+ movaps .LCPI1_0, %xmm1
+ pmaddwd %xmm1, %xmm0
+ movl %ebp, %esp
+ popl %ebp
+ ret
+
+//===---------------------------------------------------------------------===//
+
+
OpenPOWER on IntegriCloud