http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49007
--- Comment #18 from John David Anglin <danglin at gcc dot gnu.org> 2011-05-23 16:57:02 UTC --- So, the problem is here: /* Figure out where to emit the special USE insn so we don't later incorrectly compute register live/death info. */ rtx tmp = next_active_insn (trial); if (tmp == 0) tmp = find_end_label (); if (tmp) { /* Insert the special USE insn and update dataflow info. */ update_block (trial, tmp); /* Now emit a label before the special USE insn, and redirect our jump to the new label. */ target_label = get_label_before (PREV_INSN (tmp)); reorg_redirect_jump (delay_insn, target_label); next = insn; continue; } This code fails to handle the case where there already is a use.