add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45397 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-12-29 05:51:58 +00:00
parent 92c06a01de
commit 7ede51b964

View File

@ -1612,8 +1612,48 @@ a mov. Something like:
addl (%edx,%edi,4), %ebx addl (%edx,%edi,4), %ebx
addl %ebx, (%ecx,%edi,4) addl %ebx, (%ecx,%edi,4)
Additionally, LSR should rewrite the exit condition of the loop to use Here is another interesting example:
void vertical_compose97iH1(int *b0, int *b1, int *b2, int width){
int i;
for(i=0; i<width; i++)
b1[i] -= (1*(b0[i] + b2[i])+0)>>0;
}
We miss the r/m/w opportunity here by using 2 subs instead of an add+sub[mem]:
LBB9_2: # bb
movl (%ecx,%edi,4), %ebx
subl (%esi,%edi,4), %ebx
subl (%edx,%edi,4), %ebx
movl %ebx, (%ecx,%edi,4)
incl %edi
cmpl %eax, %edi
jne LBB9_2 # bb
Additionally, LSR should rewrite the exit condition of these loops to use
a stride-4 IV, would would allow all the scales in the loop to go away. a stride-4 IV, would would allow all the scales in the loop to go away.
This would result in smaller code and more efficient microops. This would result in smaller code and more efficient microops.
//===---------------------------------------------------------------------===// //===---------------------------------------------------------------------===//
We should be smarter about conversion from fpstack to XMM regs.
double foo();
void bar(double *P) { *P = foo(); }
We compile that to:
_bar:
subl $12, %esp
call L_foo$stub
fstpl (%esp)
movl 16(%esp), %eax
movsd (%esp), %xmm0
movsd %xmm0, (%eax)
addl $12, %esp
ret
for example. The magic to/from the stack is unneeded.
//===---------------------------------------------------------------------===//