This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] sel-sched: run cleanup_cfg just before loop_optimizer_init (PR 84659)
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 ();
>