[Bug tree-optimization/48316] missed CSE / reassoc with array offsets
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Thu Mar 13 08:56:00 GMT 2014
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.
More information about the Gcc-bugs
mailing list