[EMAIL PROTECTED] writes:

> > [EMAIL PROTECTED] writes:
> >
> >> I'm interested in duplicating the immediate predecessor basic block of
> >> the
> >> EXIT_BLOCK, but this makes the EXIT_BLOCK have 2 predecessors which
> >> isn't
> >> allowed.  Can someone give me some guidances as to how I can insert a
> >> bogus block between the two to allow the duplication?
> >
> > Why can't EXIT_BLOCK have two predecessors?
> >
> > Ian
> >
> 
> From can_duplicate_block_p():
> /* Duplicating fallthru block to exit would require adding a jump and
> splitting the real last BB. */
> e = find_edge (bb, EXIT_BLOCK_PTR);
> if ( e && (e->flags & EDGE_FALLTHRU))
>   return false;

I don't know why that is there.  I see that it has been there since
the function was written.  There may well be a good reason for it.  Or
not.  I don't know.

Still, it doesn't follow that EXIT_BLOCK can't have more than one
predecessor.  Even that code just prevents it from having more than
one EDGE_FALLTHRU predecessor.

Anyhow, to answer your original question, you should be able to call
split_edge to introduce a new basic block between your block and
EXIT_BLOCK.

Ian

Reply via email to