Tamar Christina <tamar.christ...@arm.com> writes:
> As requested in my patch for -mmax-vectorization this promotes the parameter
> --param aarch64-autovec-preference to a first class top target flag.
>
> If both the parameter and the flag is specified the parameter takes precedence
> with the reasoning that it may already be embedded in build systems.
>
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
>
> Ok for master?
>
> Thanks,
> Tamar
>
> gcc/ChangeLog:
>
>       * config/aarch64/aarch64.cc (aarch64_override_options_internal): Set
>       value of parameter based on option.
>       * config/aarch64/aarch64.opt (autovec-preference): New.
>       * doc/invoke.texi (autovec-preference): Document it.
>
> gcc/testsuite/ChangeLog:
>
>       * gcc.target/aarch64/autovec_param_asimd-only_2.c: New test.
>       * gcc.target/aarch64/autovec_param_default_2.c: New test.
>       * gcc.target/aarch64/autovec_param_prefer-asimd_2.c: New test.
>       * gcc.target/aarch64/autovec_param_prefer-sve_2.c: New test.
>       * gcc.target/aarch64/autovec_param_sve-only_2.c: New test.

Thanks for doing this.  I'm in favour, but on the documentation:

> diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
> index 
> 2725c50da64a2c05489ea6202bdd5eedf1ba7e27..4dfd9b5c73011c73fcf8a39ad719ee9ca765297b
>  100644
> --- a/gcc/config/aarch64/aarch64.opt
> +++ b/gcc/config/aarch64/aarch64.opt
> @@ -290,6 +290,13 @@ msve-vector-bits=
>  Target RejectNegative Joined Enum(sve_vector_bits) 
> Var(aarch64_sve_vector_bits) Init(SVE_SCALABLE)
>  -msve-vector-bits=<number>   Set the number of bits in an SVE vector 
> register.
>  
> +mautovec-preference=
> +Target RejectNegative Joined Undocumented Var(autovec_preference) 
> Enum(aarch64_autovec_preference) Init(AARCH64_AUTOVEC_DEFAULT)
> +-mautovec-preference=[default|asimd-only|sve-only|prefer-asimd|prefer-sve]
> +Force an ISA selection strategy for auto-vectorization. If both
> +-mautovec-preference and --param aarch64_autovec-preference are set then the
> +param value will be used.
> +
>  mmax-vectorization
>  Target Undocumented Var(flag_aarch64_max_vectorization) Save
>  Override the scalar cost model such that vectorization is always profitable.
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 
> 54d4cf88cccd4d0e4ede3442ad9907faac325d52..88a93f9bc76687c415e0cce4c3431f1d91194dfc
>  100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -21992,6 +21992,12 @@ precise control over which ISA will be used for 
> auto-vectorization.  Unlike
>  -fno-vect-cost-model or -fvect-cost-model=unlimited this option does not turn
>  off cost comparison between different vector modes.
>  
> +@item -mautovec-preference=@var{name}
> +-mautovec-preference=[default|asimd-only|sve-only|prefer-asimd|prefer-sve]
> +Force an ISA selection strategy for auto-vectorization.  If both
> +-mautovec-preference and --param aarch64_autovec-preference are set then the
> +param value will be used.
> +
>  @opindex march
>  @item -march=@var{name}
>  Specify the name of the target architecture and, optionally, one or

--params are supposed to be internal developer flags that could go away
at any time.  So now that we have the user-facing flag, I think we should
move the detailed documentation of @var{name} from the --param documentation
to the -m option, and instead make the --param documentation reference the
-m option.

So something like:

--------------------------------------------------------------------------
@item -mautovec-preference=@var{name}
Force an ISA selection strategy for auto-vectorization.  The possible
values of @var{name} are:
@table @samp
@item default
Use the default heuristics.
@item asimd-only
Use only Advanced SIMD for auto-vectorization.
@item sve-only
Use only SVE for auto-vectorization.
@item prefer-asimd
Use both Advanced SIMD and SVE.  Prefer Advanced SIMD when the costs are
deemed equal.
@item prefer-sve
Use both Advanced SIMD and SVE.  Prefer SVE when the costs are deemed equal.
@end table

...

@item aarch64-autovec-preference
An old alias for @option{-mautovec-preference}.  If both
@option{-mautovec-preference} and @option{--param=aarch64_autovec-preference}
are passed, the @option{--param} value will be used.
--------------------------------------------------------------------------

(with the -m option deliberately not mentioning the --param)

Same idea for the .opt documentation.

Richard

Reply via email to