------- Comment #4 from zadeck at naturalbridge dot com 2007-06-18 16:48 ------- Subject: Re: [4.3 Regression] ICE in df_lr_verify_transfer_functions, at df-problems.c:1924
committed as revision 125812 zadeck at naturalbridge dot com wrote: > ------- Comment #1 from zadeck at naturalbridge dot com 2007-06-17 20:13 > ------- > Subject: Re: [4.3 Regression] ICE in df_lr_verify_transfer_functions, > at df-problems.c:1924 > > There are possibly two problems here. Fixing the first one fixes this ice. > > The first problem is that after a call to cse_main, a call to > df_finish_pass is needed to get out of deferred rescanning mode and get > everything up to date. > > The possible second problem is that something in one of > > delete_trivially_dead_insns > rebuild_jump_labels > cleanup_cfg > > may not work in deferred rescanning mode. This will wait for another > bug report. > It is too hard to debug this without first cleaning up what cse_main did > and that makes the bug go away. > > ok to commit? > > Kenny > > 2007-06-17 Kenneth Zadeck <[EMAIL PROTECTED]> > > PR middle-end/32355 > * gcse (rest_of_handle_gcse): Add call to df_finish_pass after > cse_main. > * df-problems.c (df_note_bb_compute): Fix dumping info. > > 2007-06-17 Kenneth Zadeck <[EMAIL PROTECTED]> > > * gcc.c-torture/compile/pr32355.c: New testcase. > > Index: testsuite/gcc.c-torture/compile/pr32355.c > =================================================================== > --- testsuite/gcc.c-torture/compile/pr32355.c (revision 0) > +++ testsuite/gcc.c-torture/compile/pr32355.c (revision 0) > @@ -0,0 +1,33 @@ > +/* { dg-options "-O3" } */ > + > +typedef struct > +{ > +} > +__sigset_t; > +typedef struct > +{ > + char coredump; > +} > +EMode; > +extern EMode Mode; > +struct sigaction > +{ > + __sigset_t sa_mask; > + int sa_flags; > +}; > +doSignalsSetup (void) > +{ > + static const int signals[] = { > + 1, 2 , 3, 4, 6, 8, 11, 13, 14, 15, 10, 12, 17, 7 > + }; > + unsigned int i, sig; > + struct sigaction sa; > + for (i = 0; i < sizeof (signals) / sizeof (int); i++) > + { > + sig = signals[i]; > + if (Mode.coredump && (sig == 4 || sig == 8)) > + continue; > + sa.sa_flags = (sig == 17); > + sigemptyset (&sa.sa_mask); > + } > +} > Index: gcse.c > =================================================================== > --- gcse.c (revision 125777) > +++ gcse.c (working copy) > @@ -6704,6 +6704,7 @@ rest_of_handle_gcse (void) > { > timevar_push (TV_CSE); > tem2 = cse_main (get_insns (), max_reg_num ()); > + df_finish_pass (); > purge_all_dead_edges (); > delete_trivially_dead_insns (get_insns (), max_reg_num ()); > timevar_pop (TV_CSE); > Index: df-problems.c > =================================================================== > --- df-problems.c (revision 125777) > +++ df-problems.c (working copy) > @@ -3867,8 +3867,10 @@ df_note_bb_compute (unsigned int bb_inde > for (def_rec = df_get_artificial_defs (bb_index); *def_rec; def_rec++) > { > struct df_ref *def = *def_rec; > +#ifdef REG_DEAD_DEBUGGING > if (dump_file) > fprintf (dump_file, "artificial def %d\n", DF_REF_REGNO (def)); > +#endif > > if ((DF_REF_FLAGS (def) & DF_REF_AT_TOP) == 0) > bitmap_clear_bit (live, DF_REF_REGNO (def)); > > > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32355