This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/32725] Unnecessary reg-reg moves
- From: "rask at sygehus dot dk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Jul 2007 08:53:26 -0000
- Subject: [Bug middle-end/32725] Unnecessary reg-reg moves
- References: <bug-32725-14600@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from rask at sygehus dot dk 2007-07-11 08:53 -------
I think (1) and (2) is just the register allocator being stupid. This sort of
thing can happen when the %rax at (1) was a different pseudo register than the
%rax at (2). The register allocator is supposed to be able to tie such pseudo
registers, but it does not take a lot to mess that up.
You should use -dp when posting asm output intended for human readers (although
in this case, I don't think you need to repost the asm output just to include
the -dp output).
movq %rax, %rbx # 95 *movdi_1_rex64/2 [length = 6]
andq %r8, %rbx # 25 *anddi_1_rex64/2 [length = 3]
movq %rbx, %rax # 96 *movdi_1_rex64/2 [length = 6]
Notice that the movq insns have much higher insn uids than the andq insn. I.e.
they were most likely emitted in a later pass.
(And those movq insn lenghts are wrong, they should be 3 instead of 6.)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32725