------- Comment #11 from hp at gcc dot gnu dot org 2009-05-13 00:09 ------- Two insns above the assembly sequence for the delay-slot fill quoted above, there used to be a "clear.d $r9". That insn is moved into a delay-slot in the first reorg_pass_number round by fill_simple_delay_slots (0). As a dataflow marker, the insn is replaced by a USE: (insn 308 204 94 (use (insn/s 52 286 310 (set (reg:SI 9 r9 [orig:95 ivtmp.101 ] [95]) (const_int 0 [0x0])) 38 {*movsi_internal} (expr_list:REG_EQUAL (const_int 0 [0x0]) (nil)))) -1 (nil))
The bug seems to be that at the next relax_delay_slots (first) call, the USE placeholder is removed for some reason. The df live-regs info is then incorrect and at the next (the last) round, when fill_eager_delay_slots () is called, it does the invalid delay-slot filling quoted above. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40086