This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Edges, predictions, and GC crashes ...
- From: Ulrich Weigand <uweigand at de dot ibm dot com>
- To: hubicka at ucw dot cz (Jan Hubicka)
- Cc: uweigand at de dot ibm dot com, gcc at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Sat, 4 Jun 2005 10:44:31 +0200 (CEST)
- Subject: Re: Edges, predictions, and GC crashes ...
Jan Hubicka wrote:
> I've comitted the attached patch. I didn't suceed to reproduce your
> failures, but Danny reported it fixes his and it bootstrap/regtests
> i686-pc-gnu-linux.
Thanks; this does fix one crash on s390x, but doesn't fix the
pass57-frag crashes on s390.
What happens is that after the predictions are created, but before
remove_edge is called, the edge is modified in rtl_split_block
(called from tree_expand_cfg):
/* Redirect the outgoing edges. */
new_bb->succs = bb->succs;
bb->succs = NULL;
FOR_EACH_EDGE (e, ei, new_bb->succs)
e->src = new_bb;
Now the 'src' link points to a different basic block, but the old
basic block still has the prediction pointing to the edge.
When remove_edge is finally called, your new code tries to find
and remove the prediction from the *new* basic block's prediction
list -- but it still remains on the old one's list ...
Bye,
Ulrich
--
Dr. Ulrich Weigand
Linux on zSeries Development
Ulrich.Weigand@de.ibm.com