Jan Hubicka <[EMAIL PROTECTED]> writes: > > Jan Hubicka <[EMAIL PROTECTED]> writes: > > > > > Producing USE expressions embedding whole INSN. The comment promise > > > that those will be removed before reorg ends, but they are not. This > > > patch just adds simple code to remove them in very last dbr_schedule > > > pass. > > > > I see code in dbr_schedule to delete them: > > > > /* Delete any USE insns made by update_block; subsequent passes don't need > > them or know how to deal with them. */ > > for (insn = first; insn; insn = next) > > { > > next = NEXT_INSN (insn); > > > > if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == USE > > && INSN_P (XEXP (PATTERN (insn), 0))) > > next = delete_related_insns (insn); > > } > > > > Why is that not working? > > Hmm, good catch. I didn't noticed that code. > The problem is that update_block is still called after this loop is > done, at least moving that loop down past the loop just bellow it solves > the ICE too.
Ah, it's from the calls to fill_simple_delay_slots in make_return_insns. The "Delete any USE insns" loop needs to move below that. > I must admit I have no idea what those placeholders are good for... They tell mark_target_live_regs that the registers used by the insn which was moved are live. Ian