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.

Reply via email to