On Fri, 2014-08-29 at 23:41 -0600, Jeff Law wrote:
> On 08/29/14 12:07, David Malcolm wrote:
> 
> >
> > Yes: I made various mistakes in reorg.c and resource.c where I assumed
> > that a JUMP_LABEL(insn) was an insn, whereas the existing code is set up
> > to handle RETURN nodes.
> Well, it would seem to me that reorg is being totally braindead in 
> mixing and matching these two nodes.   In particular whatever code is 
> passing around a RETURN rtx into places that normally accept some kind 
> of INSN would appear to be broken.
> 
> >
> > It eliminates all uses of JUMP_LABEL_AS_INSN from reorg.c, and indeed
> > after that there are only 6 uses in the tree (including config subdirs).
> Good to some extent as I see JUMP_LABEL_AS_INSN as papering over bugs 
> elsewhere, but this patch is also a step backwards as we're papering 
> over a mess in reorg.c.
> 
> 
> >
> > 2014-08-29  David Malcolm  <dmalc...@redhat.com>
> >
> >     PR bootstrap/62304
> >
> >     * gcc/reorg.c (skip_consecutive_labels): Convert return type and
> >     param back from rtx_insn * to rtx.  Rename param from "label" to
> >     "label_or_return", reintroducing "label" as an rtx_insn * after
> >     we've ensured it's not a RETURN.
> >     (first_active_target_insn): Likewise for return type and param;
> >     add a checked cast to rtx_insn * once we've ensured "insn" is not
> >     a RETURN.
> >     (steal_delay_list_from_target): Convert param "pnew_thread" back
> >     from rtx_insn ** to rtx *.  Replace use of JUMP_LABEL_AS_INSN
> >     with JUMP_LABEL.
> >     (own_thread_p): Convert param "thread" back from an rtx_insn * to
> >     an rtx.  Introduce local rtx_insn * "thread_insn" with a checked
> >     cast once we've established we're not dealing with a RETURN,
> >     renaming subsequent uses of "thread" to "thread_insn".
> >     (fill_simple_delay_slots): Convert uses of JUMP_LABEL_AS_INSN back
> >     to JUMP_LABEL.
> >     (follow_jumps): Convert return type and param "label" from
> >     rtx_insn * back to rtx.  Move initialization of "value" to after
> >     the handling for ANY_RETURN_P, adding a checked cast there to
> >     rtx_insn *.  Convert local rtx_insn * "this_label" to an rtx and
> >     rename to "this_label_or_return", reintroducing "this_label" as
> >     an rtx_insn * once we've handled the case where it could be an
> >     ANY_RETURN_P.
> >     (fill_slots_from_thread): Rename param "thread" to
> >     "thread_or_return", converting from an rtx_insn * back to an rtx.
> >     Reintroduce name "thread" as an rtx_insn * local with a checked
> >     cast once we've handled the case of it being an ANY_RETURN_P.
> >     Convert local "new_thread" from an rtx_insn * back to an rtx.
> >     Add a checked cast when assigning to "trial" from "new_thread".
> >     Convert use of JUMP_LABEL_AS_INSN back to JUMP_LABEL.  Add a
> >     checked cast to rtx_insn * from "new_thread" when invoking
> >     get_label_before.
> >     (fill_eager_delay_slots): Convert locals "target_label",
> >     "insn_at_target" from rtx_insn * back to rtx.
> >     Convert uses of JUMP_LABEL_AS_INSN back to JUMP_LABEL.
> >     (relax_delay_slots): Convert locals "trial", "target_label" from
> >     rtx_insn * back to rtx.  Convert uses of JUMP_LABEL_AS_INSN back
> >     to JUMP_LABEL.  Add a checked cast to rtx_insn * on "trial" when
> >     invoking update_block.
> >     (dbr_schedule): Convert use of JUMP_LABEL_AS_INSN back to
> >     JUMP_LABEL; this removes all JUMP_LABEL_AS_INSN from reorg.c.
> >
> >     * resource.h (mark_target_live_regs): Undo erroneous conversion
> >     of second param of r214693, converting it back from rtx_insn * to
> >     rtx, since it could be a RETURN.
> >
> >     * resource.c (find_dead_or_set_registers): Similarly, convert
> >     param "jump_target" back from an rtx_insn ** to an rtx *, as we
> >     could be writing back a RETURN.  Rename local rtx_insn * "next" to
> >     "next_insn", and introduce "lab_or_return" as a local rtx,
> >     handling the case where JUMP_LABEL (this_jump_insn) is a RETURN.
> >     (mark_target_live_regs): Undo erroneous conversion
> >     of second param of r214693, converting it back from rtx_insn * to
> >     rtx, since it could be a RETURN.  Rename it from "target" to
> >     "target_maybe_return", reintroducing the name "target" as a local
> >     rtx_insn * with a checked cast, after we've handled the case of
> >     ANY_RETURN_P.
> I'll OK as a means to restore the trunk to working order, but let's add 
> a follow-up item to track down places where we're passing things like a 
> RETURN rtx in places where we really are expecting insns.

Thanks; bootstrapped on x86_64 and ppc (gcc110); committed to trunk as
r214752.

I plan to have a close look at everywhere that JUMP_LABEL is not an
insn, though I may wait to after current stage1 to do that; for this
stage1 my primary objective for rtx-classes is to use them to document
the existing status quo, and I hope to context-switch back to trying to
merge the JIT branch in a week or two.  Hope that sounds reasonable

Dave

Reply via email to