[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