[PATCH][TUPLES] Two simple bug fixes.
Richard Guenther
richard.guenther@gmail.com
Sun Apr 13 10:48:00 GMT 2008
On Sun, Apr 13, 2008 at 11:46 AM, Doug Kwan (關振德) <dougkwan@google.com> wrote:
> We can add a check to make sure that the statement pointed to by the
> gsi indeed have the bb set correctly but we already have a CFG
> consistency check in the tuples branch and that's how this bug got
> caught. Do we still need another check?
Maybe I'm missing sth, but
> > > - gimple_stmt_iterator last = gsi_last (bb_seq (bb));
> > > + gimple_stmt_iterator last = gsi_last_bb (bb);
this doesn't look CFG checking related. If the above change makes any
difference
then the returned gsi has to be different in some cases. Which is what I asked
to check for in gsi_last. I don't know any of bb_seq or gsi_last or gsi_last_bb
from their implementation, so I have no idea what the actual case was you ran
into that made that difference - but it would be nice to catch it early.
Richard.
> -Doug
>
> 2008/4/13 Richard Guenther <richard.guenther@gmail.com>:
>
>
> > 2008/4/13 Doug Kwan (關振德) <dougkwan@google.com>:
> >
> > > Here is the patch.
> > >
> > > -Doug
> > >
> > >
> > >
> > > 2008-04-13 Doug Kwan <dougkwan@google.com>
> > >
> > > * gimple-iterator.c (gsi_move_to_bb_end): Use gsi_last_bb
> > > instead of calling both gsi_last and bb_seq.
> > > * passes.c (init_optimization_passes): Re-eanble second tail-recursion
> > > pass.
> > >
> > > Index: gcc/gcc/gimple-iterator.c
> > > ===================================================================
> > > --- gcc/gcc/gimple-iterator.c (revision 134208)
> > > +++ gcc/gcc/gimple-iterator.c (working copy)
> > > @@ -566,7 +566,7 @@ gsi_move_before (gimple_stmt_iterator *f
> > > void
> > > gsi_move_to_bb_end (gimple_stmt_iterator *from, basic_block bb)
> > > {
> > > - gimple_stmt_iterator last = gsi_last (bb_seq (bb));
> > > + gimple_stmt_iterator last = gsi_last_bb (bb);
> >
> > Can we put an assert guarded by #if ENABLE_CHECKING for the case you ran
> > into in gsi_last? I also hit similar issues if you split a bb when
> > there are active
> > tsis in that bb (they get invalid bbs and strange things occur).
> >
> > Otherwise this is ok.
> >
> > Richard.
> >
> >
> >
> > > /* Have to check gsi_end_p because it could be an empty block. */
> > > if (!gsi_end_p (last) && is_ctrl_stmt (gsi_stmt (last)))
> > > Index: gcc/gcc/passes.c
> > > ===================================================================
> > > --- gcc/gcc/passes.c (revision 134209)
> > > +++ gcc/gcc/passes.c (working copy)
> > > @@ -629,8 +629,8 @@ init_optimization_passes (void)
> > > NEXT_PASS (pass_phi_only_cprop);
> > > NEXT_PASS (pass_tree_ifcombine);
> > > NEXT_PASS (pass_phiopt);
> > > - NEXT_PASS (pass_tail_recursion);
> > > #endif
> > > + NEXT_PASS (pass_tail_recursion);
> > > NEXT_PASS (pass_ch);
> > > #if 0
> > > NEXT_PASS (pass_stdarg);
> > >
> > >
> > > 2008/4/13 Rafael Espindola <espindola@google.com>:
> > >
> > >
> > > > Patch is missing.
> > > >
> > > > 2008/4/13 Doug Kwan (關振德) <dougkwan@google.com>:
> > >
> > >
> > > >
> > > >
> > > > > Hi Diego,
> > > > >
> > > > > Could you please review this simple patch? The first fix is in
> > > > > gsi_move_to_bb_end. The bug is quite subtle. In the old code, if
> > > > > the target bb is empty, bb_seq will be empty and gsi_last will not
> > > > > have the correct bb set. That causes the moved gimple to have NULL is
> > > > > its bb. The second fix is to re-enable the second tail recursion
> > > > > pass. I did not do so when I check in the patch for tree-tailcall.c.
> > > > >
> > > > > Thanks.
> > > > >
> > > > > -Doug
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Rafael Avila de Espindola
> > > >
> > > > Google Ireland Ltd.
> > > > Gordon House
> > > > Barrow Street
> > > > Dublin 4
> > > > Ireland
> > > >
> > > > Registered in Dublin, Ireland
> > > > Registration Number: 368047
> > > >
> > >
> >
>
More information about the Gcc-patches
mailing list