This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Re: reg_dead_notes!=0: New abort in haifa schedulerin latest CVS
- To: Jim Wilson <wilson at cygnus dot com>
- Subject: Re: [PATCH] Re: reg_dead_notes!=0: New abort in haifa schedulerin latest CVS
- From: Franz Sirl <Franz dot Sirl-kernel at lauterbach dot com>
- Date: Tue, 5 May 1998 14:49:08 -0700 (PDT)
- Cc: law at cygnus dot com, egcs-bugs at cygnus dot com, meissner at cygnus dot com
- References: Your message of "Thu, 30 Apr 1998 10:57:50 +0200." <199804300857.BAA16635@cygnus.com>
Yes, this fixes it for me, too. But now I have an endless loop starting at
line 1767 in find_rgns() for this
<http://homepages.munich.netsurf.de/Franz.Sirl/misc/inode.i> file. It seems
that under some circumstances tail is never (or no longer?) decremented.
BTW, who is maintaining reload/reload1? I have a gdb-backtrace for the
problem I reported in
<http://www.cygnus.com/ml/egcs-bugs/1998-Apr/0172.html>.
Franz.
At 2:48 Uhr -0000 05.05.1998, Jim Wilson wrote:
>- if (num_succs[j] == 0)
>+ if (out_edges[j] == 0)
>
>Yes, this is a problem. Rather than revert Jeff's change, I believe this
>fixes the problem the way he intended it to work. This works for your
>testcase.
>
>A block with no out_edges is a block with one successor which is the
>EXIT_BLOCK.
>
>Mon May 4 19:43:08 1998 Jim Wilson <wilson@cygnus.com>
>
> * haifa-sched.c (find_rgns): In no_loops case, fix test for leaf
> blocks. Check for 1 successor which is the EXIT_BLOCK.
>
>Index: haifa-sched.c
>===================================================================
>RCS file: /egcs/carton/cvsfiles/egcs/gcc/haifa-sched.c,v
>retrieving revision 1.43
>diff -p -r1.43 haifa-sched.c
>*** haifa-sched.c 1998/04/30 16:25:19 1.43
>--- haifa-sched.c 1998/05/05 02:42:59
>*************** find_rgns (s_preds, s_succs, num_preds,
>*** 1649,1655 ****
> if (no_loops)
> {
> for (j = 0; j < n_basic_blocks; j++)
>! if (num_succs[j] == 0)
> {
> queue[++tail] = j;
> SET_BIT (in_queue, j);
>--- 1649,1656 ----
> if (no_loops)
> {
> for (j = 0; j < n_basic_blocks; j++)
>! if (num_succs[j] == 1
>! && INT_LIST_VAL (s_succs[j]) == EXIT_BLOCK)
> {
> queue[++tail] = j;
> SET_BIT (in_queue, j);