Hi!

Thanks for investigating.

On Fri, Apr 08, 2022 at 03:25:51PM +0800, Kewen.Lin wrote:
> on 2022/4/8 3:29 AM, Segher Boessenkool wrote:
> > On Thu, Apr 07, 2022 at 09:19:51AM -0500, will schmidt wrote:
> >> On Mon, 2022-02-28 at 13:37 +0800, Kewen.Lin via Gcc-patches wrote:
> >>> As PR103196 shows, p9-vec-length-full-7.c needs to be adjusted as the
> >>> complete unrolling can happen on some of its loops.  This patch is to
> >>> use pragma "GCC unroll 0" to disable all possible loop unrollings.
> >>> Hope it can help the case not that fragile.
> >>
> >> ok
> >>
> >> Is the lack of effectiveness of "-fno-unroll-loops" otherwise
> >> understood, or is there further issue behind that option? 
> > 
> > There is -fpeel-loops as well, and cunroll is independent of all of
> > these as well?
> 
> Yes, kind of.  As below code, unroll-loops and peel-loops only affect
> whether it's acceptable to grow size.
> 
>   /* Allow cunroll to grow size accordingly.  */
>   if (!opts_set->x_flag_cunroll_grow_size)
>     opts->x_flag_cunroll_grow_size
>       = (opts->x_flag_unroll_loops
>          || opts->x_flag_peel_loops
>          || opts->x_optimize >= 3);
> 
> This flag_cunroll_grow_size doesn't gate the pass, it's only for
> "may_increase_size".

Yuck.

>   unsigned int val = tree_unroll_loops_completely (flag_cunroll_grow_size, 
>                                                  true);
> 
> The cunroll still can take effect if its transformation doesn't grow
> size even if we specify -fno-unroll-loops and -fno-peel-loops.

Yeah.  And the pragma disables it, so we really should have a command
line option that does the same (but globally), too.

> >> I would
> >> expect the effect of the option, versus the pragma, two to roughly
> >> equivalent.   Obviously it is not.  :-)
> > 
> > Yes, me too.  And I do not see what makes the difference, if it isn't
> > the peel thing :-(
> > 
> > Ke Wen, can you try with -fno-peel-loops please?
> 
> I had a try and it didn't help as the cunroll pass doesn't grow size
> for this case.  By the way, -fdisable-tree-cunroll does work.  But I
> thought using pragma looks better as it's not an internal thing like
> the disabling option and I also expect other future unrolling related
> changes would respect it.
> 
> Do you also prefer pragma, or want that disabling option?

That flag please.  And we should have a -fno-unroll that disables all
separate kinds of unrolling, imo -- but that is a separate problem, not
something to hold up your patch for.

Okay for trunk without the pragma.  Thanks!

(The pragma is a good solution if you want to disable unrolling for a
very specific piece of code only, which is not the case here: the
problem currently shows up in one place, but it could happen elsewhere!)


Segher

Reply via email to