http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56195
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |vmakarov at gcc dot gnu.org Target Milestone|--- |4.8.0 Summary|Error: incorrect register |[4.8 Regression] Error: |`%rdi' used with `l' suffix |incorrect register `%rdi' |(at -O2) |used with `l' suffix (at | |-O2) --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-03 21:01:59 UTC --- Started with LRA merge ( http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=192719 ). (define_insn "*cmp<mode>_1" [(set (reg FLAGS_REG) (compare (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>") (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m")))] "ix86_match_ccmode (insn, CCmode)" "cmp{<imodesuffix>}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "<MODE>")]) In *.ira dump the insn looks still correct: (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)) but in *.reload dump: (insn 90 256 91 22 (set (reg:CCGC 17 flags) (compare:CCGC (reg:DI 5 di [137]) (mem:SI (reg:DI 5 di [137]) [2 *q_1+0 S4 A32]))) pr56195.c:17 7 {*cmpsi_1} (expr_list:REG_DEAD (reg:DI 5 di [137]) (nil))) so I wonder how could it match that way and survive till end of compilation.