On 12.04.2018 0:55, Alexander Monakov wrote: > As noted in PR 85354, we cannot simply invoke cfg_cleanup after dominators are > computed, because they may become invalid but neither freed nor recomputed, so > this trips checking in flow_loops_find. > > We can move cleanup_cfg earlier (and run it for all sel-sched invocations, not > only when pipelining).
OK. Sorry, I should have noticed that before, and our ia64 tester also misses libraries required for graphite. Best, Andrey > > Bootstrapped/regtested on x86_64 and ppc64 (my previous testing missed this > issue: the testcase requires graphite, but libisl wasn't present). > > PR rtl-optimization/85354 > * sel-sched-ir.c (sel_init_pipelining): Move cfg_cleanup call... > * sel-sched.c (sel_global_init): ... here. > > diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c > index 50a7daafba6..ee970522890 100644 > --- a/gcc/sel-sched-ir.c > +++ b/gcc/sel-sched-ir.c > @@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see > #include "cfgrtl.h" > #include "cfganal.h" > #include "cfgbuild.h" > -#include "cfgcleanup.h" > #include "insn-config.h" > #include "insn-attr.h" > #include "recog.h" > @@ -6122,9 +6121,6 @@ make_regions_from_loop_nest (struct loop *loop) > void > sel_init_pipelining (void) > { > - /* Remove empty blocks: their presence can break assumptions elsewhere, > - e.g. the logic to invoke update_liveness_on_insn in sel_region_init. */ > - cleanup_cfg (0); > /* Collect loop information to be used in outer loops pipelining. */ > loop_optimizer_init (LOOPS_HAVE_PREHEADERS > | LOOPS_HAVE_FALLTHRU_PREHEADERS > diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c > index cd29df35666..59762964c6e 100644 > --- a/gcc/sel-sched.c > +++ b/gcc/sel-sched.c > @@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see > #include "tm_p.h" > #include "regs.h" > #include "cfgbuild.h" > +#include "cfgcleanup.h" > #include "insn-config.h" > #include "insn-attr.h" > #include "params.h" > @@ -7661,6 +7662,10 @@ sel_sched_region (int rgn) > static void > sel_global_init (void) > { > + /* Remove empty blocks: their presence can break assumptions elsewhere, > + e.g. the logic to invoke update_liveness_on_insn in sel_region_init. */ > + cleanup_cfg (0); > + > calculate_dominance_info (CDI_DOMINATORS); > alloc_sched_pools (); >