------- Additional Comments From rakdver at gcc dot gnu dot org 2004-11-28
22:56 -------
I have the (experimental) patch for addressing mode selection on trees
(http://atrey.karlin.mff.cuni.cz/~rakdver/diff_lower_address.diff).
It indeed helps; we get
i = 0;
<L0>:;
mem[aa + 4B * i]{*D.1047} = mem[a + 4B * i]{*D.1048};
mem[bb + 4B * i]{*D.1050} = mem[b + 4B * i]{*D.1051};
i = (int) ((unsigned int) i + 1);
if (n > i) goto <L0>; else goto <L2>;
<L2>:;
in .vars dump and
.L4:
movl (%ebp,%edx,4), %eax
movl %eax, (%esi,%edx,4)
movl (%edi,%edx,4), %eax
movl %eax, (%ebx,%edx,4)
incl %edx
cmpl %edx, %ecx
jg .L4
in the assembler, which seems fine (except that the memory references are not
reordered; maybe some of the aliasing information gets lost due to the patch
currently).
The patch definitely won't make it for 4.0, but I would like to get it or
something similar to 4.1.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18463