------- 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