Patchwork [225/236] Work towards NEXT_INSN/PREV_INSN requiring insns as their params

login
register
mail settings
Submitter David Malcolm
Date Aug. 29, 2014, 12:47 a.m.
Message ID <1409273237.31600.5.camel@surprise>
Download mbox | patch
Permalink /patch/384036/
State New
Headers show

Comments

David Malcolm - Aug. 29, 2014, 12:47 a.m.
On Thu, 2014-08-28 at 17:08 -0700, H.J. Lu wrote:
> On Tue, Aug 26, 2014 at 10:15 AM, David Malcolm <dmalcolm@redhat.com> wrote:
> > On Mon, 2014-08-25 at 08:25 -0600, Jeff Law wrote:
> >> On 08/19/14 15:35, David Malcolm wrote:
> >> > On Tue, 2014-08-19 at 13:57 -0700, Richard Henderson wrote:
> >> >> On 08/06/2014 10:23 AM, David Malcolm wrote:
> >> >>> diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
> >> >>> index 59d633d..5e42a97 100644
> >> >>> --- a/gcc/cfgrtl.c
> >> >>> +++ b/gcc/cfgrtl.c
> >> >>> @@ -1604,6 +1604,7 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
> >> >>>
> >> >>>     if (EDGE_COUNT (e->src->succs) >= 2 || abnormal_edge_flags || asm_goto_edge)
> >> >>>       {
> >> >>> +      rtx_insn *note;
> >> >>>         gcov_type count = e->count;
> >> >>>         int probability = e->probability;
> >> >>>         /* Create the new structures.  */
> >> >>
> >> >> A new variable with no uses?
> >> >
> >> > This one is quite ugly: the pre-existing code has two locals named
> >> > "note", both of type rtx, with one shadowing the other.  This patch
> >> > introduces a third, within the scope where the name "note" is used for
> >> > insns.  In the other scopes the two other "note" variables are used for
> >> > find_reg_note.  In each case, the name "note" is written to before use.
> >> >
> >> > So in my defense, the existing code already had shadowing of locals...
> >> > but I guess that's not much of a defense, and it would be better to
> >> > introduce a different name, and rename the uses in the appropriate
> >> > scope.
> >> If it's reasonable to do this now, then please do so.  Else make it a
> >> follow-up item.  I guess we should have had a list of follow-up items :-)
> >>
> >> jeff
> >
> > Attached is a revised version of #225, with the following changes:
> >
> > * fix for the above: avoid introducing a new shadow name "note" within
> > force_nonfallthru_and_redirect by introducing a new local rtx_insn *
> > "new_head" and renaming "note" to it in the appropriate places.
> >
> > * changed an as_a<> to a safe_as_a<> within
> > function.c:thread_prologue_and_epilogue_insns to fix a segfault seen
> > during an earlier bootstrap
> >
> > Successfully bootstrapped on x86_64 (Fedora 20), on top of the rest of
> > the patches leading up to it (including the revised ones for #220-#221
> > that rth recently approved).
> >
> > OK for trunk?
> > Dave
> 
> One of your changes caused:
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62300

Sorry about this; candidate patch attached; attempted bootstrap in
progress.
Richard Henderson - Aug. 29, 2014, 1:02 a.m.
On 08/28/2014 05:47 PM, David Malcolm wrote:
> -	  insn = as_a <rtx_insn *> (
> -		   gen_extend_insn (op0, t, promoted_nominal_mode,
> -				    data->passed_mode, unsignedp));
> -	  emit_insn (insn);
> +	  rtx pat = gen_extend_insn (op0, t, promoted_nominal_mode,
> +				     data->passed_mode, unsignedp);
> +	  emit_insn (pat);

Certainly ok.


r~

Patch

Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog	(revision 214708)
+++ gcc/ChangeLog	(working copy)
@@ -1,5 +1,12 @@ 
 2014-08-28  David Malcolm  <dmalcolm@redhat.com>
 
+	PR bootstrap/62300
+	* function.c (assign_parm_setup_reg): Remove erroneous checked
+	cast to rtx_insn * on result of gen_extend_insn in favor of
+	introducing a new local rtx "pat".
+
+2014-08-28  David Malcolm  <dmalcolm@redhat.com>
+
 	* rtl.h (previous_insn): Strengthen param from rtx to rtx_insn *.
 	(next_insn): Likewise.
 	* emit-rtl.c (next_insn): Likewise.
Index: gcc/function.c
===================================================================
--- gcc/function.c	(revision 214704)
+++ gcc/function.c	(working copy)
@@ -3039,10 +3039,9 @@ 
 	    }
 	  else
 	    t = op1;
-	  insn = as_a <rtx_insn *> (
-		   gen_extend_insn (op0, t, promoted_nominal_mode,
-				    data->passed_mode, unsignedp));
-	  emit_insn (insn);
+	  rtx pat = gen_extend_insn (op0, t, promoted_nominal_mode,
+				     data->passed_mode, unsignedp);
+	  emit_insn (pat);
 	  insns = get_insns ();
 
 	  moved = true;