[Patch] Fix PR41440 bad edge insertion

andrewhutchinson@cox.net andrewhutchinson@cox.net
Thu Oct 1 14:42:00 GMT 2009

When non-conditional RTL pattern is expanded that contains a jump CFG becomes temporarily wrong.  Edge insertion for  edges looks at end of block RTL and if sees a jump it inserts before jump - thinking it is jump needed for edge.

The bug report includes an alternate patch that  guards the edge insertion so that for a single succesor, fall thru edge it does not look for a jump.

Either patch works. The latest was deemed more prefferable.

---- Steven Bosscher <stevenb.gcc@gmail.com> wrote: 
> On Thu, Oct 1, 2009 at 3:44 PM, Michael Matz <matz@suse.de> wrote:
> > Hi,
> >
> > On Thu, 1 Oct 2009, andrewhutchinson@cox.net wrote:
> >
> >> After discussion with Micael Matz, the preferred method is fix the
> >> problem at the point of RTL expansion. A block that ends with a jump
> >> created by RTL expander on an otherwise fallthru edge, is now padded
> >> with mov(r,r) NOP.
> >
> > I can't approve this but (obviously) think this is the right way.  In
> > addition you might want to pad only when something is queued on that edge
> > (edge->r.insns != NULL) to not generate excessive nop moves.  Probably
> > doesn't matter that much, though.
> I don't like this approach at all, for two reasons:
> 1. Garbage rtl generated (a reg and an insn)
> 2. Looks like it papers over a problem (insns inserted in  the wrong place).
> Ciao!
> Steven

More information about the Gcc-patches mailing list