https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93264
--- Comment #11 from Roman Zhuykov <zhroma at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #9)
Thank you, I'm glad to see new ideas and some discussion.
> On the testcase itself
>
> diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
> index 77254b31b42..66260fa34f1 100644
> --- a/gcc/modulo-sched.c
> +++ b/gcc/modulo-sched.c
> @@ -1347,8 +1347,7 @@ sms_schedule (void)
> edge latch_edge;
> HOST_WIDE_INT trip_count, max_trip_count;
>
> - loop_optimizer_init (LOOPS_HAVE_PREHEADERS
> - | LOOPS_HAVE_RECORDED_EXITS);
> + loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
> if (number_of_loops (cfun) <= 1)
> {
> loop_optimizer_finalize ();
>
> works.
Unfortunately, this brokes the whole SMS workflow. See e.g. loop_canon_p
function and a call to single_exit inside. I've actually tried only improved
(with all my patches) master version and only few examples, but with
AVOID_CFG_MODIFICATIONS some of them bailout with "SMS loop many exits" instead
of succesfully passing analysis and transformation phases with "SMS succeeded".