Changes in directory llvm/lib/Target/X86:
README.txt updated: 1.158 -> 1.159 --- Log message: add generation of unnecessary push/pop around calls --- Diffs of the changes: (+42 -0) README.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+) Index: llvm/lib/Target/X86/README.txt diff -u llvm/lib/Target/X86/README.txt:1.158 llvm/lib/Target/X86/README.txt:1.159 --- llvm/lib/Target/X86/README.txt:1.158 Wed Mar 14 16:03:53 2007 +++ llvm/lib/Target/X86/README.txt Wed Mar 21 16:16:39 2007 @@ -989,3 +989,45 @@ ret //===---------------------------------------------------------------------===// + +We use push/pop of stack space around calls in situations where we don't have to. +Call to f below produces: + subl $16, %esp <<<<< + movl %eax, (%esp) + call L_f$stub + addl $16, %esp <<<<< +The stack push/pop can be moved into the prolog/epilog. It does this because it's +building the frame pointer, but this should not be sufficient, only the use of alloca +should cause it to do this. +(There are other issues shown by this code, but this is one.) + +typedef struct _range_t { + float fbias; + float fscale; + int ibias; + int iscale; + int ishift; + unsigned char lut[]; +} range_t; + +struct _decode_t { + int type:4; + int unit:4; + int alpha:8; + int N:8; + int bpc:8; + int bpp:16; + int skip:8; + int swap:8; + const range_t*const*range; +}; + +typedef struct _decode_t decode_t; + +extern int f(const decode_t* decode); + +int decode_byte (const decode_t* decode) { + if (decode->swap != 0) + return f(decode); + return 0; +} _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits