A related discussion in this thread: http://gcc.gnu.org/ml/gcc/2013-01/msg00215.html
On Fri, Jan 18, 2013 at 7:57 AM, Miles Bader <mi...@gnu.org> wrote: > Richard Biener <richard.guent...@gmail.com> writes: >> Note that combine does not apply because %eax is used multiple >> times. This also means that for code-size the combining is not a good >> idea. > > Though the lea instruction seems rather large, so in fact the code is > a fair bit smaller without it, e.g. as generated by clang/llvm: > > clang/llvm 3.1 (-O2 -m32): > > 00000000 <foo>: > 0: 8b 44 24 08 mov 0x8(%esp),%eax > 4: 8b 4c 24 04 mov 0x4(%esp),%ecx > 8: 8b 14 c1 mov (%ecx,%eax,8),%edx > b: 89 15 00 00 00 00 mov %edx,0x0 > 11: 89 04 c1 mov %eax,(%ecx,%eax,8) > 14: 31 c0 xor %eax,%eax > 16: c3 ret > > gcc 4.8 20130113 (-O2 -m32): > > 00000000 <foo>: > 0: 8b 54 24 08 mov 0x8(%esp),%edx > 4: 8d 04 d5 00 00 00 00 lea 0x0(,%edx,8),%eax > b: 03 44 24 04 add 0x4(%esp),%eax > f: 8b 08 mov (%eax),%ecx > 11: 89 0d 00 00 00 00 mov %ecx,0x0 > 17: 89 10 mov %edx,(%eax) > 19: 31 c0 xor %eax,%eax > 1b: c3 ret > > -miles > > -- > Ich bin ein Virus. Mach' mit und kopiere mich in Deine .signature.