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 [EMAIL PROTECTED]