http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56195
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-05 13:56:56 UTC --- Seems this is heavily related to the uninitialized uses, in (insn 90 87 91 22 (set (reg:CCGC 17 flags) (compare:CCGC (reg:SI 118 [ D.1797 ]) (mem:SI (reg/v/f:DI 59 [ q ]) [2 *q_1+0 S4 A32]))) pr56195.c:17 7 {*cmpsi_1} (nil)) both SI 118 and DI 59 pseudos are preinitialized to const0_rtx because both the address to read from and the other value are uninitialized. Guess LRA figures out that both operands are equal to const0_rtx, just doesn't handle the different modes properly (it can be cmpl (%rdi), %edi ).