On Fri, 20 Nov 2015, Tom de Vries wrote: > On 20/11/15 11:37, Richard Biener wrote: > > I'd rather make loop_optimizer_init do nothing > > if requested flags are already set and no fixup is needed > > > Thus sth like > > > > Index: gcc/loop-init.c > > =================================================================== > > --- gcc/loop-init.c (revision 230649) > > +++ gcc/loop-init.c (working copy) > > @@ -103,7 +103,11 @@ loop_optimizer_init (unsigned flags) > > calculate_dominance_info (CDI_DOMINATORS); > > > > if (!needs_fixup) > > - checking_verify_loop_structure (); > > + { > > + checking_verify_loop_structure (); > > + if (loops_state_satisfies_p (flags)) > > + goto out; > > What about flags that are present in the loops state, but not requested in > flags? Should we try to clear those flags?
No, I don't think so, that would break in-loop-pipeline LIM, dropping loop-closed SSA for example. I agree it's somewhat of an odd behavior but all passes should either be placed in a sub-pipeline with an outer loop_optimizer_init()/finalize () call or call both themselves. Richard. > Thanks, > - Tom > > > + } > > > > /* Clear all flags. */ > > if (recorded_exits) > > @@ -122,11 +126,12 @@ loop_optimizer_init (unsigned flags) > > /* Apply flags to loops. */ > > apply_loop_flags (flags); > > > > + checking_verify_loop_structure (); > > + > > +out: > > /* Dump loops. */ > > flow_loops_dump (dump_file, NULL, 1); > > > > - checking_verify_loop_structure (); > > - > > timevar_pop (TV_LOOP_INIT); > > } > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)