Scheduling fix (fixes gcc.c-torture/execute/980506-1.c on ppc)

Jeffrey A Law
Thu Sep 3 01:18:00 GMT 1998

  In message <>you write:
  > > Date: Sun, 30 Aug 1998 17:13:26 -0600
  > > From: Jeffrey A Law <>
  > > If you look at the debugging dumps, you'll find that flow does know
  > > that the last block reaches the exit.  This implies that haifa is
  > > the problem, not the cfg provided by flow:
  > Aha! You are right.
  > Haifa is somehow not putting the right information into the
  > edge_table.  It seems to do this deliberately(!):
  >     for (succ = s_succs[i]; succ; succ = succ->next)
  >       {
  >         if (INT_LIST_VAL (succ) != EXIT_BLOCK)
  >           new_edge (i, INT_LIST_VAL (succ));
  >       }
  > I wonder why?
I remember this code :(  Unfortunately I don't know why it prunes out
the edges to the exit block.

The original haifa code pruned the edges, so when I rewrote that code
to use the cfg generated by flow, I kept the code to prune edges to
the exit block.

To fix this we're going to have to look at all the code which looks
at the edge lists to make sure it does the right thing when the
tail of an edge is the exit block.  I don't know how hard that is
going to be.

If I start working on this, odds are I'll do another destabilize,
cleanup and restabilize pass on the scheduler like I did earlier
this year.


More information about the Gcc-patches mailing list