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