From d7ec518927f92d794dd1ecf59567b040ed6e29f6 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Mon, 24 Apr 2006 23:30:10 +0000 Subject: [PATCH] Add a new entry. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27963 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/README.txt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 2ce31d2224d..4016e4ee7a2 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 +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.