[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-patches
Subject: Re: [PATCH v2] Re: PR62304 (was Re: (Still) ICE for cris-elf at r214710)
From: David Malcolm <dmalcolm () redhat ! com>
Date: 2014-08-30 14:35:14
Message-ID: 1409409314.31600.59.camel () surprise
[Download RAW message or body]
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 <dmalcolm@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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic