https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72855
--- Comment #7 from rguenther at suse dot de <rguenther at suse dot de> --- On August 10, 2016 5:15:43 PM GMT+02:00, "wschmidt at gcc dot gnu.org" <gcc-bugzi...@gcc.gnu.org> wrote: >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72855 > >--- Comment #5 from Bill Schmidt <wschmidt at gcc dot gnu.org> --- >(In reply to Richard Biener from comment #2) >> If we have release checking enabled then we shuould hit >> >> static void >> df_analyze_1 (void) >> { >> ... >> #ifndef ENABLE_DF_CHECKING >> if (df->changeable_flags & DF_VERIFY_SCHEDULED) >> #endif >> df_verify (); >> >> so I wonder why df->changeable_flags & DF_VERIFY_SCHEDULED is ever >true >> for release checking. Can you track that down? > >df_finish_pass has the following unguarded code at the end of the >function: > > if (flag_checking && verify) > df->changeable_flags |= DF_VERIFY_SCHEDULED; > >This is the only way that DF_VERIFY_SCHEDULED gets turned on by itself. Yes, but that is guarded by flag_checking which defaults to 0. >> But yes, performing df_verify for each loop in a function is >excessive, >> we seem to lack ever clearing said flag. Does >> >> Index: gcc/df-core.c >> =================================================================== >> --- gcc/df-core.c (revision 239276) >> +++ gcc/df-core.c (working copy) >> @@ -1833,6 +1833,7 @@ df_verify (void) >> if (df_live) >> df_live_verify_transfer_functions (); >> #endif >> + df->changeable_flags &= ~DF_VERIFY_SCHEDULED; >> } >> >> #ifdef DF_DEBUG_CFG >> >> help in the non-DF-checking case? > >It should, since df_finish_pass isn't called (indirectly from >iv_analysis_done) >by the doloop code until after all of the loops have been processed. If you manage to test that it's pre-approved.