http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57088



Andrew Pinski <pinskia at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

           Keywords|                            |ra

             Status|UNCONFIRMED                 |NEW

   Last reconfirmed|                            |2013-04-27

            Summary|Post-reload instruction     |Register allocator has an

                   |splitting clobbers live     |issue with subreg in some

                   |register                    |cases

     Ever Confirmed|0                           |1



--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-04-27 
01:06:12 UTC ---

We start out with:

(insn 25 24 26 2 (set (mem:SI (plus:SI (reg/f:SI 7 sp)

                (const_int 4 [0x4])) [0 S4 A32])

        (subreg:SI (reg:DI 78 [ n ]) 0)) t.cc:41 85 {*movsi_internal}

     (expr_list:REG_DEAD (reg:DI 78 [ n ])

        (nil)))

(insn 26 25 27 2 (set (mem:SI (reg/f:SI 7 sp) [0 S4 A32])

        (reg/v/f:SI 59 [ save_buf ])) t.cc:41 85 {*movsi_internal}

     (nil))



which is fine but after reload we have:

(insn 59 24 25 2 (set (reg:DI 1 dx [orig:78 n ] [78])

        (mem/c:DI (plus:SI (reg/f:SI 6 bp)

                (const_int -48 [0xffffffffffffffd0])) [9 %sfp+-48 S8 A64]))

t.cc:41 84 {*movdi_internal}

     (expr_list:REG_DEAD (reg:DI 92)

        (nil)))

(insn 25 59 26 2 (set (mem:SI (plus:SI (reg/f:SI 7 sp)

                (const_int 4 [0x4])) [0 S4 A32])

        (reg:SI 1 dx [orig:78 n ] [78])) t.cc:41 85 {*movsi_internal}

     (expr_list:REG_DEAD (reg:DI 1 dx [orig:78 n ] [78])

        (nil)))

(insn 26 25 56 2 (set (mem:SI (reg/f:SI 7 sp) [0 S4 A32])

        (reg/v/f:SI 2 cx [orig:59 save_buf ] [59])) t.cc:41 85

{*movsi_internal}

     (nil))

(insn 56 26 27 2 (set (mem/c:SI (plus:SI (reg/f:SI 6 bp)

                (const_int -52 [0xffffffffffffffcc])) [9 %sfp+-52 S4 A32])

        (reg/v/f:SI 2 cx [orig:59 save_buf ] [59])) t.cc:41 85

{*movsi_internal}

     (expr_list:REG_DEAD (reg/v/f:SI 2 cx [orig:59 save_buf ] [59])

        (nil)))





Which is broken as the set in insn 59 overwrites (reg 1) which is not used from

that part of the instruction.



Confirmed.

Reply via email to