diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-17 01:16:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-17 01:16:14 +0000 |
commit | a66878b881851f6de2c3b21f969ed8e13b844601 (patch) | |
tree | 2004b977defc67bae584213869d351b572e29093 /lib/Target | |
parent | 86e6cb924b85e7a288a4d8bfde5d1a8fb9810c88 (diff) | |
download | external_llvm-a66878b881851f6de2c3b21f969ed8e13b844601.zip external_llvm-a66878b881851f6de2c3b21f969ed8e13b844601.tar.gz external_llvm-a66878b881851f6de2c3b21f969ed8e13b844601.tar.bz2 |
add a horrible note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64719 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/X86/README.txt | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 9a380ac..e8c2561 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -1777,3 +1777,44 @@ LBB1_2: ## overflow it would be nice to produce "into" someday. //===---------------------------------------------------------------------===// + +This code: + +void vec_mpys1(int y[], const int x[], int scaler) { +int i; +for (i = 0; i < 150; i++) + y[i] += (((long long)scaler * (long long)x[i]) >> 31); +} + +Compiles to this loop with GCC 3.x: + +.L5: + movl %ebx, %eax + imull (%edi,%ecx,4) + shrdl $31, %edx, %eax + addl %eax, (%esi,%ecx,4) + incl %ecx + cmpl $149, %ecx + jle .L5 + +llvm-gcc compiles it to the much uglier: + +LBB1_1: ## bb1 + movl 24(%esp), %eax + movl (%eax,%edi,4), %ebx + movl %ebx, %ebp + imull %esi, %ebp + movl %ebx, %eax + mull %ecx + addl %ebp, %edx + sarl $31, %ebx + imull %ecx, %ebx + addl %edx, %ebx + shldl $1, %eax, %ebx + movl 20(%esp), %eax + addl %ebx, (%eax,%edi,4) + incl %edi + cmpl $150, %edi + jne LBB1_1 ## bb1 + +//===---------------------------------------------------------------------===// |