diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-05-11 14:33:15 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-05-11 14:33:15 +0000 |
commit | a38e72d247506d97578e87bd6e0e228b09dd2d24 (patch) | |
tree | 8882f257606875d89f9569a6e0dd3b24ec4053c0 /llvm/lib | |
parent | 47fed61526358fb60b4293e7393b70f181be4558 (diff) | |
download | bcm5719-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.txt | 38 |
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 + +//===---------------------------------------------------------------------===// + + |