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