http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48316

--- Comment #2 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 12 Mar 2014, xinliangli at gmail dot com wrote:

> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48316
> 
> davidxl <xinliangli at gmail dot com> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
>                  CC|                            |xinliangli at gmail dot com
> 
> --- Comment #1 from davidxl <xinliangli at gmail dot com> ---
> int a[8][8];
> 
> 
> int foo(int i)
> {
>   return a[i][3] + a[i+1][3] + a[i+2][3];
> }
> 
> ICC generates:
> 
>         movslq    %edi, %rdi                                    #5.1
>         shlq      $5, %rdi                                      #6.10
>         movl      12+a(%rdi), %eax                              #6.10
>         addl      44+a(%rdi), %eax                              #6.20
>         addl      76+a(%rdi), %eax            
> 
> GCC can not CSE the common code for address arithmetic:
> 
>        leal    1(%rdi), %eax
>         movslq  %edi, %rdx
>         addl    $2, %edi
>         cltq
>         movslq  %edi, %rdi
>         salq    $5, %rdx
>         salq    $5, %rax
>         salq    $5, %rdi
>         movl    a+12(%rax), %eax
>         addl    a+12(%rdx), %eax
>         addl    a+12(%rdi), %eax
>         ret

This particular case is a RTL optimization deficiency (or a
missed SLSR case).  The address operations are only lowered
during RTL expansion.

Reply via email to