This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/18463] [4.0 Regression] Moving floating point through an integer register
- From: "rakdver at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Nov 2004 22:56:09 -0000
- Subject: [Bug tree-optimization/18463] [4.0 Regression] Moving floating point through an integer register
- References: <20041113170938.18463.steven@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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