diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-04-24 23:30:10 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-04-24 23:30:10 +0000 |
commit | d7ec518927f92d794dd1ecf59567b040ed6e29f6 (patch) | |
tree | 3e4d391dbd8e68a811a11734c4872b3814c84c39 | |
parent | fc3c17546ba21c9a83d0b7487ba4e7aa8418fb40 (diff) |
Add a new entry.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27963 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/README.txt | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 2ce31d2224..4016e4ee7a 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -1075,3 +1075,35 @@ http://gcc.gnu.org/bugzilla/attachment.cgi?id=8701 There is also one case we do worse on PPC. //===---------------------------------------------------------------------===// + +For this: + +#include <emmintrin.h> +void test(__m128d *r, __m128d *A, double B) { + *r = _mm_loadl_pd(*A, &B); +} + +We generates: + + subl $12, %esp + movsd 24(%esp), %xmm0 + movsd %xmm0, (%esp) + movl 20(%esp), %eax + movapd (%eax), %xmm0 + movlpd (%esp), %xmm0 + movl 16(%esp), %eax + movapd %xmm0, (%eax) + addl $12, %esp + ret + +icc generates: + + movl 4(%esp), %edx #3.6 + movl 8(%esp), %eax #3.6 + movapd (%eax), %xmm0 #4.22 + movlpd 12(%esp), %xmm0 #4.8 + movapd %xmm0, (%edx) #4.3 + ret #5.1 + +So icc is smart enough to know that B is in memory so it doesn't load it and +store it back to stack. |