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.

Reply via email to